├── docs ├── zohoverify │ ├── verifyforzoho.html │ └── .DS_Store ├── old_stage │ ├── _config.yml │ ├── favicon.ico │ ├── img │ │ ├── logo.png │ │ ├── webd.png │ │ ├── panda.png │ │ ├── mockup1.png │ │ ├── og-image.png │ │ ├── ph-logo.png │ │ ├── chatbotsmag.png │ │ ├── logo-small.png │ │ ├── logo-small1.png │ │ ├── 45D9903720DB921A.png │ │ ├── 4CAAEB278E75195F.png │ │ ├── ph-logo.svg │ │ ├── panda.svg │ │ ├── launchacologo.svg │ │ └── chatbotsmag.svg │ ├── apple-icon.png │ ├── favicon-128.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── ms-icon-70x70.png │ ├── mstile-70x70.png │ ├── favicon-196x196.png │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ ├── mstile-144x144.png │ ├── mstile-150x150.png │ ├── mstile-310x150.png │ ├── mstile-310x310.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── apple-icon-precomposed.png │ ├── apple-touch-icon-57x57.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-72x72.png │ ├── apple-touch-icon-76x76.png │ ├── apple-touch-icon-114x114.png │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-144x144.png │ ├── apple-touch-icon-152x152.png │ ├── browserconfig.xml │ ├── manifest.json │ ├── code.txt │ ├── css │ │ ├── main.css │ │ └── devices.css │ └── index.html ├── .DS_Store ├── mwlii_verify.html ├── google3621ae647d623afa (1).html ├── Brandie_files │ ├── og-image.png │ ├── 07dab5e8-84b2-491c-a02b-4af69413e116.PNG │ ├── 2d75a998-aa5e-4f63-b609-fe1a244b1c29.png │ ├── 3e01c961-995e-4606-a80f-b8d18e21cb73.PNG │ ├── 76fb57e8-3cbe-4752-8391-f63530079d46.png │ ├── 9b4cec18-15ec-4da0-b141-a1ec53888a6c.png │ ├── a11b9a5c-6c59-493b-b68e-493a6bea4fc5.png │ ├── css │ └── a41c8aad-4a6b-41a3-92e4-670d10168940.svg ├── privacy.html └── index.html ├── .gitignore ├── messenger-bot ├── .DS_Store ├── conf.js ├── README.md ├── package.json ├── package-lock.json └── server.js ├── README.md └── LICENSE /docs/zohoverify/verifyforzoho.html: -------------------------------------------------------------------------------- 1 | 1524330236098 -------------------------------------------------------------------------------- /docs/old_stage/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | docs/.DS_Store 3 | .DS_Store 4 | node_modules/ 5 | -------------------------------------------------------------------------------- /docs/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/.DS_Store -------------------------------------------------------------------------------- /docs/mwlii_verify.html: -------------------------------------------------------------------------------- 1 | af1544ac7fd570bfa6ec34ad63d4d0b9343360f8cd4485b34b73482db90f3327 -------------------------------------------------------------------------------- /docs/google3621ae647d623afa (1).html: -------------------------------------------------------------------------------- 1 | google-site-verification: google3621ae647d623afa.html -------------------------------------------------------------------------------- /messenger-bot/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/messenger-bot/.DS_Store -------------------------------------------------------------------------------- /docs/old_stage/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/favicon.ico -------------------------------------------------------------------------------- /docs/old_stage/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/logo.png -------------------------------------------------------------------------------- /docs/old_stage/img/webd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/webd.png -------------------------------------------------------------------------------- /docs/zohoverify/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/zohoverify/.DS_Store -------------------------------------------------------------------------------- /docs/old_stage/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon.png -------------------------------------------------------------------------------- /docs/old_stage/img/panda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/panda.png -------------------------------------------------------------------------------- /docs/Brandie_files/og-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/Brandie_files/og-image.png -------------------------------------------------------------------------------- /docs/old_stage/favicon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/favicon-128.png -------------------------------------------------------------------------------- /docs/old_stage/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/favicon-16x16.png -------------------------------------------------------------------------------- /docs/old_stage/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/favicon-32x32.png -------------------------------------------------------------------------------- /docs/old_stage/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/favicon-96x96.png -------------------------------------------------------------------------------- /docs/old_stage/img/mockup1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/mockup1.png -------------------------------------------------------------------------------- /docs/old_stage/img/og-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/og-image.png -------------------------------------------------------------------------------- /docs/old_stage/img/ph-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/ph-logo.png -------------------------------------------------------------------------------- /docs/old_stage/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/ms-icon-70x70.png -------------------------------------------------------------------------------- /docs/old_stage/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/mstile-70x70.png -------------------------------------------------------------------------------- /docs/old_stage/favicon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/favicon-196x196.png -------------------------------------------------------------------------------- /docs/old_stage/img/chatbotsmag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/chatbotsmag.png -------------------------------------------------------------------------------- /docs/old_stage/img/logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/logo-small.png -------------------------------------------------------------------------------- /docs/old_stage/img/logo-small1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/logo-small1.png -------------------------------------------------------------------------------- /docs/old_stage/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/ms-icon-144x144.png -------------------------------------------------------------------------------- /docs/old_stage/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/ms-icon-150x150.png -------------------------------------------------------------------------------- /docs/old_stage/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/ms-icon-310x310.png -------------------------------------------------------------------------------- /docs/old_stage/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/mstile-144x144.png -------------------------------------------------------------------------------- /docs/old_stage/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/mstile-150x150.png -------------------------------------------------------------------------------- /docs/old_stage/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/mstile-310x150.png -------------------------------------------------------------------------------- /docs/old_stage/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/mstile-310x310.png -------------------------------------------------------------------------------- /docs/old_stage/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/android-icon-36x36.png -------------------------------------------------------------------------------- /docs/old_stage/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/android-icon-48x48.png -------------------------------------------------------------------------------- /docs/old_stage/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/android-icon-72x72.png -------------------------------------------------------------------------------- /docs/old_stage/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/android-icon-96x96.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-114x114.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-120x120.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-144x144.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-152x152.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-180x180.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-57x57.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-60x60.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-72x72.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-76x76.png -------------------------------------------------------------------------------- /docs/old_stage/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/android-icon-144x144.png -------------------------------------------------------------------------------- /docs/old_stage/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/android-icon-192x192.png -------------------------------------------------------------------------------- /docs/old_stage/img/45D9903720DB921A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/45D9903720DB921A.png -------------------------------------------------------------------------------- /docs/old_stage/img/4CAAEB278E75195F.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/img/4CAAEB278E75195F.png -------------------------------------------------------------------------------- /docs/old_stage/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-icon-precomposed.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /docs/old_stage/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/old_stage/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /docs/Brandie_files/07dab5e8-84b2-491c-a02b-4af69413e116.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/Brandie_files/07dab5e8-84b2-491c-a02b-4af69413e116.PNG -------------------------------------------------------------------------------- /docs/Brandie_files/2d75a998-aa5e-4f63-b609-fe1a244b1c29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/Brandie_files/2d75a998-aa5e-4f63-b609-fe1a244b1c29.png -------------------------------------------------------------------------------- /docs/Brandie_files/3e01c961-995e-4606-a80f-b8d18e21cb73.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/Brandie_files/3e01c961-995e-4606-a80f-b8d18e21cb73.PNG -------------------------------------------------------------------------------- /docs/Brandie_files/76fb57e8-3cbe-4752-8391-f63530079d46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/Brandie_files/76fb57e8-3cbe-4752-8391-f63530079d46.png -------------------------------------------------------------------------------- /docs/Brandie_files/9b4cec18-15ec-4da0-b141-a1ec53888a6c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/Brandie_files/9b4cec18-15ec-4da0-b141-a1ec53888a6c.png -------------------------------------------------------------------------------- /docs/Brandie_files/a11b9a5c-6c59-493b-b68e-493a6bea4fc5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tushgup/heybrandie/HEAD/docs/Brandie_files/a11b9a5c-6c59-493b-b68e-493a6bea4fc5.png -------------------------------------------------------------------------------- /messenger-bot/conf.js: -------------------------------------------------------------------------------- 1 | var conf = module.exports = { 2 | FB_MESSAGE_URL: 'https://graph.facebook.com/v2.6/me/messages', 3 | VERIFY_TOKEN: '', 4 | PROFILE_TOKEN: '', 5 | PORT: '3000' 6 | }; 7 | -------------------------------------------------------------------------------- /messenger-bot/README.md: -------------------------------------------------------------------------------- 1 | # How to start development 2 | 3 | 1. Clone/Fork the repo. 4 | 2. Make a test Facebook Dev Messenger app. 5 | 3. Setup webhooks using a service like Heroku. 6 | 4. Add your own custom verfication token + page access token into conf.js 7 | 5. Start development! 8 | -------------------------------------------------------------------------------- /docs/old_stage/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Brandie 2 | A Facebook Messenger bot which helps university students and fresh graduates kickstart their personal branding. 3 | 4 | ## Usage Instructions 5 | ![Image](docs/Brandie_files/og-image.png) 6 | Head over to [Messenger](https://m.me/heybrandie) to try out the bot yourself. 7 | 8 | ## How to Contribute? 9 | Let's discuss suggestions in the Issues section and figure out how we can make Brandie smarter and better! 10 | -------------------------------------------------------------------------------- /messenger-bot/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "brandie-bot", 3 | "version": "0.0.1", 4 | "description": "Personal brand kickstarter", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Tushar Gupta", 10 | "license": "MIT", 11 | "homepage": "https://github.com/sgaurav/fb-messenger-echo-bot#readme", 12 | "dependencies": { 13 | "axios": "^0.17.1", 14 | "body-parser": "^1.18.3", 15 | "compression": "^1.7.3", 16 | "express": "^4.16.4", 17 | "node-fetch": "^1.7.3", 18 | "request": "^2.88.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /docs/old_stage/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Tushar Gupta 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/old_stage/code.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/old_stage/img/ph-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | Launchaco 9 | Created with Sketch. 10 | 11 | 12 | 13 | 15 | 16 | 18 | 19 | 21 | 23 | 25 | 27 | 29 | 30 | 32 | 34 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /docs/Brandie_files/css: -------------------------------------------------------------------------------- 1 | /* cyrillic-ext */ 2 | @font-face { 3 | font-family: 'Montserrat'; 4 | font-style: normal; 5 | font-weight: 400; 6 | src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/rBHvpRWBkgyW99dXT88n7wsYbbCjybiHxArTLjt7FRU.woff2) format('woff2'); 7 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 8 | } 9 | /* cyrillic */ 10 | @font-face { 11 | font-family: 'Montserrat'; 12 | font-style: normal; 13 | font-weight: 400; 14 | src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/NX1NravqaXESu9fFv7KuqgsYbbCjybiHxArTLjt7FRU.woff2) format('woff2'); 15 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 16 | } 17 | /* vietnamese */ 18 | @font-face { 19 | font-family: 'Montserrat'; 20 | font-style: normal; 21 | font-weight: 400; 22 | src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/SKK6Nusyv8QPNMtI4j9J2wsYbbCjybiHxArTLjt7FRU.woff2) format('woff2'); 23 | unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; 24 | } 25 | /* latin-ext */ 26 | @font-face { 27 | font-family: 'Montserrat'; 28 | font-style: normal; 29 | font-weight: 400; 30 | src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/gFXtEMCp1m_YzxsBpKl68gsYbbCjybiHxArTLjt7FRU.woff2) format('woff2'); 31 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 32 | } 33 | /* latin */ 34 | @font-face { 35 | font-family: 'Montserrat'; 36 | font-style: normal; 37 | font-weight: 400; 38 | src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/zhcz-_WihjSQC0oHJ9TCYAzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2'); 39 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; 40 | } 41 | /* cyrillic-ext */ 42 | @font-face { 43 | font-family: 'Montserrat'; 44 | font-style: normal; 45 | font-weight: 700; 46 | src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/IQHow_FEYlDC4Gzy_m8fcrllaL-ufMOTUcv7jfgmuJg.woff2) format('woff2'); 47 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 48 | } 49 | /* cyrillic */ 50 | @font-face { 51 | font-family: 'Montserrat'; 52 | font-style: normal; 53 | font-weight: 700; 54 | src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/IQHow_FEYlDC4Gzy_m8fcpsnFT_2ovhuEig4Dh-CBQw.woff2) format('woff2'); 55 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 56 | } 57 | /* vietnamese */ 58 | @font-face { 59 | font-family: 'Montserrat'; 60 | font-style: normal; 61 | font-weight: 700; 62 | src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/IQHow_FEYlDC4Gzy_m8fcnv4bDVR720piddN5sbmjzs.woff2) format('woff2'); 63 | unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; 64 | } 65 | /* latin-ext */ 66 | @font-face { 67 | font-family: 'Montserrat'; 68 | font-style: normal; 69 | font-weight: 700; 70 | src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/IQHow_FEYlDC4Gzy_m8fcjrEaqfC9P2pvLXik1Kbr9s.woff2) format('woff2'); 71 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 72 | } 73 | /* latin */ 74 | @font-face { 75 | font-family: 'Montserrat'; 76 | font-style: normal; 77 | font-weight: 700; 78 | src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/IQHow_FEYlDC4Gzy_m8fcmaVI6zN22yiurzcBKxPjFE.woff2) format('woff2'); 79 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; 80 | } 81 | -------------------------------------------------------------------------------- /docs/privacy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Privacy Policy - Brandie 5 | 6 | 7 | 8 | 9 | 10 |
11 |

Privacy Policy

12 | 13 |

Last updated: December 03, 2017

14 | 15 |

Brandie ("us", "we", or "our") operates the http://www.heybrandie.co website (the "Service").

16 | 17 |

This page informs you of our policies regarding the collection, use and disclosure of Personal Information when you use our Service.

18 | 19 |

We will not use or share your information with anyone except as described in this Privacy Policy. 20 | 21 |

We use your Personal Information for providing and improving the Service. By using the Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy.


22 | 23 | 24 |

Information Collection And Use

25 | 26 |

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you. Personally identifiable information may include, but is not limited to, your name ("Personal Information").

27 | 28 |

Log Data

29 | 30 |

We collect information that your browser sends whenever you visit our Service ("Log Data"). This Log Data may include information such as your computer's Internet Protocol ("IP") address, browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages and other statistics.

31 | 32 |

Cookies

33 | 34 |

Cookies are files with small amount of data, which may include an anonymous unique identifier. Cookies are sent to your browser from a web site and stored on your computer's hard drive.

35 | 36 |

We use "cookies" to collect information. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

37 | 38 |

Service Providers

39 | 40 |

We may employ third party companies and individuals to facilitate our Service, to provide the Service on our behalf, to perform Service-related services or to assist us in analyzing how our Service is used.

41 | 42 |

These third parties have access to your Personal Information only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.

43 | 44 |

Security

45 | 46 |

The security of your Personal Information is important to us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Information, we cannot guarantee its absolute security.

47 | 48 |

Links To Other Sites

49 | 50 |

Our Service may contain links to other sites that are not operated by us. If you click on a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.

51 | 52 |

We have no control over, and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

53 | 54 |

Children's Privacy

55 | 56 |

Our Service does not address anyone under the age of 13 ("Children").

57 | 58 |

We do not knowingly collect personally identifiable information from children under 13. If you are a parent or guardian and you are aware that your Children has provided us with Personal Information, please contact us. If we discover that a Children under 13 has provided us with Personal Information, we will delete such information from our servers immediately.

59 | 60 |

Changes To This Privacy Policy

61 | 62 |

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.

63 | 64 |

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

65 | 66 |

Contact Us

67 | 68 |

If you have any questions about this Privacy Policy, please contact us.

69 |
70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /docs/old_stage/img/panda.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 12 | 13 | 14 | 16 | 18 | 20 | 22 | 24 | 27 | 29 | 30 | 31 | 33 | 35 | 37 | 38 | 39 | Launchaco 40 | Created with Sketch. 41 | 42 | 43 | 46 | 50 | 53 | 57 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /docs/old_stage/img/launchacologo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Launchaco 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/old_stage/css/main.css: -------------------------------------------------------------------------------- 1 | /*neutral*/ 2 | * { 3 | font-family: 'karla', sans-serif; 4 | }.footer, 5 | .header { 6 | background: #F15A24; 7 | color: white; 8 | } 9 | .ctas-button { 10 | color: #F15A24; 11 | }@import url('https://fonts.googleapis.com/css?family=Karla:400,700'); 12 | *, 13 | *:before, 14 | *:after { 15 | margin: 0; 16 | box-sizing: border-box; 17 | } 18 | body { 19 | -webkit-font-smoothing: antialiased; 20 | } 21 | /*text*/ 22 | .heading { 23 | font-weight: 600; 24 | font-size: 50px; 25 | line-height: 68px; 26 | } 27 | hr1 { 28 | border-bottom: 1px solid rgba(0,0,0,.1) 29 | } 30 | @media (max-width: 900px) { 31 | .heading { 32 | font-size: 32px; 33 | line-height: 40px; 34 | } 35 | } 36 | .subheading { 37 | font-size: 30px; 38 | line-height: 40px; 39 | font-weight: 500; 40 | } 41 | @media (max-width: 900px) { 42 | .subheading { 43 | font-size: 26px; 44 | line-height: 35px; 45 | } 46 | } 47 | .paragraph { 48 | font-size: 18px; 49 | line-height: 32px; 50 | font-weight: 400; 51 | } 52 | .heading + .paragraph { 53 | margin-top: 30px; 54 | } 55 | .subheading + .paragraph { 56 | margin-top: 10px; 57 | } 58 | p.paragraph { 59 | color: rgba(0,0,0,.5); 60 | } 61 | .logo { 62 | font-size: 30px; 63 | line-height: 30px; 64 | font-weight: 900; 65 | } 66 | @media (max-width: 420px) { 67 | .logo { 68 | font-size: 22px; 69 | } 70 | } 71 | .nav-link2, 72 | .nav-link { 73 | text-decoration: none; 74 | font-size: 18px; 75 | line-height: 30px; 76 | color: inherit; 77 | } 78 | .nav-link:not(:first-of-type) { 79 | margin-left: 20px; 80 | } 81 | .text-center { 82 | text-align: center; 83 | } 84 | .text-right { 85 | text-align: right; 86 | } 87 | /*flexbox styles*/ 88 | .flex, 89 | .spread, 90 | .center, 91 | .right, 92 | .vertical, 93 | .centervertical { 94 | display: flex; 95 | } 96 | .spread { 97 | justify-content: space-between; 98 | } 99 | .center { 100 | align-items: center; 101 | justify-content: center; 102 | } 103 | .centervertical { 104 | flex-direction: column; 105 | justify-content: center; 106 | } 107 | .right { 108 | justify-content: flex-end; 109 | } 110 | .vertical { 111 | flex-direction: column; 112 | } 113 | /*grid*/ 114 | .col-1, 115 | .col-2, 116 | .col-3, 117 | .col-4, 118 | .col-5, 119 | .col-6, 120 | .col-7, 121 | .col-8, 122 | .col-9, 123 | .col-10, 124 | .col-11, 125 | .col-12 { 126 | padding: 0 20px; 127 | } 128 | .col-1 {width: 8.333333%;} 129 | .col-2 {width: 16.666667%;} 130 | .col-3 {width: 25%;} 131 | .col-4 {width: 33.333333%;} 132 | .col-5 {width: 41.666667%;} 133 | .col-6 {width: 50%;} 134 | .col-7 {width: 58.333333%;} 135 | .col-8 {width: 66.666667%;} 136 | .col-9 {width: 75%;} 137 | .col-10 {width: 83.333333%;} 138 | .col-11 {width: 91.666667%;} 139 | .col-12 {width: 100%;} 140 | 141 | /*containers*/ 142 | .container-lrg, 143 | .container-sml { 144 | margin: auto; 145 | width: 100%; 146 | } 147 | .container-lrg { 148 | max-width: 1080px; 149 | } 150 | .container-sml { 151 | max-width: 700px; 152 | } 153 | .ctas { 154 | margin: 40px 0 0 0; 155 | } 156 | .centerdevices, 157 | .sidedevices { 158 | position: relative; 159 | }.header { 160 | padding: 20px 0 60px 0; 161 | overflow: hidden; 162 | } 163 | .header .sidedevices { 164 | margin: 60px 0 0 165 | } 166 | @media (max-width: 900px) { 167 | .header .sidedevices { 168 | min-height: inherit; 169 | } 170 | .header .flex { 171 | flex-direction: column; 172 | } 173 | .header .heading { 174 | margin-top: 60px; 175 | } 176 | .header .col-6 { 177 | width: 100%; 178 | } 179 | }.ctas-button { 180 | display: inline-block; 181 | height: 40px; 182 | line-height: 38px; 183 | padding: 0 30px; 184 | background: #fff; 185 | border-radius: 3px; 186 | font-size: 15px; 187 | font-weight: 600; 188 | text-transform: uppercase; 189 | letter-spacing: .3px; 190 | border: 1px solid white; 191 | text-decoration: none; 192 | }.socialproof { 193 | padding: 90px 0; 194 | } 195 | .testimonial-content { 196 | margin-top: 15px; 197 | } 198 | .testimonial { 199 | margin-top: 40px; 200 | border-radius: 3px; 201 | padding: 20px; 202 | border: 1px solid rgba(0,0,0,.1); 203 | min-height: 240px; 204 | } 205 | @media (max-width: 750px) { 206 | .socialproof .emoji { 207 | font-size: 40px; 208 | } 209 | .testimonial { 210 | min-height: inherit; 211 | } 212 | .socialproof .flex { 213 | flex-wrap: wrap; 214 | } 215 | .socialproof .col-4:nth-of-type(1) { 216 | width: 100%; 217 | } 218 | .socialproof .col-4:not(:nth-of-type(1)) { 219 | width: 50%; 220 | } 221 | } 222 | @media (max-width: 500px) { 223 | .socialproof .col-4:nth-of-type(1) { 224 | margin-bottom: 0; 225 | } 226 | .socialproof .col-4:not(:nth-of-type(1)) { 227 | width: 100%; 228 | } 229 | }.ctas-button, 230 | .ctas-button-2 { 231 | display: inline-block; 232 | height: 40px; 233 | line-height: 38px; 234 | padding: 0 30px; 235 | background: #fff; 236 | border-radius: 3px; 237 | font-size: 15px; 238 | font-weight: 600; 239 | text-transform: uppercase; 240 | letter-spacing: .3px; 241 | border: 1px solid white; 242 | text-decoration: none; 243 | } 244 | .ctas-button-2 { 245 | background: transparent; 246 | color: white; 247 | margin: 0 0 0 10px; 248 | } 249 | @media (max-width: 440px) { 250 | .ctas-button, 251 | .ctas-button-2 { 252 | display: block; 253 | width: 100%; 254 | text-align: center; 255 | } 256 | .ctas-button-2 { 257 | margin: 10px 0 0 0; 258 | } 259 | }.footer { 260 | padding: 90px 0 45px; 261 | } 262 | .footer .footer-nav { 263 | padding-top: 90px; 264 | } 265 | .footer .nav-link { 266 | display: inline-block; 267 | margin: 0 10px; 268 | }.ctas-button { 269 | display: inline-block; 270 | height: 40px; 271 | line-height: 38px; 272 | padding: 0 30px; 273 | background: #fff; 274 | border-radius: 3px; 275 | font-size: 15px; 276 | font-weight: 600; 277 | text-transform: uppercase; 278 | letter-spacing: .3px; 279 | border: 1px solid white; 280 | text-decoration: none; 281 | }.feature3 { 282 | padding: 90px 0; 283 | border-bottom: 1px solid rgba(0,0,0,.1); 284 | } 285 | .padd { 286 | padding: 10px; 287 | } 288 | .divpad { 289 | margin-top: 50px; 290 | } 291 | .feature3 a { 292 | display: inline-block; 293 | } 294 | .feature3 .emoji { 295 | font-size: 55px; 296 | color: black 297 | } 298 | @media (max-width: 750px) { 299 | .feature3 .emoji { 300 | font-size: 40px; 301 | } 302 | .feature3 .flex { 303 | flex-wrap: wrap; 304 | } 305 | .feature3 .col-4:nth-of-type(1) { 306 | width: 100%; 307 | margin-bottom: 30px; 308 | } 309 | .feature3 .col-4:not(:nth-of-type(1)) { 310 | width: 50%; 311 | } 312 | } 313 | @media (max-width: 500px) { 314 | .feature3 .col-4:nth-of-type(1) { 315 | margin-bottom: 0; 316 | } 317 | .feature3 .col-4:not(:nth-of-type(1)) { 318 | width: 100%; 319 | margin-top: 30px; 320 | } 321 | } 322 | -------------------------------------------------------------------------------- /docs/old_stage/css/devices.css: -------------------------------------------------------------------------------- 1 | .sidedevices .browseriphone .mask { 2 | height: 100%; 3 | width: 100%; 4 | overflow: hidden; 5 | background: white; 6 | } 7 | .sidedevices .browseriphone .mask-img { 8 | width: 100%; 9 | display: block; 10 | } 11 | .sidedevices .browseriphone .browser { 12 | border-radius: 6px; 13 | background: linear-gradient(to bottom, rgba(233,232,233,1) 0%,rgba(212,212,213,1) 100%); 14 | background-size: 60px; 15 | box-shadow: 0 10px 20px rgba(40,39,66,.06); 16 | overflow: hidden; 17 | width: 900px; 18 | height: 560px; 19 | z-index: 2; 20 | padding: 30px 0 0 0; 21 | position: relative; 22 | top: 0; 23 | left: 90px; 24 | } 25 | .sidedevices .browseriphone .browser:before { 26 | content: "\25CF \25CF \25CF"; 27 | letter-spacing: -1px; 28 | border-radius: 10px; 29 | color: rgba(0,0,0,.05); 30 | background: -webkit-linear-gradient(left, rgba(255,99,91,1) 0%,rgba(255,99,91,1) 35%,rgba(255,99,91,1) 35%,rgba(255,195,48,1) 35%,rgba(255,195,48,1) 66%,rgba(41,207,66,1) 66%,rgba(41,207,66,1) 100%); 31 | -webkit-background-clip: text; 32 | -webkit-text-fill-color: transparent; 33 | font-size: 26px; 34 | line-height: 30px; 35 | height: 30px; 36 | padding-left: 8px; 37 | position: absolute; 38 | top: 0; 39 | } 40 | .sidedevices .browseriphone .iphone { 41 | background: linear-gradient(to bottom, rgba(247,251,254,1) 0%,rgba(221,226,232,1) 100%); 42 | box-shadow: inset 0 4px 7px 1px #fff,inset 0 -5px 20px rgba(187,200,225,.35),0 2px 6px rgba(40,39,66,.14),0 10px 20px rgba(40,39,66,.06), 0px 36px 79px -1px rgba(0,0,0,0.15); 43 | overflow: hidden; 44 | border-radius: 30px; 45 | width: 220px; 46 | height: 440px; 47 | padding: 50px 8px 60px; 48 | z-index: 3; 49 | position: absolute; 50 | top: 0; 51 | transform: translate3d(0,130px,0); 52 | } 53 | .sidedevices .browseriphone .iphone .mask { 54 | border-radius: 4px; 55 | } 56 | .sidedevices .browseriphone .iphone:after { 57 | content: ""; 58 | width: 44px; 59 | height: 44px; 60 | border-radius: 50%; 61 | background: rgba(0,0,0,.05); 62 | position: absolute; 63 | top: calc(50% - 22px); 64 | right: 23px; 65 | } 66 | .sidedevices .browseriphone .iphone:after { 67 | top: initial; 68 | width: 38px; 69 | height: 38px; 70 | left: calc(50% - 19px); 71 | bottom: 12px; 72 | } 73 | .sidedevices .browseriphone .iphone:before { 74 | content: ""; 75 | width: 50px; 76 | height: 7px; 77 | border-radius: 10px; 78 | background: rgba(0,0,0,.08); 79 | position: absolute; 80 | top: 24px; 81 | left: calc(50% - 25px); 82 | } 83 | @media (max-width: 660px) { 84 | .sidedevices .browseriphone { 85 | white-space: nowrap; 86 | overflow: scroll; 87 | margin-left: -20px; 88 | width: calc(100% + 40px;); 89 | -webkit-overflow-scrolling: touch; 90 | vertical-align: top; 91 | } 92 | .sidedevices .browseriphone .iphone { 93 | display: inline-block; 94 | vertical-align: top; 95 | position: relative; 96 | transform: none; 97 | margin: 0 20px; 98 | } 99 | .sidedevices .browseriphone .browser { 100 | height: 440px; 101 | width: 708px; 102 | display: inline-block; 103 | vertical-align: top; 104 | left: inherit; 105 | margin: 0 20px 0 0; 106 | } 107 | }.centerdevices .iphoneipad2 .mask { 108 | height: 100%; 109 | width: 100%; 110 | overflow: hidden; 111 | border-radius: 8px; 112 | box-shadow: -1px 1px 4px rgba(107,124,147,.45); 113 | background: white; 114 | } 115 | .centerdevices .iphoneipad2 .mask-img { 116 | width: 100%; 117 | display: block; 118 | } 119 | .centerdevices .iphoneipad2 .iphone, 120 | .centerdevices .iphoneipad2 .ipad { 121 | border-radius: 40px; 122 | position: relative; 123 | background: linear-gradient(to bottom, rgba(247,251,254,1) 0%,rgba(221,226,232,1) 100%); 124 | box-shadow: inset 0 4px 7px 1px #fff,inset 0 -5px 20px rgba(187,200,225,.35),0 2px 6px rgba(40,39,66,.14),0 10px 20px rgba(40,39,66,.06), 0px 36px 79px -1px rgba(0,0,0,0.15); 125 | overflow: hidden; 126 | } 127 | .centerdevices .iphoneipad2 .iphone { 128 | border-radius: 30px; 129 | width: 280px; 130 | height: 560px; 131 | z-index: 2; 132 | padding: 60px 12px 70px; 133 | position: absolute; 134 | top: 0; 135 | left: 0; 136 | transform: rotate(-5deg); 137 | } 138 | .centerdevices .iphoneipad2 .iphone .mask { 139 | border-radius: 4px; 140 | } 141 | .centerdevices .iphoneipad2 .ipad { 142 | width: 830px; 143 | height: 560px; 144 | padding: 15px 85px; 145 | margin-left: auto; 146 | transform: rotate(5deg); 147 | } 148 | 149 | .centerdevices .iphoneipad2 .ipad:after, 150 | .centerdevices .iphoneipad2 .iphone:after, 151 | .centerdevices .iphoneipad2 .ipad:before { 152 | content: ""; 153 | width: 44px; 154 | height: 44px; 155 | border-radius: 50%; 156 | background: rgba(0,0,0,.05); 157 | position: absolute; 158 | top: calc(50% - 22px); 159 | right: 23px; 160 | } 161 | .centerdevices .iphoneipad2 .ipad:after { 162 | left: 34px; 163 | width: 16px; 164 | height: 16px; 165 | top: calc(50% - 8px); 166 | } 167 | .centerdevices .iphoneipad2 .iphone:after { 168 | top: initial; 169 | bottom: 14px; 170 | left: calc(50% - 22px); 171 | } 172 | .centerdevices .iphoneipad2 .iphone:before { 173 | content: ""; 174 | width: 58px; 175 | height: 10px; 176 | border-radius: 10px; 177 | background: rgba(0, 0, 0, 0.08); 178 | position: absolute; 179 | top: 28px; 180 | left: calc(50% - 29px); 181 | } 182 | @media screen and (max-width: 900px) { 183 | .centerdevices .iphoneipad2 { 184 | position: relative; 185 | white-space: nowrap; 186 | vertical-align: top; 187 | overflow: scroll; 188 | width: calc(100% + 40px); 189 | margin: 0 0 0 -20px; 190 | z-index: 99; 191 | -webkit-overflow-scrolling: touch; 192 | } 193 | .centerdevices .iphoneipad2 .iphone, 194 | .centerdevices .iphoneipad2 .ipad { 195 | transform: none; 196 | border: none; 197 | position: relative; 198 | box-shadow: inset 0 4px 7px 1px #fff,inset 0 -5px 20px rgba(187,200,225,.35),0 2px 6px rgba(40,39,66,.14),0 10px 20px rgba(40,39,66,.06); 199 | background: linear-gradient(to bottom, rgba(247,251,254,1) 0%,rgba(221,226,232,1) 100%); 200 | margin: 0 20px; 201 | display: inline-block; 202 | } 203 | .centerdevices .iphoneipad2 .iphone { 204 | height: 440px; 205 | width: 220px; 206 | padding: 50px 8px 60px; 207 | margin: 0 0 0 20px; 208 | border-radius: 30px; 209 | } 210 | .centerdevices .iphoneipad2 .iphone .mask { 211 | border-radius: 4px; 212 | } 213 | .centerdevices .iphoneipad2 .iphone:before { 214 | top: 24px; 215 | width: 50px; 216 | height: 7px; 217 | left: calc(50% - 25px); 218 | } 219 | .centerdevices .iphoneipad2 .iphone:after { 220 | width: 38px; 221 | height: 38px; 222 | left: calc(50% - 19px); 223 | bottom: 12px; 224 | } 225 | .centerdevices .iphoneipad2 .ipad { 226 | width: 740px; 227 | height: 440px; 228 | } 229 | .centerdevices .iphoneipad2 .ipad:before { 230 | left: 23px; 231 | right: inherit; 232 | } 233 | .centerdevices .iphoneipad2 .ipad:after { 234 | right: 36px; 235 | left: inherit; 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /docs/Brandie_files/a41c8aad-4a6b-41a3-92e4-670d10168940.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 5 | Created with Sketch. 6 | 7 | 8 | 33 | 34 | -------------------------------------------------------------------------------- /docs/old_stage/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | Brandie - Supercharge your Personal Brand 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 73 |
74 |
75 |
76 |
77 | 80 |
81 |
82 |
83 |
84 |
85 |

86 | Kickstart your personal brand & discovery.
87 |

88 |

89 | A chatbot designed to help students and young graduates kickstart their online professional presence through personalised insights.
90 |

91 | 98 |
103 |
104 |
105 |
106 |

107 | View on GitHub 108 |

109 |
110 |
111 |
112 |
113 | 114 |
115 |
116 |
117 |
118 |
119 |
120 | 121 | 🔑 122 | 123 |

124 | Personalised 125 |

126 |

127 | Tailormade insights derived from your current online presence.
128 |

129 |
130 |
131 | 132 | 🚀 133 | 134 |

135 | Quick 136 |

137 |

138 | Fastest way to tick things off your professional to-do list.
139 |

140 |
141 |
142 | 143 | 👋 144 | 145 |

146 | 24x7 Available
147 |

148 |

149 | We're always here to help! Message us at any time.
150 |

151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 | 2,100+ 160 |
161 | 162 | Active Users 163 | 164 |
165 |
166 |
167 | 10,000+ 168 |
169 | 170 | Personalized Insights Offered 171 | 172 |
173 |
174 |
175 | 80+ 176 |
177 | 178 | Countries Global Reach 179 | 180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |

189 | We're helping students and young grads everywhere.
190 |

191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 | 201 | Tanishq 202 | 203 |
204 | 205 | NMIMS, MH 206 | 207 |
208 |
209 |
210 |

211 | I loved the flow. It takes in consideration of all possible ways and grooms an individual as needed! 212 |

213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 | 221 | Anirudh 222 | 223 |
224 | 225 | Monash University, AU 226 | 227 |
228 |
229 |
230 |

231 | Brandie is a great app! I'll definitely recommend it to my colleagues. 232 | 233 |

234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 | 242 | Akshansh 243 | 244 |
245 | 246 | MPSTME, India 247 | 248 |
249 |
250 |
251 |

252 | In an era of personal branding, let this great tool help you in building an online presence. 253 |

254 |
255 |
256 |
257 |
258 |
259 |
260 | 300 | 301 | 302 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Brandie - Supercharge your personal brand 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 32 | 33 | 34 | 35 | 36 |
37 | 38 |
39 |
40 |
41 | 44 | 45 |
46 |
47 |
48 |
49 |
50 |
51 |

Supercharge your personal brand & discovery.

52 |

A chatbot designed to help you kickstart your online professional presence through personalised insights.

53 | 64 |
65 |
66 |
67 |
68 | Screenshot of iPhone App 69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | 80 | 81 | 82 | 83 | 84 |
85 |

Tailored Insights

86 |

Brandie provides personalised tips analyzed from your current online presence.

87 |
88 |
89 |
90 | 91 | 92 | 93 | 94 | 95 |
96 |

Conversational

97 |

Chat with Brandie just like a friend. Available on all your favourite platforms.

98 |
99 |
100 |
101 | 102 | 103 | 104 | 105 | 106 |
107 |

Always Online

108 |

Brandie is here to help you supercharge your brand 24x7.

109 |
110 |
111 |
112 |
113 |
114 |
115 | Screenshot of iPhone App 116 |
117 |
118 |
119 |
120 |
121 |
122 | 123 |
124 |
125 |

Over 2,500 users in over 86 countries

126 |

Find out why they chose Brandie to improve their online presence.

127 | 132 |
133 |
134 |
135 |
136 |
137 |
138 |

Featured In

139 | 140 |
141 |
142 |
143 |
144 |
145 | 146 |
147 |
148 | 149 |
150 |
151 | 152 |
153 |
154 | 155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 | 163 |
164 |
165 |
I loved the flow. It takes in consideration of all possible ways and grooms an individual as needed!
166 |
167 | 168 |

Tanishq

169 | Entrepreneur & Student 170 |
171 |
172 | 173 | 174 |
175 | 176 |
177 |
178 |
In an era of personal branding, let this great tool help you in building an online presence.
179 |
180 | 181 |

Akshansh

182 | Dev Intern, Madhouse Apps 183 |
184 |
185 | 186 | 187 |
188 | 189 |
190 |
191 |
Loved using Brandie! It definitely helped me identify how to improve my personal discovery.
192 |
193 | 194 |

Anirudh

195 | Data Science, Monash University 196 |
197 |
198 | 199 | 200 |
201 |
202 |
203 |
204 |
205 |
206 | 209 |
210 | 211 | 212 | 213 |
214 |
215 | © 216 | 2018, All Rights Reserved 217 |
218 |
219 |
220 | 221 | -------------------------------------------------------------------------------- /messenger-bot/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "brandie-bot", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 11 | "requires": { 12 | "mime-types": "~2.1.18", 13 | "negotiator": "0.6.1" 14 | } 15 | }, 16 | "ajv": { 17 | "version": "5.5.2", 18 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 19 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 20 | "requires": { 21 | "co": "^4.6.0", 22 | "fast-deep-equal": "^1.0.0", 23 | "fast-json-stable-stringify": "^2.0.0", 24 | "json-schema-traverse": "^0.3.0" 25 | } 26 | }, 27 | "array-flatten": { 28 | "version": "1.1.1", 29 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 30 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 31 | }, 32 | "asn1": { 33 | "version": "0.2.4", 34 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 35 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 36 | "requires": { 37 | "safer-buffer": "~2.1.0" 38 | } 39 | }, 40 | "assert-plus": { 41 | "version": "1.0.0", 42 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 43 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 44 | }, 45 | "asynckit": { 46 | "version": "0.4.0", 47 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 48 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 49 | }, 50 | "aws-sign2": { 51 | "version": "0.7.0", 52 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 53 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 54 | }, 55 | "aws4": { 56 | "version": "1.8.0", 57 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 58 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 59 | }, 60 | "axios": { 61 | "version": "0.17.1", 62 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", 63 | "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", 64 | "requires": { 65 | "follow-redirects": "^1.2.5", 66 | "is-buffer": "^1.1.5" 67 | } 68 | }, 69 | "bcrypt-pbkdf": { 70 | "version": "1.0.2", 71 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 72 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 73 | "requires": { 74 | "tweetnacl": "^0.14.3" 75 | } 76 | }, 77 | "body-parser": { 78 | "version": "1.18.3", 79 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 80 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 81 | "requires": { 82 | "bytes": "3.0.0", 83 | "content-type": "~1.0.4", 84 | "debug": "2.6.9", 85 | "depd": "~1.1.2", 86 | "http-errors": "~1.6.3", 87 | "iconv-lite": "0.4.23", 88 | "on-finished": "~2.3.0", 89 | "qs": "6.5.2", 90 | "raw-body": "2.3.3", 91 | "type-is": "~1.6.16" 92 | }, 93 | "dependencies": { 94 | "debug": { 95 | "version": "2.6.9", 96 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 97 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 98 | "requires": { 99 | "ms": "2.0.0" 100 | } 101 | }, 102 | "iconv-lite": { 103 | "version": "0.4.23", 104 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 105 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 106 | "requires": { 107 | "safer-buffer": ">= 2.1.2 < 3" 108 | } 109 | } 110 | } 111 | }, 112 | "bytes": { 113 | "version": "3.0.0", 114 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 115 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 116 | }, 117 | "caseless": { 118 | "version": "0.12.0", 119 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 120 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 121 | }, 122 | "co": { 123 | "version": "4.6.0", 124 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 125 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 126 | }, 127 | "combined-stream": { 128 | "version": "1.0.7", 129 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 130 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 131 | "requires": { 132 | "delayed-stream": "~1.0.0" 133 | } 134 | }, 135 | "compressible": { 136 | "version": "2.0.15", 137 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", 138 | "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", 139 | "requires": { 140 | "mime-db": ">= 1.36.0 < 2" 141 | } 142 | }, 143 | "compression": { 144 | "version": "1.7.3", 145 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", 146 | "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", 147 | "requires": { 148 | "accepts": "~1.3.5", 149 | "bytes": "3.0.0", 150 | "compressible": "~2.0.14", 151 | "debug": "2.6.9", 152 | "on-headers": "~1.0.1", 153 | "safe-buffer": "5.1.2", 154 | "vary": "~1.1.2" 155 | }, 156 | "dependencies": { 157 | "debug": { 158 | "version": "2.6.9", 159 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 160 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 161 | "requires": { 162 | "ms": "2.0.0" 163 | } 164 | } 165 | } 166 | }, 167 | "content-disposition": { 168 | "version": "0.5.2", 169 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 170 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 171 | }, 172 | "content-type": { 173 | "version": "1.0.4", 174 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 175 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 176 | }, 177 | "cookie": { 178 | "version": "0.3.1", 179 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 180 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 181 | }, 182 | "cookie-signature": { 183 | "version": "1.0.6", 184 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 185 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 186 | }, 187 | "core-util-is": { 188 | "version": "1.0.2", 189 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 190 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 191 | }, 192 | "dashdash": { 193 | "version": "1.14.1", 194 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 195 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 196 | "requires": { 197 | "assert-plus": "^1.0.0" 198 | } 199 | }, 200 | "debug": { 201 | "version": "3.1.0", 202 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 203 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 204 | "requires": { 205 | "ms": "2.0.0" 206 | } 207 | }, 208 | "delayed-stream": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 211 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 212 | }, 213 | "depd": { 214 | "version": "1.1.2", 215 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 216 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 217 | }, 218 | "destroy": { 219 | "version": "1.0.4", 220 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 221 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 222 | }, 223 | "ecc-jsbn": { 224 | "version": "0.1.2", 225 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 226 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 227 | "requires": { 228 | "jsbn": "~0.1.0", 229 | "safer-buffer": "^2.1.0" 230 | } 231 | }, 232 | "ee-first": { 233 | "version": "1.1.1", 234 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 235 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 236 | }, 237 | "encodeurl": { 238 | "version": "1.0.2", 239 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 240 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 241 | }, 242 | "encoding": { 243 | "version": "0.1.12", 244 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", 245 | "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", 246 | "requires": { 247 | "iconv-lite": "~0.4.13" 248 | } 249 | }, 250 | "escape-html": { 251 | "version": "1.0.3", 252 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 253 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 254 | }, 255 | "etag": { 256 | "version": "1.8.1", 257 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 258 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 259 | }, 260 | "express": { 261 | "version": "4.16.4", 262 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 263 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 264 | "requires": { 265 | "accepts": "~1.3.5", 266 | "array-flatten": "1.1.1", 267 | "body-parser": "1.18.3", 268 | "content-disposition": "0.5.2", 269 | "content-type": "~1.0.4", 270 | "cookie": "0.3.1", 271 | "cookie-signature": "1.0.6", 272 | "debug": "2.6.9", 273 | "depd": "~1.1.2", 274 | "encodeurl": "~1.0.2", 275 | "escape-html": "~1.0.3", 276 | "etag": "~1.8.1", 277 | "finalhandler": "1.1.1", 278 | "fresh": "0.5.2", 279 | "merge-descriptors": "1.0.1", 280 | "methods": "~1.1.2", 281 | "on-finished": "~2.3.0", 282 | "parseurl": "~1.3.2", 283 | "path-to-regexp": "0.1.7", 284 | "proxy-addr": "~2.0.4", 285 | "qs": "6.5.2", 286 | "range-parser": "~1.2.0", 287 | "safe-buffer": "5.1.2", 288 | "send": "0.16.2", 289 | "serve-static": "1.13.2", 290 | "setprototypeof": "1.1.0", 291 | "statuses": "~1.4.0", 292 | "type-is": "~1.6.16", 293 | "utils-merge": "1.0.1", 294 | "vary": "~1.1.2" 295 | }, 296 | "dependencies": { 297 | "debug": { 298 | "version": "2.6.9", 299 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 300 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 301 | "requires": { 302 | "ms": "2.0.0" 303 | } 304 | }, 305 | "statuses": { 306 | "version": "1.4.0", 307 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 308 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 309 | } 310 | } 311 | }, 312 | "extend": { 313 | "version": "3.0.2", 314 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 315 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 316 | }, 317 | "extsprintf": { 318 | "version": "1.3.0", 319 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 320 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 321 | }, 322 | "fast-deep-equal": { 323 | "version": "1.1.0", 324 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 325 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 326 | }, 327 | "fast-json-stable-stringify": { 328 | "version": "2.0.0", 329 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 330 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 331 | }, 332 | "finalhandler": { 333 | "version": "1.1.1", 334 | "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 335 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 336 | "requires": { 337 | "debug": "2.6.9", 338 | "encodeurl": "~1.0.2", 339 | "escape-html": "~1.0.3", 340 | "on-finished": "~2.3.0", 341 | "parseurl": "~1.3.2", 342 | "statuses": "~1.4.0", 343 | "unpipe": "~1.0.0" 344 | }, 345 | "dependencies": { 346 | "debug": { 347 | "version": "2.6.9", 348 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 349 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 350 | "requires": { 351 | "ms": "2.0.0" 352 | } 353 | }, 354 | "statuses": { 355 | "version": "1.4.0", 356 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 357 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 358 | } 359 | } 360 | }, 361 | "follow-redirects": { 362 | "version": "1.5.9", 363 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", 364 | "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", 365 | "requires": { 366 | "debug": "=3.1.0" 367 | } 368 | }, 369 | "forever-agent": { 370 | "version": "0.6.1", 371 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 372 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 373 | }, 374 | "form-data": { 375 | "version": "2.3.3", 376 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 377 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 378 | "requires": { 379 | "asynckit": "^0.4.0", 380 | "combined-stream": "^1.0.6", 381 | "mime-types": "^2.1.12" 382 | } 383 | }, 384 | "forwarded": { 385 | "version": "0.1.2", 386 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 387 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 388 | }, 389 | "fresh": { 390 | "version": "0.5.2", 391 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 392 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 393 | }, 394 | "getpass": { 395 | "version": "0.1.7", 396 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 397 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 398 | "requires": { 399 | "assert-plus": "^1.0.0" 400 | } 401 | }, 402 | "har-schema": { 403 | "version": "2.0.0", 404 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 405 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 406 | }, 407 | "har-validator": { 408 | "version": "5.1.0", 409 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", 410 | "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", 411 | "requires": { 412 | "ajv": "^5.3.0", 413 | "har-schema": "^2.0.0" 414 | } 415 | }, 416 | "http-errors": { 417 | "version": "1.6.3", 418 | "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 419 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 420 | "requires": { 421 | "depd": "~1.1.2", 422 | "inherits": "2.0.3", 423 | "setprototypeof": "1.1.0", 424 | "statuses": ">= 1.4.0 < 2" 425 | } 426 | }, 427 | "http-signature": { 428 | "version": "1.2.0", 429 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 430 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 431 | "requires": { 432 | "assert-plus": "^1.0.0", 433 | "jsprim": "^1.2.2", 434 | "sshpk": "^1.7.0" 435 | } 436 | }, 437 | "iconv-lite": { 438 | "version": "0.4.13", 439 | "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", 440 | "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" 441 | }, 442 | "inherits": { 443 | "version": "2.0.3", 444 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 445 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 446 | }, 447 | "ipaddr.js": { 448 | "version": "1.8.0", 449 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 450 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 451 | }, 452 | "is-buffer": { 453 | "version": "1.1.6", 454 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 455 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 456 | }, 457 | "is-stream": { 458 | "version": "1.1.0", 459 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 460 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 461 | }, 462 | "is-typedarray": { 463 | "version": "1.0.0", 464 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 465 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 466 | }, 467 | "isstream": { 468 | "version": "0.1.2", 469 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 470 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 471 | }, 472 | "jsbn": { 473 | "version": "0.1.1", 474 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 475 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 476 | }, 477 | "json-schema": { 478 | "version": "0.2.3", 479 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 480 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 481 | }, 482 | "json-schema-traverse": { 483 | "version": "0.3.1", 484 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 485 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 486 | }, 487 | "json-stringify-safe": { 488 | "version": "5.0.1", 489 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 490 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 491 | }, 492 | "jsprim": { 493 | "version": "1.4.1", 494 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 495 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 496 | "requires": { 497 | "assert-plus": "1.0.0", 498 | "extsprintf": "1.3.0", 499 | "json-schema": "0.2.3", 500 | "verror": "1.10.0" 501 | } 502 | }, 503 | "media-typer": { 504 | "version": "0.3.0", 505 | "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 506 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 507 | }, 508 | "merge-descriptors": { 509 | "version": "1.0.1", 510 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 511 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 512 | }, 513 | "methods": { 514 | "version": "1.1.2", 515 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 516 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 517 | }, 518 | "mime": { 519 | "version": "1.4.1", 520 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 521 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 522 | }, 523 | "mime-db": { 524 | "version": "1.37.0", 525 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", 526 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" 527 | }, 528 | "mime-types": { 529 | "version": "2.1.21", 530 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 531 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 532 | "requires": { 533 | "mime-db": "~1.37.0" 534 | } 535 | }, 536 | "ms": { 537 | "version": "2.0.0", 538 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 539 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 540 | }, 541 | "negotiator": { 542 | "version": "0.6.1", 543 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 544 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 545 | }, 546 | "node-fetch": { 547 | "version": "1.7.3", 548 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", 549 | "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", 550 | "requires": { 551 | "encoding": "^0.1.11", 552 | "is-stream": "^1.0.1" 553 | } 554 | }, 555 | "oauth-sign": { 556 | "version": "0.9.0", 557 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 558 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 559 | }, 560 | "on-finished": { 561 | "version": "2.3.0", 562 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 563 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 564 | "requires": { 565 | "ee-first": "1.1.1" 566 | } 567 | }, 568 | "on-headers": { 569 | "version": "1.0.1", 570 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", 571 | "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" 572 | }, 573 | "parseurl": { 574 | "version": "1.3.2", 575 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 576 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 577 | }, 578 | "path-to-regexp": { 579 | "version": "0.1.7", 580 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 581 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 582 | }, 583 | "performance-now": { 584 | "version": "2.1.0", 585 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 586 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 587 | }, 588 | "proxy-addr": { 589 | "version": "2.0.4", 590 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 591 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 592 | "requires": { 593 | "forwarded": "~0.1.2", 594 | "ipaddr.js": "1.8.0" 595 | } 596 | }, 597 | "psl": { 598 | "version": "1.1.29", 599 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", 600 | "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" 601 | }, 602 | "punycode": { 603 | "version": "1.4.1", 604 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 605 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 606 | }, 607 | "qs": { 608 | "version": "6.5.2", 609 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 610 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 611 | }, 612 | "range-parser": { 613 | "version": "1.2.0", 614 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 615 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 616 | }, 617 | "raw-body": { 618 | "version": "2.3.3", 619 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 620 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 621 | "requires": { 622 | "bytes": "3.0.0", 623 | "http-errors": "1.6.3", 624 | "iconv-lite": "0.4.23", 625 | "unpipe": "1.0.0" 626 | }, 627 | "dependencies": { 628 | "iconv-lite": { 629 | "version": "0.4.23", 630 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 631 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 632 | "requires": { 633 | "safer-buffer": ">= 2.1.2 < 3" 634 | } 635 | } 636 | } 637 | }, 638 | "request": { 639 | "version": "2.88.0", 640 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 641 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 642 | "requires": { 643 | "aws-sign2": "~0.7.0", 644 | "aws4": "^1.8.0", 645 | "caseless": "~0.12.0", 646 | "combined-stream": "~1.0.6", 647 | "extend": "~3.0.2", 648 | "forever-agent": "~0.6.1", 649 | "form-data": "~2.3.2", 650 | "har-validator": "~5.1.0", 651 | "http-signature": "~1.2.0", 652 | "is-typedarray": "~1.0.0", 653 | "isstream": "~0.1.2", 654 | "json-stringify-safe": "~5.0.1", 655 | "mime-types": "~2.1.19", 656 | "oauth-sign": "~0.9.0", 657 | "performance-now": "^2.1.0", 658 | "qs": "~6.5.2", 659 | "safe-buffer": "^5.1.2", 660 | "tough-cookie": "~2.4.3", 661 | "tunnel-agent": "^0.6.0", 662 | "uuid": "^3.3.2" 663 | } 664 | }, 665 | "safe-buffer": { 666 | "version": "5.1.2", 667 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 668 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 669 | }, 670 | "safer-buffer": { 671 | "version": "2.1.2", 672 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 673 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 674 | }, 675 | "send": { 676 | "version": "0.16.2", 677 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 678 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 679 | "requires": { 680 | "debug": "2.6.9", 681 | "depd": "~1.1.2", 682 | "destroy": "~1.0.4", 683 | "encodeurl": "~1.0.2", 684 | "escape-html": "~1.0.3", 685 | "etag": "~1.8.1", 686 | "fresh": "0.5.2", 687 | "http-errors": "~1.6.2", 688 | "mime": "1.4.1", 689 | "ms": "2.0.0", 690 | "on-finished": "~2.3.0", 691 | "range-parser": "~1.2.0", 692 | "statuses": "~1.4.0" 693 | }, 694 | "dependencies": { 695 | "debug": { 696 | "version": "2.6.9", 697 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 698 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 699 | "requires": { 700 | "ms": "2.0.0" 701 | } 702 | }, 703 | "statuses": { 704 | "version": "1.4.0", 705 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 706 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 707 | } 708 | } 709 | }, 710 | "serve-static": { 711 | "version": "1.13.2", 712 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 713 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 714 | "requires": { 715 | "encodeurl": "~1.0.2", 716 | "escape-html": "~1.0.3", 717 | "parseurl": "~1.3.2", 718 | "send": "0.16.2" 719 | } 720 | }, 721 | "setprototypeof": { 722 | "version": "1.1.0", 723 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 724 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 725 | }, 726 | "sshpk": { 727 | "version": "1.15.1", 728 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz", 729 | "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==", 730 | "requires": { 731 | "asn1": "~0.2.3", 732 | "assert-plus": "^1.0.0", 733 | "bcrypt-pbkdf": "^1.0.0", 734 | "dashdash": "^1.12.0", 735 | "ecc-jsbn": "~0.1.1", 736 | "getpass": "^0.1.1", 737 | "jsbn": "~0.1.0", 738 | "safer-buffer": "^2.0.2", 739 | "tweetnacl": "~0.14.0" 740 | } 741 | }, 742 | "statuses": { 743 | "version": "1.5.0", 744 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 745 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 746 | }, 747 | "tough-cookie": { 748 | "version": "2.4.3", 749 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 750 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 751 | "requires": { 752 | "psl": "^1.1.24", 753 | "punycode": "^1.4.1" 754 | } 755 | }, 756 | "tunnel-agent": { 757 | "version": "0.6.0", 758 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 759 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 760 | "requires": { 761 | "safe-buffer": "^5.0.1" 762 | } 763 | }, 764 | "tweetnacl": { 765 | "version": "0.14.5", 766 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 767 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 768 | }, 769 | "type-is": { 770 | "version": "1.6.16", 771 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 772 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 773 | "requires": { 774 | "media-typer": "0.3.0", 775 | "mime-types": "~2.1.18" 776 | } 777 | }, 778 | "unpipe": { 779 | "version": "1.0.0", 780 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 781 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 782 | }, 783 | "utils-merge": { 784 | "version": "1.0.1", 785 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 786 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 787 | }, 788 | "uuid": { 789 | "version": "3.3.2", 790 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 791 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 792 | }, 793 | "vary": { 794 | "version": "1.1.2", 795 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 796 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 797 | }, 798 | "verror": { 799 | "version": "1.10.0", 800 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 801 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 802 | "requires": { 803 | "assert-plus": "^1.0.0", 804 | "core-util-is": "1.0.2", 805 | "extsprintf": "^1.2.0" 806 | } 807 | } 808 | } 809 | } 810 | -------------------------------------------------------------------------------- /messenger-bot/server.js: -------------------------------------------------------------------------------- 1 | var request = require("request"); 2 | var http = require("http"); 3 | var express = require("express"); 4 | var bodyParser = require("body-parser"); 5 | var compression = require("compression"); 6 | var fetch = require("node-fetch"); 7 | 8 | var conf = require("./conf"); 9 | 10 | var app = express(); 11 | app.use(compression()); 12 | app.set("case sensitive routing", true); 13 | app.use(bodyParser.json()); 14 | 15 | var httpServer = http.createServer(app); 16 | 17 | app.get("/", function(req, res, next) { 18 | res.send("Welcome to the Brandie Messenger Bot. This is root endpoint!"); 19 | }); 20 | 21 | app.get("/webhook/", handleVerify); 22 | 23 | 24 | function handleVerify(req, res, next) { 25 | var token = process.env.VERIFY_TOKEN || conf.VERIFY_TOKEN; 26 | if (req.query["hub.verify_token"] === token) { 27 | return res.send(req.query["hub.challenge"]); 28 | } 29 | res.send("Validation failed, Verify token mismatch"); 30 | } 31 | 32 | function firstEntity(nlp, name) { 33 | return nlp && nlp.entities && nlp.entities[name] && nlp.entities[name][0]; 34 | } 35 | 36 | function handleMessage(sender_psid, received_message) { 37 | let response; 38 | if (received_message.quick_reply) { 39 | handlePostback(sender_psid, received_message.quick_reply); 40 | } 41 | else if(received_message.nlp) 42 | { 43 | console.log(received_message.nlp.entities); 44 | const nlpGreeting = firstEntity(received_message.nlp, 'greetings'); 45 | const nlpBye = firstEntity(received_message.nlp,'bye'); 46 | const nlpThx = firstEntity(received_message.nlp,'thanks'); 47 | if(nlpGreeting && nlpGreeting.confidence > 0.85) 48 | { 49 | response = { 50 | text: 51 | "Hey there! I'll walk you through the various parts that go into establishing your professional presence online.", 52 | quick_replies: [ 53 | { 54 | content_type: "text", 55 | title: "Okay, let's go!", 56 | payload: "understood_Yes" 57 | }, 58 | { 59 | content_type: "text", 60 | title: "Um? What?", 61 | payload: "understood_No" 62 | } 63 | ] 64 | }; 65 | } 66 | else if(nlpBye && nlpBye.confidence > 0.85) 67 | { 68 | response = { 69 | text: "Bye bye! 👋 I'll be available 24x7 if you need me." 70 | }; 71 | } 72 | else if(nlpThx && nlpThx.confidence > 0.85) 73 | { 74 | response = { 75 | text: "You're welcome 😁! Feel free to explore more by playing around." 76 | }; 77 | } 78 | else { 79 | response = { 80 | text: 81 | "I'm so sorry, I didn't understand your last input. How can I help?", 82 | quick_replies: [ 83 | { 84 | content_type: "text", 85 | title: "Start Over", 86 | payload: "" 87 | }, 88 | { 89 | content_type: "text", 90 | title: "Personal Websites", 91 | payload: "understood_Yes" 92 | }, 93 | { 94 | content_type: "text", 95 | title: "Writing Blogs", 96 | payload: "blog_question" 97 | }, 98 | { 99 | content_type: "text", 100 | title: "LinkedIn Tips", 101 | payload: "linkedin_no" 102 | }, 103 | { 104 | content_type: "text", 105 | title: "Twitter Hacks", 106 | payload: "twitter_question" 107 | } 108 | ] 109 | }; 110 | } 111 | } 112 | else if (received_message.attachments) { 113 | response = { 114 | text: 115 | "I'm so sorry, I didn't understand your last input. How can I help?", 116 | quick_replies: [ 117 | { 118 | content_type: "text", 119 | title: "Personal Websites", 120 | payload: "" 121 | }, 122 | { 123 | content_type: "text", 124 | title: "Start Over", 125 | payload: "understood_Yes" 126 | }, 127 | { 128 | content_type: "text", 129 | title: "Writing Blogs", 130 | payload: "blog_question" 131 | }, 132 | { 133 | content_type: "text", 134 | title: "LinkedIn Tips", 135 | payload: "linkedin_no" 136 | }, 137 | { 138 | content_type: "text", 139 | title: "Twitter Hacks", 140 | payload: "twitter_question" 141 | } 142 | ] 143 | }; 144 | } 145 | callSendAPI(sender_psid, response); 146 | } 147 | 148 | // Handles messaging_postbacks events 149 | function handlePostback(sender_psid, received_postback) { 150 | let response; 151 | let response1; 152 | let response2; 153 | // Get the payload for the postback 154 | let payload = received_postback.payload; 155 | 156 | console.log("Postback received was: " + payload); 157 | 158 | // Set the response based on the postback payload 159 | if (payload == "") { 160 | response = { 161 | text: 162 | "Hey there! I'll walk you through the various parts that go into establishing your professional presence online.", 163 | quick_replies: [ 164 | { 165 | content_type: "text", 166 | title: "Okay, let's go!", 167 | payload: "understood_Yes" 168 | }, 169 | { 170 | content_type: "text", 171 | title: "Um? What?", 172 | payload: "understood_No" 173 | } 174 | ] 175 | }; 176 | callSendAPI(sender_psid, response); 177 | } else if (payload == "understood_Yes") { 178 | response = { 179 | attachment: { 180 | type: "template", 181 | payload: { 182 | template_type: "button", 183 | text: 184 | "Do you currently have a personal website?", 185 | buttons: [ 186 | { 187 | type: "postback", 188 | title: "Yes, duh!", 189 | payload: "website_yes" 190 | }, 191 | { 192 | type: "postback", 193 | title: "Working on it..", 194 | payload: "website_wip" 195 | }, 196 | { 197 | type: "postback", 198 | title: "Nope, not yet", 199 | payload: "website_no" 200 | } 201 | ] 202 | } 203 | } 204 | }; 205 | response1 = { 206 | text: "Having a personal website makes it simple for others to find you online. Even the most basic of websites, having just contact information go a long way in improving discovery." 207 | }; 208 | callSendAPI(sender_psid, response1).then(() => { 209 | return callSendAPI(sender_psid,response); 210 | }); 211 | } else if (payload == "understood_No") { 212 | response = { 213 | attachment: { 214 | type: "template", 215 | payload: { 216 | template_type: "generic", 217 | elements: [ 218 | { 219 | title: 220 | "Alrighty then, are you ready?", 221 | buttons: [ 222 | { 223 | type: "postback", 224 | title: "Okay, help me!", 225 | payload: "understood_Yes" 226 | } 227 | ] 228 | } 229 | ] 230 | } 231 | } 232 | }; 233 | response1 = { 234 | text: "No worries, let me try to explain what I do. I'm Brandie and I'll help you cross some basic requirements off your to-do list while preparing to get into the professional workforce." 235 | }; 236 | response2 = { 237 | text: "Even though we use the Internet everyday, we often underestimate how many opportunities it can lead us to - just by making ourselves accessible and discoverable to professionals & recruiters through the right channels." 238 | }; 239 | callSendAPI(sender_psid, response1).then(() => { 240 | return callSendAPI(sender_psid,response2).then(() => { 241 | return callSendAPI(sender_psid,response); 242 | }); 243 | }); 244 | } else if (payload == "website_yes") { 245 | response = { 246 | attachment: { 247 | type: "template", 248 | payload: { 249 | template_type: "button", 250 | text: 251 | "Great! Let's analyse your website to see if you can do anything better.", 252 | buttons: [ 253 | { 254 | type: "web_url", 255 | url: "https://developers.google.com/speed/pagespeed/insights/", 256 | title: "Analyse Website" 257 | } 258 | ] 259 | } 260 | } 261 | }; 262 | response1 = { 263 | attachment: { 264 | type: "template", 265 | payload: { 266 | template_type: "button", 267 | text: "I hope that helped in finding some areas of improvement, want a complete list of must-have website sections?", 268 | buttons: [ 269 | { 270 | type: "postback", 271 | payload: "website_wip", 272 | title: "Sure!" 273 | }, 274 | { 275 | type: "postback", 276 | payload: "blog_question", 277 | title: "What's next?" 278 | } 279 | ] 280 | } 281 | } 282 | }; 283 | callSendAPI(sender_psid, response).then(() => { 284 | return callSendAPI(sender_psid,response1); 285 | }); 286 | } else if (payload == "website_wip") { 287 | //console.log("Website WIP Payload!"); 288 | response = { 289 | attachment: { 290 | type: "template", 291 | payload: { 292 | template_type: "list", 293 | top_element_style: "large", 294 | elements: [ 295 | { 296 | title: 297 | "The Ultimate Guide To Building A Personal Website", 298 | subtitle: "Follow along this comprehensive guide.", 299 | image_url: "https://collegeinfogeek.com/wp-content/uploads/2017/01/build-personal-website-2017.jpg", 300 | buttons: [ 301 | { 302 | type: "web_url", 303 | title: "Read", 304 | url: "https://collegeinfogeek.com/personal-website/" 305 | } 306 | ] 307 | }, 308 | { 309 | title: 310 | "12 Tips on How to Build A Personal Website that Will Land Your Dream Job", 311 | subtitle: "Some helpful tips that make sure your website contains the right information!", 312 | image_url: "https://images.onmogul.com/uploads/story/thumbnail/44399/312868c15c.jpg?ixlib=rails-0.3.2&ch=Width%2CDPR&fit=crop&h=465&w=820&s=7b5fa2b2b4a97473415489b8b86b36a0", 313 | buttons: [ 314 | { 315 | type: "web_url", 316 | title: "Read", 317 | url: "https://onmogul.com/stories/12-tips-on-how-to-build-a-personal-website-that-will-land-your-dream-job" 318 | } 319 | ] 320 | }, 321 | { 322 | title: 323 | "6 Do's and Don'ts For Your Personal Website", 324 | subtitle: "Don't make these rookie mistakes!", 325 | image_url: "https://pilbox.themuse.com/image.jpg?url=https%3A%2F%2Fassets.themuse.com%2Fuploaded%2Fattachments%2F14784.jpg%3Fv%3DNone&h=367", 326 | buttons: [ 327 | { 328 | type: "web_url", 329 | title: "Read", 330 | url: "https://www.themuse.com/advice/6-things-you-should-put-on-your-personal-websiteand-6-things-to-avoid-at-all-costs" 331 | } 332 | ] 333 | } 334 | ] 335 | } 336 | } 337 | }; 338 | response1 = { 339 | attachment: { 340 | type: "template", 341 | payload: { 342 | template_type: "button", 343 | text: "All great things take time. Hope you keep these tips in mind before publishing your website!", 344 | buttons: [ 345 | { 346 | type: "postback", 347 | payload: "blog_question", 348 | title: "Okay, next!" 349 | } 350 | ] 351 | } 352 | } 353 | }; 354 | callSendAPI(sender_psid, response).then(() => { 355 | return callSendAPI(sender_psid,response1); 356 | }); 357 | } 358 | else if(payload== 'website_no') 359 | { 360 | response = { 361 | attachment: { 362 | type: "template", 363 | payload: { 364 | template_type: "button", 365 | text: 366 | "Do you have any experience building websites? Know HTML/CSS/Javascript?", 367 | buttons: [ 368 | { 369 | type: "postback", 370 | payload: "html_pro", 371 | title: "Ofcourse, I'm a pro." 372 | }, 373 | { 374 | type: "postback", 375 | payload: "html_noob", 376 | title: "No, I don't." 377 | } 378 | ] 379 | } 380 | } 381 | }; 382 | callSendAPI(sender_psid, response); 383 | } 384 | else if(payload== 'html_pro') 385 | { 386 | response = { 387 | attachment: { 388 | type: "template", 389 | payload: { 390 | template_type: "generic", 391 | elements: [ 392 | { 393 | title: 394 | "Step 1: Static Website Templates!", 395 | subtitle: "Choose from these beautiful templates as a starting point.", 396 | image_url: "https://html5up.net/uploads/images/ethereal.jpg", 397 | buttons: [ 398 | { 399 | type: "web_url", 400 | title: "Choose one!", 401 | url: "https://html5up.net/" 402 | } 403 | ] 404 | }, 405 | { 406 | title: 407 | "Step 2: Github Pages", 408 | subtitle: "Easiest hosting setup ever.", 409 | image_url: "https://pages.github.com/images/slideshow/jekyllrb.png", 410 | buttons: [ 411 | { 412 | type: "web_url", 413 | title: "Free hosting!", 414 | url: "https://pages.github.com" 415 | } 416 | ] 417 | }, 418 | { 419 | title: 420 | "Step 3: Free .me domain!", 421 | subtitle: "Redeem your student education pack and get free goodies! You just need a photo of your ID card.", 422 | image_url: "https://hackhands.com/assets/img/education/github-bag.png", 423 | buttons: [ 424 | { 425 | type: "web_url", 426 | title: "Get the pack!", 427 | url: "https://education.github.com/pack" 428 | } 429 | ] 430 | } 431 | ] 432 | } 433 | } 434 | }; 435 | response1 = { 436 | attachment: { 437 | type: "template", 438 | payload: { 439 | template_type: "button", 440 | text: "These three steps will definitely help you getting all set towards having a great website! ^.^ But I know you can be lazy at times, wanna check some quicker alternatives?", 441 | buttons: [ 442 | { 443 | type: "postback", 444 | payload: "html_noob", 445 | title: "Hmm, why not?" 446 | }, 447 | { 448 | type: "postback", 449 | payload: "blog_question", 450 | title: "No, I ain't lazy." 451 | } 452 | ] 453 | } 454 | } 455 | }; 456 | callSendAPI(sender_psid, response).then(() => { 457 | return callSendAPI(sender_psid,response1); 458 | }); 459 | } 460 | else if(payload== 'html_noob') 461 | { 462 | response = { 463 | attachment: { 464 | type: "template", 465 | payload: { 466 | template_type: "generic", 467 | elements: [ 468 | { 469 | title: 470 | "Option 1: Carrd.co", 471 | subtitle: "2 minute setup. Responsive & customizable.", 472 | image_url: "https://carrd.co/assets/images/landing/site-2.jpg", 473 | buttons: [ 474 | { 475 | type: "web_url", 476 | title: "Start now!", 477 | url: "https://carrd.co" 478 | } 479 | ] 480 | }, 481 | { 482 | title: 483 | "Option 2: About.me", 484 | subtitle: "Present yourself with one click.", 485 | image_url: "https://cdn.about.me/s3/h/z/5275676c.png", 486 | buttons: [ 487 | { 488 | type: "web_url", 489 | title: "Automatic generator!", 490 | url: "https://about.me" 491 | } 492 | ] 493 | }, 494 | { 495 | title: 496 | "Option 3: Strikingly", 497 | subtitle: "One-page website builder!", 498 | image_url: "https://static-assets.strikinglycdn.com/images/landing2/twitter-card.jpg", 499 | buttons: [ 500 | { 501 | type: "web_url", 502 | title: "Highly Customizable!", 503 | url: "https://www.strikingly.com" 504 | } 505 | ] 506 | } 507 | ] 508 | } 509 | } 510 | }; 511 | response1 = { 512 | attachment: { 513 | type: "template", 514 | payload: { 515 | template_type: "button", 516 | text: "Alrighty! We look all good to go. Your personal website is now a reality! Woohoo.", 517 | buttons: [ 518 | { 519 | type: "postback", 520 | payload: "blog_question", 521 | title: "What's next!?" 522 | } 523 | ] 524 | } 525 | } 526 | }; 527 | callSendAPI(sender_psid, response).then(() => { 528 | return callSendAPI(sender_psid,response1); 529 | }); 530 | } 531 | else if(payload== 'blog_question') 532 | { 533 | response = { 534 | attachment: { 535 | type: "template", 536 | payload: { 537 | template_type: "button", 538 | text: 539 | "A well-formed blog is like a resume that’s constantly updating itself. Do you currently have a personal blog?", 540 | buttons: [ 541 | { 542 | type: "postback", 543 | payload: "blog_yes", 544 | title: "Yeah, ofcourse!" 545 | }, 546 | { 547 | type: "postback", 548 | payload: "blog_no", 549 | title: "Nope." 550 | } 551 | ] 552 | } 553 | } 554 | }; 555 | callSendAPI(sender_psid, response); 556 | } 557 | else if(payload== 'blog_no') 558 | { 559 | response = { 560 | attachment: { 561 | type: "template", 562 | payload: { 563 | template_type: "list", 564 | top_element_style: "large", 565 | elements: [ 566 | { 567 | title: 568 | "Why You Should Start a Blog", 569 | subtitle: "Even if you're not a writer.", 570 | image_url: "https://goinswriter.com/wp-content/uploads/start-blog-630x394.jpg", 571 | buttons: [ 572 | { 573 | type: "web_url", 574 | title: "Read", 575 | url: "https://goinswriter.com/why-blog/" 576 | } 577 | ] 578 | }, 579 | { 580 | title: 581 | "Should I Start a Blog?", 582 | subtitle: "A must read on a blog's benefits.", 583 | image_url: "https://howtostartablogonline.net/wp-content/uploads/2015/01/why-blog.jpg", 584 | buttons: [ 585 | { 586 | type: "web_url", 587 | title: "Read", 588 | url: "https://howtostartablogonline.net/why-blog/" 589 | } 590 | ] 591 | }, 592 | { 593 | title: 594 | "Starting a blog in College!", 595 | subtitle: "A well-formed blog is like a resume that’s constantly updating itself.", 596 | image_url: "https://collegeinfogeek.com/wp-content/uploads/2013/03/learning_pyramid-600x445.jpg", 597 | buttons: [ 598 | { 599 | type: "web_url", 600 | title: "Read", 601 | url: "https://collegeinfogeek.com/reasons-to-start-a-blog/" 602 | } 603 | ] 604 | } 605 | ] 606 | } 607 | } 608 | }; 609 | response1 = { 610 | text: "Do consider starting a blog, it's a great way to build up a network with like-minded individuals and get some discovery! You can talk about your opinions, reviews, or even technical guides! Here are some of the best blogging websites right now!" 611 | } 612 | response2 = { 613 | attachment: { 614 | type: "template", 615 | payload: { 616 | template_type: "generic", 617 | elements: [ 618 | { 619 | title: 620 | "Medium.com", 621 | subtitle: "Great community built in!", 622 | image_url: "https://contentinsights.com/blog/wp-content/uploads/2017/01/Whats-next-for-Medium.jpg", 623 | buttons: [ 624 | { 625 | type: "web_url", 626 | title: "Get Started", 627 | url: "https://medium.com" 628 | }, 629 | { 630 | type: "postback", 631 | title: "Next Step", 632 | payload: "linkedin_question" 633 | } 634 | ] 635 | }, 636 | { 637 | title: 638 | "WordPress", 639 | subtitle: "Highly customizable!", 640 | image_url: "https://s.w.org/about/images/logos/wordpress-logo-stacked-rgb.png", 641 | buttons: [ 642 | { 643 | type: "web_url", 644 | title: "Start blogging!", 645 | url: "https://wordpress.com" 646 | }, 647 | { 648 | type: "postback", 649 | title: "Next Step", 650 | payload: "linkedin_question" 651 | } 652 | ] 653 | }, 654 | { 655 | title: 656 | "Tumblr", 657 | subtitle: "Something for everyone.", 658 | image_url: "https://scontent.fbom3-1.fna.fbcdn.net/v/t1.0-9/15823283_10155052309808738_4205003756954116403_n.jpg?oh=240db0f42b8c4f031d4288004f5c305e&oe=5AC7F9DC", 659 | buttons: [ 660 | { 661 | type: "web_url", 662 | title: "Sign up!", 663 | url: "https://tumblr.com" 664 | }, 665 | { 666 | type: "postback", 667 | title: "Next Step", 668 | payload: "linkedin_question" 669 | } 670 | ] 671 | } 672 | ] 673 | } 674 | } 675 | }; 676 | callSendAPI(sender_psid, response).then(() => { 677 | return callSendAPI(sender_psid,response1).then(() => { 678 | return callSendAPI(sender_psid,response2); 679 | }); 680 | }); 681 | } 682 | else if(payload== 'blog_yes') 683 | { 684 | response = { 685 | text: "That's awesome news. Remember to keep your blog updated with regards to fields that interest you. This could include writing tutorials, sharing experiences or just opinions on certain topics!" 686 | }; 687 | response1 = { 688 | attachment: { 689 | type: "template", 690 | payload: { 691 | template_type: "button", 692 | text: 693 | "Keep going? You can come back later - I'll always be here!", 694 | buttons: [ 695 | { 696 | type: "postback", 697 | payload: "linkedin_question", 698 | title: "Give me more!" 699 | } 700 | ] 701 | } 702 | } 703 | }; 704 | callSendAPI(sender_psid, response).then(() => { 705 | return callSendAPI(sender_psid,response1); 706 | }); 707 | } 708 | else if(payload== 'linkedin_question') 709 | { 710 | response = { 711 | attachment: { 712 | type: "template", 713 | payload: { 714 | template_type: "button", 715 | text: 716 | "Do you have a well-updated LinkedIn profile?", 717 | buttons: [ 718 | { 719 | type: "postback", 720 | payload: "linkedin_yes", 721 | title: "Yes, ofcourse!" 722 | }, 723 | { 724 | type: "postback", 725 | payload: "linkedin_no", 726 | title: "Not really" 727 | } 728 | ] 729 | } 730 | } 731 | }; 732 | callSendAPI(sender_psid, response); 733 | } 734 | else if(payload== 'linkedin_yes') 735 | { 736 | response = { 737 | text: "That's great news. Always make sure you have an updated profile + lots of connections/endorsements! They go a long way in improving recruiters coming across you. (Trust me, it makes a difference!)" 738 | }; 739 | response1 = { 740 | text: 741 | "Do you still want to take a look at some of the tips I have for LinkedIn?", 742 | quick_replies: [ 743 | { 744 | content_type: "text", 745 | title: "Sure!", 746 | payload: "linkedin_no" 747 | }, 748 | { 749 | content_type: "text", 750 | title: "No, what's next?", 751 | payload: "twitter_question" 752 | } 753 | ] 754 | }; 755 | callSendAPI(sender_psid, response).then(() => { 756 | return callSendAPI(sender_psid,response1); 757 | }); 758 | } 759 | else if(payload== 'linkedin_no') 760 | { 761 | response = { 762 | attachment: { 763 | type: "template", 764 | payload: { 765 | template_type: "list", 766 | top_element_style: "large", 767 | elements: [ 768 | { 769 | title: 770 | "The Complete Guide to LinkedIn", 771 | subtitle: "All you need to know.", 772 | image_url: "https://www.yesware.com/wp-content/uploads/linkedin-profile-background-photo-examples.png", 773 | buttons: [ 774 | { 775 | type: "web_url", 776 | title: "Read", 777 | url: "https://www.yesware.com/blog/linkedin-profile/" 778 | } 779 | ] 780 | }, 781 | { 782 | title: 783 | "9 Simple Tips to Supercharge Your LinkedIn", 784 | subtitle: "Follow along!", 785 | image_url: "https://fthmb.tqn.com/dX9Tyt1JsJBigQXumo5a2W37x4Y=/768x0/filters:no_upscale()/man-using-a-digital-tablet-547544123-58a0c55b3df78c475801fe6d.jpg", 786 | buttons: [ 787 | { 788 | type: "web_url", 789 | title: "Read", 790 | url: "https://www.thebalance.com/tips-to-make-a-better-linkedin-profile-2062332" 791 | } 792 | ] 793 | }, 794 | { 795 | title: 796 | "7 Tweaks for LinkedIn", 797 | subtitle: "The small things that make a huge difference!", 798 | image_url: "http://cdn.skim.gs/images/c_fill,dpr_1.0,f_auto,fl_lossy,h_391,q_auto,w_695/x5idkpsyxcue5pixcvtx/linkedin-profile-tweaks", 799 | buttons: [ 800 | { 801 | type: "web_url", 802 | title: "Read", 803 | url: "http://www.sheknows.com/living/articles/1136609/linkedin-profile-tweaks" 804 | } 805 | ] 806 | }, 807 | { 808 | title: 809 | "5-step guide for a Bomb LinkedIn Profile", 810 | subtitle: "Make recruiters love you!", 811 | image_url: "http://www.thedailystar.net/sites/default/files/styles/big_6/public/feature/images/step.jpg?itok=WGWUcoQz&c=9de2bc54fad6159d0f27af8c7592da92", 812 | buttons: [ 813 | { 814 | type: "web_url", 815 | title: "Read", 816 | url: "http://www.thedailystar.net/next-step/5-step-guide-bomb-linkedin-profile-1495600" 817 | } 818 | ] 819 | } 820 | ] 821 | } 822 | } 823 | }; 824 | response1 = { 825 | attachment: { 826 | type: "template", 827 | payload: { 828 | template_type: "button", 829 | text: 830 | "Great! Make sure your LinkedIn profile has all of this and come back to me!", 831 | buttons: [ 832 | { 833 | type: "postback", 834 | payload: "twitter_question", 835 | title: "Done! What's next?" 836 | } 837 | ] 838 | } 839 | } 840 | }; 841 | callSendAPI(sender_psid, response).then(() => { 842 | return callSendAPI(sender_psid,response1); 843 | }); 844 | } 845 | else if(payload== 'twitter_question') 846 | { 847 | response = { 848 | attachment: { 849 | type: "template", 850 | payload: { 851 | template_type: "button", 852 | text: 853 | "Do you use Twitter frequently for interacting with professionals?", 854 | buttons: [ 855 | { 856 | type: "postback", 857 | payload: "twitter_yes", 858 | title: "Yes, ofcourse!" 859 | }, 860 | { 861 | type: "postback", 862 | payload: "twitter_no", 863 | title: "Not really" 864 | } 865 | ] 866 | } 867 | } 868 | }; 869 | callSendAPI(sender_psid, response); 870 | } 871 | else if(payload== 'twitter_no') 872 | { 873 | response = { 874 | text: "Twitter is great for following your favourite celebrities & memes, but it is an even better tool to build your network. Following relevant people in the your niche, interacting with them when possible, and staying active in that community can open up new doors for you. Here are some hacks to supercharge your Twitter network!" 875 | }; 876 | response2 = { 877 | text: "Even if you're not comfortable interacting with them right away, even by just following them - you get an insight of how their work ethic and opinions. All you need to do is just follow them! :D" 878 | } 879 | response1 = { 880 | attachment: { 881 | type: "template", 882 | payload: { 883 | template_type: "generic", 884 | elements: [ 885 | { 886 | title: 887 | "Growing your personal brand on Twitter", 888 | subtitle: "Tips from the experts.", 889 | image_url: "https://marketingland.com/wp-content/ml-loads/2014/07/twitter-bird-1920-800x450.jpg", 890 | buttons: [ 891 | { 892 | type: "web_url", 893 | title: "Read", 894 | url: "https://marketingland.com/how-to-grow-your-personal-brand-on-twitter-in-only-10-minutes-a-day-121514" 895 | }, 896 | { 897 | type: "postback", 898 | title: "Next Step", 899 | payload: "fin" 900 | } 901 | ] 902 | }, 903 | { 904 | title: 905 | "Strong personal branding on Twitter", 906 | subtitle: "6 steps to ensure it!", 907 | image_url: "https://d28dwf34zswvrl.cloudfront.net/wp-content/uploads/2017/02/5-brand-identity.png", 908 | buttons: [ 909 | { 910 | type: "web_url", 911 | title: "Read", 912 | url: "https://yourstory.com/2017/02/strong-brand-identity-twitter/" 913 | }, 914 | { 915 | type: "postback", 916 | title: "Next Step", 917 | payload: "fin" 918 | } 919 | ] 920 | }, 921 | { 922 | title: 923 | "Twitter Lists", 924 | subtitle: "Find the community for your niche.", 925 | image_url: "https://assets.pcmag.com/media/images/430060-get-organized-twitter-list.jpg?thumb=y&width=810&height=456", 926 | buttons: [ 927 | { 928 | type: "web_url", 929 | title: "Search!", 930 | url: "https://www.scoutzen.com/twitter-lists/search" 931 | }, 932 | { 933 | type: "postback", 934 | title: "Next Step", 935 | payload: "fin" 936 | } 937 | ] 938 | }, 939 | { 940 | title: 941 | "Bio Search", 942 | subtitle: "Find relevant people based on their bios", 943 | image_url: "https://startacus.net/uploads/image/Twitter-birds.jpg", 944 | buttons: [ 945 | { 946 | type: "web_url", 947 | title: "Start blogging!", 948 | url: "https://moz.com/followerwonk/bio" 949 | }, 950 | { 951 | type: "postback", 952 | title: "Next Step", 953 | payload: "fin" 954 | } 955 | ] 956 | } 957 | ] 958 | } 959 | } 960 | }; 961 | callSendAPI(sender_psid, response).then(() => { 962 | return callSendAPI(sender_psid,response2).then(() => { 963 | return callSendAPI(sender_psid, response1); 964 | }); 965 | }); 966 | } 967 | else if(payload== 'twitter_yes') 968 | { 969 | response = { 970 | text: "That's great news! Make sure you interact with relevant people in your industry and stay active inside the community. It goes a long way in building connections with like-minded industry professionals." 971 | }; 972 | response1 = { 973 | attachment: { 974 | type: "template", 975 | payload: { 976 | template_type: "button", 977 | text: 978 | "Now that your Twitter is all set, let's move on.", 979 | buttons: [ 980 | { 981 | type: "postback", 982 | payload: "fin", 983 | title: "Yeah, what's next?" 984 | } 985 | ] 986 | } 987 | } 988 | }; 989 | callSendAPI(sender_psid, response).then(() => { 990 | return callSendAPI(sender_psid,response1); 991 | }); 992 | } 993 | else if(payload== 'fin') 994 | { 995 | response = { 996 | text: "That's all I have for now. Thanks for using Brandie! 👋 I'll be available 24x7 if you need me! Like the page for more finely tuned branding tips and tricks!" 997 | } 998 | response1 = { 999 | attachment: { 1000 | type: "template", 1001 | payload: { 1002 | template_type: "generic", 1003 | elements: [ 1004 | { 1005 | title: "I just used Brandie to supercharge my personal brand!", 1006 | subtitle: "You should try it too! It makes a tailored plan for every user.", 1007 | image_url: "http://www.tushargupta.me/assets/img/Brandie_Share.png", 1008 | buttons: [ 1009 | { 1010 | type: "element_share", 1011 | share_contents: { 1012 | attachment: { 1013 | type: "template", 1014 | payload: { 1015 | template_type: "generic", 1016 | elements: [ 1017 | { 1018 | title: "I just used Brandie to supercharge my personal brand!", 1019 | subtitle: "You should try it too! It makes a tailored plan for every user.", 1020 | image_url: "http://www.tushargupta.me/assets/img/Brandie_Share.png", 1021 | default_action: { 1022 | type: "web_url", 1023 | url: "https://m.me/heybrandie" 1024 | }, 1025 | buttons: [ 1026 | { 1027 | type: "web_url", 1028 | url: "https://m.me/heybrandie", 1029 | title: "Get Started" 1030 | } 1031 | ] 1032 | } 1033 | ] 1034 | } 1035 | } 1036 | } 1037 | } 1038 | ] 1039 | } 1040 | ] 1041 | } 1042 | } 1043 | }; 1044 | callSendAPI(sender_psid, response).then(() => { 1045 | return callSendAPI(sender_psid,response1); 1046 | }); 1047 | } 1048 | } 1049 | // Sends response messages via the Send API 1050 | 1051 | function callSendAPI(sender_psid, response) { 1052 | let body = { 1053 | messaging_type: "response", 1054 | recipient: { 1055 | id: sender_psid 1056 | }, 1057 | message: response 1058 | }; 1059 | const qs = conf.PROFILE_TOKEN; 1060 | return fetch('https://graph.facebook.com/me/messages?access_token=' + qs, { 1061 | method: 'POST', 1062 | headers: { 1063 | 'Content-Type': 'application/json', 1064 | }, 1065 | body: JSON.stringify(body), 1066 | }).then(rsp => rsp.json()).then(json => { 1067 | console.log(json); 1068 | }); 1069 | } 1070 | 1071 | app.post("/webhook", (req, res) => { 1072 | // Parse the request body from the POST 1073 | let body = req.body; 1074 | // Check the webhook event is from a Page subscription 1075 | if (body.object === "page") { 1076 | // Iterate over each entry - there may be multiple if batched 1077 | body.entry.forEach(function(entry) { 1078 | // Gets the body of the webhook event 1079 | let webhook_event = entry.messaging[0]; 1080 | console.log(webhook_event); 1081 | 1082 | // Get the sender PSID 1083 | let sender_psid = webhook_event.sender.id; 1084 | //console.log("Sender PSID: " + sender_psid); 1085 | 1086 | //console.log('QuickReply Payload: ' + webhook_event.message.quick_reply); 1087 | 1088 | // Check if the event is a message or postback and 1089 | // pass the event to the appropriate handler function 1090 | if (webhook_event.message) { 1091 | handleMessage(sender_psid, webhook_event.message); 1092 | } else if (webhook_event.postback) { 1093 | handlePostback(sender_psid, webhook_event.postback); 1094 | } 1095 | }); 1096 | // Return a '200 OK' response to all events 1097 | res.status(200).send("EVENT_RECEIVED"); 1098 | } else { 1099 | // Return a '404 Not Found' if event is not from a page subscription 1100 | res.sendStatus(404); 1101 | } 1102 | }); 1103 | 1104 | var port = process.env.PORT || 5000; 1105 | httpServer.listen(port, function() { 1106 | console.log("Express http server listening on port " + port); 1107 | }); 1108 | -------------------------------------------------------------------------------- /docs/old_stage/img/chatbotsmag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | Launchaco 6 | Created with Sketch. 7 | 8 | 9 | 484 | 485 | 486 | 487 | --------------------------------------------------------------------------------