# Project: pollinator ## Overview ### Purpose The purpose of pollinator is two-fold: * To build an open and safe alternative of many popular SaaS offerings in the poll, survey, questionaiire space of web applications. * To build a complete web application as a team, backend, frontend and automated CI/CD with an end date of production live by end of day. ### Prerequisites What you will need: * A personal computer (_ideally_) to hack on. * An account on [git.mills.io](https://git.mills.io) ## Requirements ### Stories * As "creator" I want to be able to create a new open poll with a title and optional description and a type of either "Open Questions" or "Open Vote". * As a "creator" once a new "open poll" is created I should be redirected to the newly created poll of the given title, description and type with a shareable cryptographically secure link that is hard to guess but easy to share. * As a "participant" opening a link to a "poll" that was shared with me, I should see the title, optional description and depending on the type be presented with: * If the type is "Open Questions"; a list of the questions already posted by other "participants" as well as a way to vote for those questions. In addition there should be a way to post a new question or edit existing ones for corrections. * If the type "Open Vote" the open singular question or statement is displayed with a way to either vote for or against. * As either a "creator" or "particpant" an open poll can be exported and display in a meaningful way. ### Design For the purposes of this exercise, since this is a learning exercise and an opportunity to have fun and deliver a production ready piece of software to the wild the terms `MAY`, `MUST`, `MUST NOT`are used to guide the project: * The backend `MUST` be written in Go as an exercise in learning Go. * The backend `MAY` use any libraries available in the Go standard library or 3rd-parties. * The backend `MUST NOT` use any frameworks (_as these have steeper's learning curves and often incur unnecessary cost_) * The frontend `MUST` be written in MithrilJS as an exercise in learning MithrilJS (_for the rest of us) * The frontend `MAY` use any artwork, css and layout. * The frontend `MUST NOT` use any frameworks for the same reasons as the backend. * The resulting final compiled binary `MUST` be self-contained and portable including all backend and frontend functionality and all assets. > **Note**: The infrastructure will already have been setup on effectively a PasS (_Platform as a Service_) with a TLS-enabeld sub-domain ready to go with a CI/CD pipeline that will deploy changes live as they are pushed to Git. ### Tech Stack Backend: * Go Frontend: * MithrilJS Infrastructure: * Docker Swarm for Service and Container orchestration * Treafikv2 Ingress for load balancing and TLS termination * Gitea for Git code hosting * Drone for CI/CD * Registryv2 for Docker image hosting * Proxmox VE as the underlying Virtual Infrastructure