Scope
A growing non-profit needed to retire offline donation tracking and give non-technical admins control over the website's content — without losing transparency or auditability.
Approach
Next.js 15+ App Router with `(admin)` and `(public)` route groups; Mongoose for data, `jose` for edge-friendly JWTs.
Razorpay donation flow: order creation → checkout → backend verification of signature → DB write → emailed receipt with unique number. Frontend never decides whether a donation succeeded.
Dynamic CMS for hero, board members, about, campaigns, and reports — Cloudinary stores the PDFs and images; admins edit everything through a guarded dashboard.
Outcome
Live at studentopedia.in. The org now runs donations, campaign updates, volunteer intake, and report uploads themselves — full transparency, zero engineering bottleneck.