Requirements (based on User's stories) and Functions to be implemented:
App must has a user board and admin board.
App must be designed a easy UI for users to post their confession, with image upload available.
App must be designed to help Confessions Facebook fan page managers easily manage the contents, automatic schedule and posting to Facebook.
App must has a communication system for administrators to feedback about the user's confessions and postback their request.
App must have web push notification system to notice to users that their confessions was approved.
App must has list & history of all confession, has a clear visual or analyst board of total sent confession and which posted on Facebook.
App must has a page to fetch all university related articles (crawl) for user to quick view, and also be able to comment on those articles.
App must be able to run in both Desktop and Mobile web.
App must be implement a anti-spam system.
Entity Diagram
Use Case Diagram
Scalable Architecture: Separated Service
Project Architect is based on scaling services principles.
Everything in system is a Docker image (Dockerized), and be able to run on a Kubernetes Cluster (Google Kubernetes Engine with Load Balancer) as containers with specific environment variables.
How it scale: Google Kubernetes Engine (GKE) Cluster managed, the system will auto scale up or scale down the containers (nodes) to match up with the traffic, due to our configurations.
Backend implements several services to handle all actions. High performance and slim with Golang.
Frontend implements with Single Page Application, based Universal Web App approach. Implement a Javascript SDK separated to wrap Service Caller, easy hand-on and maintainance.
Database implemented with MySQL Server (RDBMS) and Google Firebase Database (NoSQL).
Infrastructure:
CI/CD integrated with Jenkins: automatic build & deploy after every commit pushed, 100% up time.
Deployed on a Amazon EC2 VM with Docker eco-system and Nginx.
Can be deployed on a Container Cluster system (with Kubernetes) if need scaling.
Server uptime monitor and notice via Slack when down.
Technical Stack:
Backend: Golang (for the high performance)
Pure Go codebase
gorilla-mux for Routing and Dispatcher
memcached implement for server-side caching
google/recaptcha to implement anti-spam system
Frontend: React (for single page application)
React 16 with react-router, redux
Pure Node.js Express for Server-side rendering
webpack and babel for bundle and code chunking
Use firebase-sdk to implement Cloud Message Push Notification
Use firebase-sdk to implement Firebase Storage for Storing Images
Javascript SDK for APIs implement:
Pure TypeScript
axios for API caller
webpack for chunking and bundle
Infrastructure: Docker
Cloudflare for DNS (resolve server IP) and CDN (caching)
Docker eco-system, every repos have a Dockerfile for container deployment
Nginx for reverse proxy, resolve services from docker containers