HEROKU APP - https://neckers-voteapp.herokuapp.com
This app was built in MERN stack. It uses: MongoDB, Node, Express, React, React Router, Redux, Socket.IO, Material-UI and Google Charts. The UI can be used on mobile, tablet and desktop.
Note:
- Server and client components are isomorphic.
- Authentication doesn't use cookie but a mix in client ( in localStorage/Redux store ) and server, by Socket.IO, check.
- Already voted polls are saved in localStorage
- As an authenticated user, I can keep my polls and come back later to access them.
- As an authenticated user, I can share my polls with my friends.
- As an authenticated user, I can see the aggregate results of my polls.
- As an authenticated user, I can delete polls that I decide I don't want anymore.
- As an authenticated user, I can create a poll with any number of possible items.
- As an unauthenticated or authenticated user, I can see and vote on everyone's polls.
- As an unauthenticated or authenticated user, I can see the results of polls in chart form. (This could be implemented using Chart.js or Google Charts.)
- As an authenticated user, if I don't like the options on a poll, I can create a new option.
Ok, they aren't really features, but there are some actions not really good but ,for this challenge, I don't mind.
- I can vote multiple times if I clear my local storage or I do an access from another device ( or I go in incognito mode, etc.. ).
- Yeah, because to get track of the votes I have to save some informations in server side and, with users without login, I've to do a really hard work to check them. So.. the DB is in a sandbox powered by mlab and I don't want to stress it more.
- I can't edit or remove options after the poll publish.
- No, you can't. These actions weren't in the user stories.
- I can't have multiple logins.
- Yep, everytime you do a login you get a different
session_id
in both side: client and server.
- Yep, everytime you do a login you get a different
- I can't edit my personal data, like e-mail, nick or password
- No, you can't. These actions weren't in the user stories.
- I can't change my preferences
- Yes, I don't like this feature in special way but I've decided to not implement an UNDO action for some security reasons.
- MONGOURI: your query to authenticate in mongodb server
mongodb://<dbuser>:<dbpassword>@ds119508.mlab.com:19508/neckersbox
- NODE_ENV: for example
production
. Note: this must be the same between server and client.
To compile or run this app use gulp and/or npm.
- Build:
gulp build
- Watch:
gulp watch
ornpm run watch
- Clean:
gulp clean
- Start Server:
gulp start
ornpm run start-server
Note: normallystart-server
hide console messages, to show them you should execnpm run start-server-debug
To properly works this application need a MongoDB database with two collections:
- vote_users To save signed users
- vote_polls To save users polls