├── client ├── static │ ├── .gitkeep │ ├── favicon.ico │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── mstile-150x150.png │ ├── apple-touch-icon.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── browserconfig.xml │ ├── manifest.json │ └── safari-pinned-tab.svg ├── src │ ├── store │ │ ├── modules │ │ │ ├── .gitkeep │ │ │ └── profile.js │ │ ├── module-types.js │ │ └── index.js │ ├── filters │ │ └── index.js │ ├── components │ │ ├── misc │ │ │ ├── Agreement.vue │ │ │ ├── AutosizeTextarea.vue │ │ │ └── ideaConstants.js │ │ ├── Callback.vue │ │ ├── shared │ │ │ ├── MainFooter.vue │ │ │ ├── MainNavbar.vue │ │ │ ├── ModalDialog.vue │ │ │ ├── IdeaTags.vue │ │ │ ├── IdeaLinks.vue │ │ │ └── IdeaType.vue │ │ ├── users │ │ │ └── UserProfile.vue │ │ ├── ideas │ │ │ ├── Dashboard.vue │ │ │ └── CreateIdea.vue │ │ └── Home.vue │ ├── api │ │ └── index.js │ ├── auth │ │ ├── utils.js │ │ └── index.js │ ├── main.js │ ├── utils │ │ └── localstorage.js │ ├── assets │ │ ├── eye-sym.svg │ │ ├── shield_w.svg │ │ ├── rocket_w.svg │ │ ├── shield.svg │ │ ├── github.svg │ │ ├── feedback_w.svg │ │ ├── rocket.svg │ │ ├── idea-nebulae-logo.svg │ │ └── feedback.svg │ ├── router │ │ └── index.js │ └── App.vue ├── test │ ├── unit │ │ ├── specs │ │ │ ├── ideas │ │ │ │ └── CreateIdea.spec.js │ │ │ ├── shared │ │ │ │ ├── MainFooter.spec.js │ │ │ │ └── MainNavbar.spec.js │ │ │ ├── Home.spec.js │ │ │ └── users │ │ │ │ └── UserProfile.spec.js │ │ ├── .eslintrc │ │ ├── index.js │ │ └── karma.conf.js │ └── e2e │ │ ├── specs │ │ └── test.js │ │ ├── custom-assertions │ │ └── elementCount.js │ │ ├── nightwatch.conf.js │ │ └── runner.js ├── .eslintignore ├── config │ ├── prod.env.js │ ├── test.env.js │ ├── dev.env.js │ └── index.js ├── .postcssrc.js ├── styles │ └── var.styl ├── build │ ├── dev-client.js │ ├── vue-loader.conf.js │ ├── webpack.test.conf.js │ ├── build.js │ ├── webpack.dev.conf.js │ ├── check-versions.js │ ├── utils.js │ ├── webpack.base.conf.js │ ├── dev-server.js │ └── webpack.prod.conf.js ├── .babelrc ├── index.html ├── .eslintrc.js ├── .gitignore └── package.json ├── Procfile ├── server ├── .babelrc ├── documentation │ └── IdeaNebulae Runtime Architecture.jpg ├── utils │ ├── decodeToken.js │ └── authCheck.js ├── .sequelizerc ├── router │ ├── index.js │ ├── reviews.js │ └── profiles.js ├── server.js ├── db │ ├── methods │ │ ├── documentMethods.js │ │ ├── reviewMethods.js │ │ └── agreementMethods.js │ ├── misc │ │ └── ideaConstants.js │ ├── models │ │ ├── document.js │ │ ├── agreement.js │ │ ├── profile.js │ │ ├── index.js │ │ ├── review.js │ │ ├── idea.js │ │ └── postgres_views.sql │ ├── migrations │ │ ├── 20171219011522-create-profile.js │ │ ├── 2017122012080-create-document.js │ │ ├── 20171219140454-create-agreement.js │ │ ├── 20171219142211-create-review.js │ │ └── 20171219012348-create-idea.js │ ├── config.js │ └── seeders │ │ ├── profile_seed.js │ │ ├── agreement_seed.js │ │ ├── document_seed.js │ │ ├── review_seed.js │ │ └── idea_seed.js ├── services │ └── config.js ├── .gitignore └── package.json ├── issue_template.md ├── readme.rdoc ├── readme.rst ├── .editorconfig ├── server.js └── LICENSE /client/static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node server.js -------------------------------------------------------------------------------- /client/src/store/modules/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/test/unit/specs/ideas/CreateIdea.spec.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /server/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "es2015" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /client/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /client/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/client/static/favicon.ico -------------------------------------------------------------------------------- /client/static/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/client/static/favicon-16x16.png -------------------------------------------------------------------------------- /client/static/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/client/static/favicon-32x32.png -------------------------------------------------------------------------------- /client/static/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/client/static/mstile-150x150.png -------------------------------------------------------------------------------- /client/static/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/client/static/apple-touch-icon.png -------------------------------------------------------------------------------- /client/src/store/module-types.js: -------------------------------------------------------------------------------- 1 | export const SET_PROFILE_DATA = 'SET_PROFILE_DATA'; 2 | export const BEST_THING_EVER = 'EMPANADAS'; 3 | -------------------------------------------------------------------------------- /client/static/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/client/static/android-chrome-192x192.png -------------------------------------------------------------------------------- /client/static/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/client/static/android-chrome-512x512.png -------------------------------------------------------------------------------- /issue_template.md: -------------------------------------------------------------------------------- 1 | **_Issue Description & Expected Outcome:_** 2 | 3 | **_Symptoms:_** 4 | 5 | **_Steps to Recreate:_** 6 | 7 | **_Resolution:_** 8 | -------------------------------------------------------------------------------- /client/test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /server/documentation/IdeaNebulae Runtime Architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chingu-voyage3/ideanebulae/HEAD/server/documentation/IdeaNebulae Runtime Architecture.jpg -------------------------------------------------------------------------------- /client/config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /readme.rdoc: -------------------------------------------------------------------------------- 1 | {Waffle.io - Columns and their card count}[https://waffle.io/chingu-voyage3/ideanebulae] -------------------------------------------------------------------------------- /readme.rst: -------------------------------------------------------------------------------- 1 | .. image:: https://badge.waffle.io/chingu-voyage3/ideanebulae.svg?columns=all 2 | :target: https://waffle.io/chingu-voyage3/ideanebulae 3 | :alt: 'Waffle.io - Columns and their card count' -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /client/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"', 6 | API_HOST: '"http://localhost:7000/api"', 7 | }); 8 | -------------------------------------------------------------------------------- /client/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /client/src/filters/index.js: -------------------------------------------------------------------------------- 1 | const truncate = (text, value) => { 2 | if (text.length < value - 3) { 3 | return text; 4 | } 5 | return `${text.substring(0, value - 3)}...`; 6 | }; 7 | 8 | export default { 9 | truncate, 10 | }; 11 | -------------------------------------------------------------------------------- /client/src/components/misc/Agreement.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /client/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuex from 'vuex'; 3 | 4 | import profile from './modules/profile'; 5 | 6 | Vue.use(Vuex); 7 | 8 | const store = new Vuex.Store({ 9 | modules: { 10 | profile, 11 | }, 12 | }); 13 | 14 | export default store; 15 | -------------------------------------------------------------------------------- /server/utils/decodeToken.js: -------------------------------------------------------------------------------- 1 | const jwtDecode = require('jwt-decode'); 2 | 3 | // Receives a token and returns the object 4 | // representation of the token, also known as 5 | // decoding the token 6 | const decodeToken = (token) => jwtDecode(token); 7 | 8 | module.exports = decodeToken; 9 | -------------------------------------------------------------------------------- /server/.sequelizerc: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | 'config': path.resolve('db', 'config.js'), 5 | 'migrations-path': path.resolve('db', 'migrations'), 6 | 'models-path': path.resolve('db', 'models'), 7 | 'seeders-path': path.resolve('db', 'seeders'), 8 | }; 9 | -------------------------------------------------------------------------------- /client/styles/var.styl: -------------------------------------------------------------------------------- 1 | $dkblue = #3023AE 2 | $purple = #7c48c2 3 | $pink = #C86DD7 4 | $gray_text = #545454 5 | $gray_bkgrd = lighten($gray_text, 80%) 6 | $medblue = #4b83dc 7 | $aqua = #00cbf7 8 | $ltblue = lighten($aqua, 40%) 9 | $sky = #3877ce 10 | $ltred = #ee4f5c 11 | $dkred = #9a041a 12 | -------------------------------------------------------------------------------- /client/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /client/static/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #2d89ef 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /client/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["istanbul"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /client/src/api/index.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import { getAccessToken } from '@/auth'; 3 | 4 | // Create http object to send the access token 5 | // along with every single request 6 | // eslint-disable-next-line new-cap 7 | const http = new axios.create({ 8 | baseURL: process.env.API_HOST, 9 | timeout: 5000, 10 | headers: { 11 | Authorization: `Bearer ${getAccessToken()}`, 12 | }, 13 | }); 14 | 15 | export default http; 16 | -------------------------------------------------------------------------------- /server/utils/authCheck.js: -------------------------------------------------------------------------------- 1 | const jwt = require('express-jwt'); 2 | const jwks = require('jwks-rsa'); 3 | 4 | const authCheck = jwt({ 5 | secret: jwks.expressJwtSecret({ 6 | cache: true, 7 | rateLimit: true, 8 | jwksRequestsPerMinute: 5, 9 | jwksUri: 'https://.well-known/jwks.json', 10 | }), 11 | audience: 'API-AUDIENCE-ATTR', 12 | issuer: 'https://auth0-domain.auth0.com/', 13 | algorithms: ['RS256'], 14 | }); 15 | 16 | module.exports = authCheck; 17 | -------------------------------------------------------------------------------- /client/src/components/misc/AutosizeTextarea.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 135 | 136 | 256 | -------------------------------------------------------------------------------- /client/src/components/shared/IdeaTags.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 72 | 73 | 320 | -------------------------------------------------------------------------------- /client/src/components/shared/IdeaLinks.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 78 | 79 | 331 | -------------------------------------------------------------------------------- /client/src/components/ideas/Dashboard.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 74 | 75 | 329 | -------------------------------------------------------------------------------- /client/src/components/Home.vue: -------------------------------------------------------------------------------- 1 | 87 | 88 | 107 | 108 | 345 | -------------------------------------------------------------------------------- /client/src/components/shared/IdeaType.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 73 | 74 | 426 | -------------------------------------------------------------------------------- /client/src/components/ideas/CreateIdea.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 129 | 130 | 490 | --------------------------------------------------------------------------------