Inspiration
NY’s SNAP application (LDSS-4826) is about 8 pages and roughly 80 questions about every person, job, bill and account.
Most of those answers are already printed on documents people have: pay stubs, IDs, leases. It takes hours, mistakes cause delays, and many eligible families (including CUNY students) never finish.
876,645 low-income New Yorkers (more than one in five eligible individuals) who qualify for the Supplemental Nutrition Assistance Program (SNAP) are not enrolled.
What it does
Upload documents. Gemini reads 25 document types and pulls out names, dates, income and rent. Answer only what’s missing. With all documents, one person sees about 23 short pages instead of the full form.
Eligibility screening with NY’s FY2027 income limits. Anything missing gets an Answer or Upload button that takes you straight to the fix.
Download the official LDSS-4826, filled in and ready to sign, plus a checklist PDF for applying online.
Privacy by Design
- No database and no accounts. Files are processed in memory, and answers live only in the browser tab.
- Logs contain only anonymous events, never names, numbers or amounts.
- The eligibility check is sent without SSNs, phone numbers or addresses.
- A consent screen comes first and explains that Gemini reads the document
How we built it
React + Vite frontend, FastAPI backend, Gemini with structured output (Pydantic schema, temperature 0)
Every fact is stored as {value, source}, so a document never overwrites something the user typed, and typed income asks for proof
Fills the real state PDF field by field (298 fields renamed and mapped) 92 backend tests, 133 unit tests, 12 Playwright end-to-end scenarios
$$ \text{monthly} = 4.3 \times \text{weekly pay} \quad \text{or} \quad 2.15 \times \text{biweekly pay} $$
Then the estimate uses the SNAP formula, which is the max benefit for your household size minus 30% of your net income:
$$ \text{benefit} = \max\left(0,\ \text{max for household size} - 0.3 \times \text{net income}\right) $$
- pypdf fills the official PDF form and reportlab makes the cover sheet.
Before coding, we planned every file: what it does, what it takes in, and what it sends out. We also agreed on the API format between frontend and backend so we could both work at the same time without waiting on each other.
Challenges we ran into
- We had to change our data structure halfway through. At first we stored info for just one person. Then we looked at the real SNAP form and saw it has rows for every person in the household and every income. Our setup could only fill the first row, so we had to redo how we store the data.
- Keeping frontend and backend matching. When the data structure changed, the requests and responses between frontend and backend had to change too. We learned we have to agree on changes before pushing, not after.
- Mapping our applicant data onto the official LDSS-4826’s 298 PDF fields (splitting addresses, the household table, yes/no questions)
- Privacy. Free AI tiers can use the data you send, so we decided to never send Social Security numbers to the AI, and we only tested with fake documents.
- Git. Branch conflicts, merges stuck in Vim, and a lot of late-night fixing.
What we learned
- Planning the architecture first saved us a lot of time, especially with only two people.
- Changing your data structure later is painful, so it's better to base it on the real form from the start.
- A lot about how SNAP actually works, especially the student rules and how income is counted.
Limitations
- A screening, not a decision. Results are estimates; the local social services office decides. BridgePath doesn't estimate benefit amounts.
- SNAP only for now. The LDSS-2921 Common Application (cash assistance, Medicaid, child care) is the next form; the extraction schema already covers it.
- Some eligible immigrants are screened out. Refugees, asylees and other qualified non-citizens can get SNAP, but the screening doesn't recognize those statuses yet.
- People aren't merged across documents. If two documents name the same person, the roster shows them twice and the applicant removes one.
- Desktop web layout. Not yet optimized for phones.
- BridgePath is not affiliated with New York State or any government agency.
What's next
- Choose which applications to fill. Let the applicants pick the programs they want (SNAP, Cash assistance, Medicaid, child care) and fill the right form for each.
- Accounts: sign in and come back to an application This means storing sensitive data so encryption comes first.
- The app in other languages Many SNAP applicants in New York are more comfortable in Spanish, Chinese, Russian, Haitian Creole, Bengali, Korean or another language.
- Work with CUNY campus offices so students can actually find and use it.
Log in or sign up for Devpost to join the conversation.