Inspiration Zakat is often given out in cash without any coordination — the same person can collect from multiple masjids for the same claimed need, and masjids have no way of knowing. We wanted a simple tool that helps masjids coordinate without ever touching the money itself.

What it does ZakatFinder is a multi-masjid coordination platform. An applicant verifies their identity once with any participating masjid, then can request zakat from any masjid on the platform. When a masjid reviews a request, they see the applicant's cross-masjid approval history — so duplicate claims get caught. The platform never handles money; distribution still happens the way it always has.

How we built it Next.js 16 with the App Router and React 19 for the frontend, TypeScript everywhere, Tailwind v4 for styling, and Shadcn/ui components. Prisma 7 on a PostgreSQL database hosted on Supabase. Clerk for phone + email authentication. AWS S3 with presigned URLs for document uploads so files never proxy through our server. Role-based routing for applicants, masjid staff, and platform admins.

Challenges we ran into Post-sign-in redirects hung for 10+ seconds because Clerk's currentUser() occasionally returned null right after auth before the session had propagated — we fixed it by using the cookie-based auth() and switching the page to a route handler. S3 uploads silently failed with a PermanentRedirect because the client cached the wrong AWS region across HMR reloads. Getting the multi-masjid data model right — one verification, many masjids, but requests still scoped to a single target masjid — took a couple of iterations.

Accomplishments that we're proud of A full end-to-end flow that actually works: sign up → verify with a masjid → submit a request → masjid reviews with fraud-detection context → approve/deny/request more info → applicant responds. In-app notifications, document upload + viewing for both applicants and staff, an admin panel, and a staff dashboard — all with an audit log tracking every decision.

What we learned Auth timing is a real thing — JWT claims are instant, API roundtrips are not. S3 region errors are almost always a cached client with a bad default. And small coordination problems (like whether verification is per-masjid or platform-wide) have big downstream consequences on the data model.

What's next for ZakatFinder Email and SMS notifications alongside the in-app ones, a masjid-facing public page so applicants can see who's participating, and reporting tools for masjids to see their aggregate distribution over a year.

Built With

Share this project:

Updates