Inspiration
Walk into ICM Food & Clothing Bank and you'll see staff juggling paper intake forms, sticky notes, and spreadsheets — all while trying to actually help people. A volunteer spends 20 minutes re-typing a handwritten form. A case manager stays late writing up session notes. A director loses three days every quarter building a funder report in Excel.
We dug into the Opportunity Hack SRD and realized this isn't just ICM's problem. The same story repeated across 9 nonprofits over 7 years of hackathons — food banks, therapy centers, animal rescues, youth programs. Every single one needed the same thing: a way to track who they serve, what they do for them, and prove it to funders. Enterprise tools exist but cost $50–150 per user per month. So nonprofits stay on spreadsheets.
We thought: what if we just fixed this?
What it does
CareBase lets nonprofit staff register clients, log services, schedule appointments, and search through case history — all in one place, for under $30/month.
But the part we're most proud of is the AI layer:
- Photo-to-Intake — Snap a photo of a paper intake form and watch every field populate automatically
- Voice-to-Structured Notes — Speak session notes out loud and get back a professional case note with action items and risk flags already extracted
- Semantic Search — Type "which clients did we refer to housing last month?" and actually get an answer, even if the notes never used those exact words
- AI Handoff Summaries — One click generates a full client brief so no one falls through the cracks during shift changes or case transfers
None of it saves without a human reviewing it first. That was non-negotiable.
How we built it
Stack: Next.js 14 (App Router) · TypeScript · Supabase (PostgreSQL + Auth + RLS + pgvector) · shadcn/ui + Tailwind CSS · Vercel
AI: Anthropic Claude for vision and language tasks (photo extraction, note structuring, handoff summaries). Google Gemini for semantic search embeddings (768-dim vectors stored in pgvector).
All AI calls go through server-side API routes — no keys ever exposed to the client. Role-based access (Admin / Staff) enforced at the database level via Supabase RLS, not client-side checks.
The hardest part wasn't the code — it was the prompt engineering. Getting Claude to consistently return structured JSON with the right fields, in the right format, for case notes that could look completely different every time took more iteration than any other feature.
Challenges we ran into
Gemini embeddings are 768 dimensions. Supabase's pgvector defaults expect 1536. That mismatch took longer to debug than we'd like to admit.
We also spent real time on the audit log. Logging every action without ever logging PII sounds simple until you realize how many places client data sneaks into a record. We had to be very deliberate about what "safe to log" actually means.
Accomplishments that we're proud of
The Photo-to-Intake feature genuinely works. You take a blurry phone photo of a handwritten form and it populates a full registration form in under 5 seconds. Watching that work for the first time felt like something shifted.
We also kept the cost honest. A real nonprofit with 50 active clients can run CareBase — including all four AI features — for under $50/month total. That's not a teaser price. That's the actual cost. That's the whole point.
What we learned
AI features that don't map to a real pain point are just noise. Every feature we built started with a specific, documented time sink from the SRD — not with "wouldn't it be cool if." That constraint made every decision easier and every demo more compelling.
What's next for team-26-a-train
- Auto-generated funder reports — where nonprofits lose the most time and where there's real willingness to pay
- Multi-tenant support — let any nonprofit deploy their own instance without forking the repo
- Multilingual voice input — so field workers can dictate notes in any language, not just English
The code is open source and MIT licensed.
Built With
- anthropic-claude-api
- google-gemini
- next.js-14
- pgvector
- postgresql
- react
- resend
- shadcn/ui
- supabase
- tailwind-css
- typescript
- vercel
- webspeechapi
Log in or sign up for Devpost to join the conversation.