OpenClaims Ops is a Catapult Hacks 2026 project for running reimbursement, stipend, and grant claim programs with proof-of-personhood at the front door. Claimants verify with World ID, upload supporting documents, pass through Gemini-powered extraction and rule checks, and then move into auto-approval, auto-rejection, or a human review queue.
- Public claim flow with World ID verification, document upload, claim submission, and status lookup.
- Organizer portal with program creation, dashboard analytics, flagged-claim review, and approved-claim CSV export.
- Processing pipeline with receipt extraction, duplicate document hashing, rules evaluation, audit logging, and notification hooks.
- Demo dataset generator for a convincing hackathon walkthrough.
- Next.js 16 App Router
- React 19
- Supabase Auth, Postgres, and Storage
- World ID / IDKit
- Gemini for receipt and proof document extraction
- Resend for outbound claim notifications
- Tailwind CSS and Recharts
src/app- public pages, organizer pages, and API routessrc/components- claim flow, organizer UI, and shared UI piecessrc/lib- Supabase helpers, dashboard queries, World ID helpers, notifications, and rules logicsupabase- SQL seed output and migrationsscripts- local seed and deployment-readiness checksdocs- concept, architecture, phase plans, and implementation checkpoint
- Install dependencies with
npm install. - Copy
.env.local.exampleto.env.local. - Fill in the required environment variables.
- Start the app with
npm run dev. - Generate demo SQL with
npm run seed:demo.
Required for the full product flow:
NEXT_PUBLIC_APP_URLNEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_URLSUPABASE_SERVICE_ROLE_KEYNEXT_PUBLIC_WORLD_APP_IDNEXT_PUBLIC_WORLD_ENVWORLD_RP_IDWORLD_RP_SIGNING_KEY
Optional but recommended:
NEXT_PUBLIC_WORLD_ID_BYPASSandWORLD_ID_BYPASSfor local-only World ID bypass during testingGEMINI_API_KEYfor Gemini-based receipt extractionGEMINI_BASE_URLto override the Gemini-compatible endpointGEMINI_MODELto choose the Gemini extraction model; defaults togemini-3-flash-previewRESEND_API_KEYandRESEND_FROM_EMAILfor live email deliveryDEMO_SEED_ENABLEDif you want to gate demo-only flows
Apply the migration in [supabase/migrations/002_claim_contact_email.sql](/Users/shilp/Drive1/Catapult Hacks/OpenClaims-main/supabase/migrations/002_claim_contact_email.sql) before relying on claimant email delivery.
npm run dev- local development servernpm run lint- lint the appnpm run build- production build validationnpm run seed:demo- regeneratesupabase/seed.sqlnpm run check:deploy- verify required files and environment variables for deployment
The app is designed for Vercel plus Supabase.
- Import the project into Vercel.
- Copy the required environment variables into the Vercel project.
- Apply the Supabase migration for
claim_contact_email. - Verify the deployed
/api/rp-signatureand/api/verify-proofroutes. - Test the public claim flow, duplicate-human protection, duplicate-document flow, review queue, and CSV export in the deployed environment.
For local testing only, you can enable a public-claim bypass by setting both NEXT_PUBLIC_WORLD_ID_BYPASS=true and WORLD_ID_BYPASS=true. The bypass is disabled in production builds.
- Product concept: [docs/00-concept.md](/Users/shilp/Drive1/Catapult Hacks/OpenClaims-main/docs/00-concept.md)
- Architecture: [docs/01-technical-architecture.md](/Users/shilp/Drive1/Catapult Hacks/OpenClaims-main/docs/01-technical-architecture.md)
- UI/UX spec: [docs/02-ui-ux-spec.md](/Users/shilp/Drive1/Catapult Hacks/OpenClaims-main/docs/02-ui-ux-spec.md)
- Phase docs: [docs/06-phase-1-foundation.md](/Users/shilp/Drive1/Catapult Hacks/OpenClaims-main/docs/06-phase-1-foundation.md) through [docs/12-phase-7-submission.md](/Users/shilp/Drive1/Catapult Hacks/OpenClaims-main/docs/12-phase-7-submission.md)
- Live checkpoint: [docs/13-progress-check.md](/Users/shilp/Drive1/Catapult Hacks/OpenClaims-main/docs/13-progress-check.md)
Local validation currently uses:
npm run seed:demonpm run lintnpm run build
Deployment readiness can be checked with npm run check:deploy.