Git Product home page Git Product logo

touchbase.ai's Introduction

touchbase.ai

touchbase.ai is the easy, open source way for everyone to smartly engage more in meaningful relationships.

CircleCI

Deploy

touchbase.ai screenshot

Getting Started

git clone [email protected]:puncsky/touchbase.ai.git

Run your project

This is intended for *nix users. If you use Windows, go to Run on Windows. Let's first prepare the environment.

cd touchbase.ai

nvm use 10.15.0
npm install

# prepare environment variable
cp ./.env.tmpl ./.env

Note: please provide your MongoDB URI like MONGODB_URI=mongodb://localhost:27017/touchbase in ./.env file.

Development mode

To run your project in development mode, run:

npm run watch

The development site will be available at http://localhost:4103.

Production Mode

It's sometimes useful to run a project in production mode, for example, to check bundle size or to debug a production-only issue. To run your project in production mode locally, run:

npm run build-production
NODE_ENV=production npm run start

NPM scripts

  • npm run test: test the whole project and generate a test coverage
  • npm run ava ./path/to/test-file.js: run a specific test file
  • npm run build: build source code from src to dist
  • npm run lint: run the linter
  • npm run kill: kill the node server occupying the port 4103.

touchbase.ai's People

Contributors

anshuomomo avatar bitq2019 avatar codacy-badger avatar dependabot[bot] avatar dzcpy avatar freebreaker avatar mountainmoon avatar puncsky avatar renovate-bot avatar renovate[bot] avatar thinkvantage8977 avatar tuisku-l avatar yrjkqq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

touchbase.ai's Issues

add kdf from email and pw

encryptMnemonic(mnemonic, password): encryptedMnemonic

  • mnemonic -> client side
  • password -> not saved / keep to the user
  • encryptedMnemonic -> db

decryptMnemonic(encryptedMnemonic, password): mnemonic

  • encryptedMnemonic-> db
  • password -> not saved / keep to the user
  • mnemonic -> client side

[master] v1 MVP

Core

  • User onboarding, sign up with name
  • E2E encryption
  • Reminder
  • mobile
  • bug fixes and prepare to release

upnext

  • payment
  • tagging
  • retention
    • Daily Posts (recommended articles)
  • @at person's name
  • Improve profile editor, cleanup for collaboration, and user experiences

optimize empty fields for storage

when adding a new contact, we always create an empty field in the database, even though they are not required by the database. we should probably optimize this.

changing routes failed to scroll to the top of the page on mobile

open the browser on your mobile phone, go to https://www.guanxilab.com and scroll to the bottom and click Privacy Policy in the footer. and yes you will see the privacy policy page; however, it failed to scroll to the top, so you cannot read from the start. Please make sure changing route will scroll to the top in the mobile browser.

the fix is probably in guanxilab/src/shared/common/scroll-top.tsx

add email template for forgot password

don't use any template engine. just use js Template literals and js function.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:v="urn:schemas-microsoft-com:vml"
      xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
  <!--[if gte mso 9]><xml>
  <o:OfficeDocumentSettings>
    <o:AllowPNG/>
    <o:PixelsPerInch>96</o:PixelsPerInch>
  </o:OfficeDocumentSettings>
</xml><![endif]-->
  <title>guanxilab</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0 " />
  <meta name="format-detection" content="telephone=no"/>
  <!--[if !mso]><!-->
  <link href="https://fonts.googleapis.com/css?family=Lato:100,100i,300,300i,400,700,700i,900,900i" rel="stylesheet" />
  <!--<![endif]-->
  <style type="text/css">
    body {
      margin: 0;
      padding: 0;
      -webkit-text-size-adjust: 100% !important;
      -ms-text-size-adjust: 100% !important;
      -webkit-font-smoothing: antialiased !important;
    }
    img {
      border: 0 !important;
      outline: none !important;
    }
    p {
      Margin: 0px !important;
      Padding: 0px !important;
    }
    table {
      border-collapse: collapse;
      mso-table-lspace: 0px;
      mso-table-rspace: 0px;
    }
    td, a, span {
      border-collapse: collapse;
      mso-line-height-rule: exactly;
    }
    .ExternalClass * {
      line-height: 100%;
    }
    .em_blue a {text-decoration:none; color:#264780;}
    .em_grey a {text-decoration:none; color:#434343;}
    .em_white a {text-decoration:none; color:#ffffff;}

    @media only screen and (min-width:481px) and (max-width:649px) {
      .em_main_table {width: 100% !important;}
      .em_wrapper{width: 100% !important;}
      .em_hide{display:none !important;}
      .em_aside10{padding:0px 10px !important;}
      .em_h20{height:20px !important; font-size: 1px!important; line-height: 1px!important;}
      .em_h10{height:10px !important; font-size: 1px!important; line-height: 1px!important;}
      .em_aside5{padding:0px 10px !important;}
      .em_ptop2 { padding-top:8px !important; }
    }
    @media only screen and (min-width:375px) and (max-width:480px) {
      .em_main_table {width: 100% !important;}
      .em_wrapper{width: 100% !important;}
      .em_hide{display:none !important;}
      .em_aside10{padding:0px 10px !important;}
      .em_aside5{padding:0px 8px !important;}
      .em_h20{height:20px !important; font-size: 1px!important; line-height: 1px!important;}
      .em_h10{height:10px !important; font-size: 1px!important; line-height: 1px!important;}
      .em_font_11 {font-size: 12px !important;}
      .em_font_22 {font-size: 22px !important; line-height:25px !important;}
      .em_w5 { width:7px !important; }
      .em_w150 { width:150px !important; height:auto !important; }
      .em_ptop2 { padding-top:8px !important; }
      u + .em_body .em_full_wrap { width:100% !important; width:100vw !important;}
    }
    @media only screen and (max-width:374px) {
      .em_main_table {width: 100% !important;}
      .em_wrapper{width: 100% !important;}
      .em_hide{display:none !important;}
      .em_aside10{padding:0px 10px !important;}
      .em_aside5{padding:0px 8px !important;}
      .em_h20{height:20px !important; font-size: 1px!important; line-height: 1px!important;}
      .em_h10{height:10px !important; font-size: 1px!important; line-height: 1px!important;}
      .em_font_11 {font-size: 11px !important;}
      .em_font_22 {font-size: 22px !important; line-height:25px !important;}
      .em_w5 { width:5px !important; }
      .em_w150 { width:150px !important; height:auto !important; }
      .em_ptop2 { padding-top:8px !important; }
      u + .em_body .em_full_wrap { width:100% !important; width:100vw !important;}
    }
  </style>

</head>
<body class="em_body" style="margin:0px auto; padding:0px;" bgcolor="#efefef">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="em_full_wrap" align="center"  bgcolor="#efefef">
  <tr>
    <td align="center" valign="top"><table align="center" width="650" border="0" cellspacing="0" cellpadding="0" class="em_main_table" style="width:650px; table-layout:fixed;">
      <tr>
        <td align="center" valign="top" style="padding:0 25px;" class="em_aside10"><table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
          <tr>
            <td height="25" style="height:25px;" class="em_h20">&nbsp;</td>
          </tr>
          <tr>
            <td align="center" valign="top"><a href="#" target="_blank" style="text-decoration:none;"><img src="https://www.guanxilab.com/favicon.png" width="42" height="42" alt="guanxilab" border="0" style="display:block; font-family:Arial, sans-serif; font-size:18px; line-height:25px; text-align:center; color:#1d4685; font-weight:bold; max-width:208px;" class="em_w150" /></a></td>
          </tr>
          <tr>
            <td height="28" style="height:28px;" class="em_h20">&nbsp;</td>
          </tr>
        </table>
        </td>
      </tr>
    </table>
    </td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="em_full_wrap" align="center" bgcolor="#efefef">
  <tr>
    <td align="center" valign="top" class="em_aside5"><table align="center" width="650" border="0" cellspacing="0" cellpadding="0" class="em_main_table" style="width:650px; table-layout:fixed;">
      <tr>
        <td align="center" valign="top" style="padding:0 25px; background-color:#ffffff;" class="em_aside10"><table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
          <tr>
            <td height="45" style="height:45px;" class="em_h20">&nbsp;</td>
          </tr>
          <tr>
            <td class="em_blue em_font_22" align="center" valign="top" style="font-family: Arial, sans-serif; font-size: 26px; line-height: 29px; color:#264780; font-weight:bold;">Forgot your password?</td>
          </tr>
          <tr>
            <td height="14" style="height:14px; font-size:0px; line-height:0px;">&nbsp;</td>
          </tr>
          <tr>
            <td class="em_grey" align="center" valign="top" style="font-family: Arial, sans-serif; font-size: 16px; line-height: 26px; color:#434343;">It happens to the best of us. The good news is you can change it&nbsp;right.</td>
          </tr>
          <tr>
            <td height="26" style="height:26px;" class="em_h20">&nbsp;</td>
          </tr>
          <tr>
            <td align="center" valign="top"><table width="250" style="width:250px; background-color:#b46bd6; border-radius:4px;" border="0" cellspacing="0" cellpadding="0" align="center">
              <tr>
                <td class="em_white" height="42" align="center" valign="middle" style="font-family: Arial, sans-serif; font-size: 16px; color:#ffffff; font-weight:bold; height:42px;"><a href="https://www.mailgun.com" target="_blank" style="text-decoration:none; color:#ffffff; line-height:42px; display:block;">RESET YOUR PASSWORD</a></td>
              </tr>
            </table>
            </td>
          </tr>
          <tr>
            <td height="25" style="height:25px;" class="em_h20">&nbsp;</td>
          </tr>
          <tr>
            <td class="em_grey" align="center" valign="top" style="font-family: Arial, sans-serif; font-size: 16px; line-height: 26px; color:#434343;">If you didn&rsquo;t request a password reset, you don&rsquo;t have to do anything.<br class="em_hide" />
              Just ignore this email.</td>
          </tr>
          <tr>
            <td height="44" style="height:44px;" class="em_h20">&nbsp;</td>
          </tr>
        </table>
        </td>
      </tr>
    </table>
    </td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="em_full_wrap" align="center" bgcolor="#efefef">
  <tr>
    <td align="center" valign="top"><table align="center" width="650" border="0" cellspacing="0" cellpadding="0" class="em_main_table" style="width:650px; table-layout:fixed;">
      <tr>
        <td align="center" valign="top" style="padding:0 25px;" class="em_aside10"><table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
          <tr>
            <td height="40" style="height:40px;" class="em_h20">&nbsp;</td>
          </tr>
          <tr>
            <td height="16" style="height:16px; font-size:1px; line-height:1px; height:16px;">&nbsp;</td>
          </tr>
          <tr>
            <td height="9" style="font-size:0px; line-height:0px; height:9px;" class="em_h10"><img src="/assets/pilot/images/templates/spacer.gif" width="1" height="1" alt="" border="0" style="display:block;" /></td>
          </tr>
          <tr>
            <td align="center" valign="top"><table border="0" cellspacing="0" cellpadding="0" align="center">
              <tr>
                <td width="12" align="left" valign="middle" style="font-size:0px; line-height:0px; width:12px;"><a href="#" target="_blank" style="text-decoration:none;"><img src="/assets/pilot/images/templates/img_1.png" width="12" height="16" alt="" border="0" style="display:block; max-width:12px;" /></a></td>
                <td width="7" style="width:7px; font-size:0px; line-height:0px;" class="em_w5">&nbsp;</td>
                <td class="em_grey em_font_11" align="left" valign="middle" style="font-family: Arial, sans-serif; font-size: 13px; line-height: 15px; color:#434343;"><a href="https://guanxilab.com" target="_blank" style="text-decoration:none; color:#434343;">guanxilab</a> &bull; 68 Willow Road &bull; Menlo Park, CA 94025</td>
              </tr>
            </table>
            </td>
          </tr>
          <tr>
            <td height="35" style="height:35px;" class="em_h20">&nbsp;</td>
          </tr>
        </table>
        </td>
      </tr>
      <tr>
        <td height="1" bgcolor="#dadada" style="font-size:0px; line-height:0px; height:1px;"><img src="/assets/pilot/images/templates/spacer.gif" width="1" height="1" alt="" border="0" style="display:block;" /></td>
      </tr>
      <tr>
        <td align="center" valign="top" style="padding:0 25px;" class="em_aside10"><table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
          <tr>
            <td height="16" style="font-size:0px; line-height:0px; height:16px;">&nbsp;</td>
          </tr>
          <tr>
            <td align="center" valign="top"><table border="0" cellspacing="0" cellpadding="0" align="left" class="em_wrapper">
              <tr>
                <td class="em_grey" align="center" valign="middle" style="font-family: Arial, sans-serif; font-size: 11px; line-height: 16px; color:#434343;">&copy; guanxilab 2019 </td>
              </tr>
            </table>
            </td>
          </tr>
          <tr>
            <td height="16" style="font-size:0px; line-height:0px; height:16px;">&nbsp;</td>
          </tr>
        </table>
        </td>
      </tr>
      <tr>
        <td class="em_hide" style="line-height:1px;min-width:650px;background-color:#efefef;"><img alt="" src="/assets/pilot/images/templates/spacer.gif" height="1" width="650" style="max-height:1px; min-height:1px; display:block; width:650px; min-width:650px;" border="0" /></td>
      </tr>
    </table>
    </td>
  </tr>
</table>
</body>
</html>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.