I am asked to project a web solution to allow vote casting in public assemblies.
The solution shall be written with
Socket.io is used essentially when you need something in realtime. The tradition RESTful APIs are a better/proven method.
To get started I would suggest reading up on the MEAN stack (also allows you to use the MongoDB database), A couple of tutorials should be a good starting point : https://scotch.io/tutorials/setting-up-a-mean-stack-single-page-application https://thinkster.io/mean-stack-tutorial
https://www.npmjs.com/package/slush-meanjs is a good resource to scaffold out your project. Slush is a generator that uses GULP as compared to yeoman generators which are only just beginning to implement gulp as its task-runner (currently uses grunt as the default task runner). Yeoman still doesnt have a great generator for the MEAN stack. If however you plan to exclude the database a good starting point would be to just use express on the backend and angularjs as the front end. To do this you can scaffold out a express project using generator-express (https://github.com/petecoop/generator-express) and once express is setup you can add angular to it using https://github.com/yeoman/generator-angular.
The directory would look something like this :
-app ---*client side libs* -bin --- www /* npm start to start the server */ -routes/ /* for all your express routing */ -test/ ... -app.js ...
For authentication you could use the scaffolded out CRUD model. If using socket.io for all the client server communication this is a good resource - https://auth0.com/blog/2014/01/15/auth-with-socket-io/