A volunteer-run organisation needs a site its members can update without a developer, and that stays cheap to host — but also a members-only area that genuinely gates content rather than hiding it in the client bundle.
What I did about it
Split into a Vite/React frontend and an Express + Mongoose API, so the members' area is enforced server-side and the public site stays a fast static-ish bundle.
Firebase handles the real-time pieces so a volunteer committee is not maintaining a socket layer.
Deployed to a Hostinger VPS rather than a managed platform, keeping the running cost inside a non-profit's budget.
What I rejected, and why
This is the one repository here that arrived as a single squashed commit, so it carries no incremental history — a real gap in the record, and worth stating plainly rather than letting a commit count imply more than it should.
The repository arrived as a single squashed commit, so there is no incremental history to review or bisect. Whatever the reason at the time, losing the history of a live site is a cost that only shows up the first time something breaks.