Saksham Jain
Back to work
/ 04Case study2023

Uddeshhya

Website for a student-led NGO — volunteer registration, blood donation portal with certificate generation, project pages, and donation drives, built end to end.

NGONon-ProfitVolunteer ManagementCertificatesFull-Stack
Visit uddeshhya.in
Uddeshhya NGO homepage hero with donate and volunteer calls-to-action alongside community impact photos.
Role
Full-stack Developer
Focus
Volunteer & donor portal
Year
2023
Status
Live

Overview

Uddeshhya is a student-led NGO founded at KIET, running education, welfare, and blood-donation initiatives across village schools and the surrounding community. The site is the NGO's public face and its operational backbone: volunteer registration, a blood donor/donation portal, automated certificates, and project, gallery, and blog pages the team keeps updated themselves.

My role

I built the site end to end as a full-stack developer — volunteer and donor registration, the certificate-generation pipeline, and the project/gallery/blog pages the NGO's own team publishes to, without needing a developer for every content change.

The complexity

Problem — In a blood-donation emergency, someone needs to find a matching donor by blood group and city fast — every filtered lookup hitting MongoDB directly adds latency exactly when it matters most, and listing every donor's phone number in the open isn't something a volunteer directory should do either.

Approach — The blood-group + city donor query is cached in Redis and invalidated on new registrations, so lookups stay fast without re-scanning the donor collection on every search — with contact details released through a request step rather than published on the page.

Problem — Every volunteer and blood donation earns a certificate with that person's name and date on it — generating those by hand doesn't scale past a handful of people, and a donation drive can produce 50+ certificate requests in a single afternoon.

Approach — Templated PDF generation triggered on registration/donation confirmation, so certificates are produced and downloadable automatically instead of assembled manually per person, one at a time, after every drive.

Problem — The NGO's own team, not developers, needs to publish new projects, gallery photos, and blog posts — and shouldn't need a code deploy to do it.

Approach — Modeled projects, gallery, and blog content as data the frontend renders, so the team edits content directly instead of routing every update through me. Deliberately skipped a message queue and heavier caching here — a volunteer-run site with no concurrent-checkout problem doesn't need it, and the boring version is the one the NGO's team can reason about without me.

Architecture

Volunteer / donor registration
Registration form
Volunteer or donor
Registration API
Donor directory
Redis-cached, group + city
Certificate service
Templated PDF
Email delivery
Content publishing
NGO team
Non-technical
Content entry
Projects / gallery / blog
Content API
Public pages
No code deploy needed

What shipped

  • Volunteer registration and blood donor portal, filterable by blood group and city.
  • Automated certificate generation for volunteers and donors.
  • Project, gallery, and blog pages backed by editable content — no code deploy needed.
  • Donation-drive flows: birthday-for-a-cause, raise-an-issue, and community collaborations.

What I owned

API & data model
Volunteer/donor registration, the blood-group + city donor directory, and the certificate-generation pipeline.
Content model
Projects, gallery, and blog modeled as editable data so the NGO's team publishes without a deploy.
Infrastructure
Redis cache in front of the donor-group lookup — the one query worth caching on a site this size.
Frontend
Public site — registration flows, donor directory, and every content page rendering from that data.

Engineering properties

  • Donor directory reads cached in Redis, sub-100ms lookup
  • Donor contact gated behind a request step
  • Templated PDF certificates, generated automatically
  • Content as data — no deploy for a team update

Stack

Next.jsNode.jsExpressMongoDBRedisPDF Generation