Inspiration

In fact, over $60 billion in government benefits is left unclaimed annually within the United States, not because people aren't eligible but because it is virtually impossible to work through the system. 50+ government programs with different qualifications based on income levels compared to the Federal Poverty Level, such as SNAP requiring a household income to be at 130% of FPL, with FPL for a household of four being $32,150, and states having their own variations on top of this, a single mother living in California could be leaving over $15,000/year on the table without even realizing it. I wanted to simplify this conversation.

What it does

BenefitsNavigator is an agentic AI system that interviews citizens in plain language, compares them to 15+ benefit programs in California using a deterministic rules engine, reads uploaded documents (pay stubs, W-2s, leases) to auto-extract income data, and creates a prioritized action plan, all within a single chat session. A split-pane UI displays the chat on the left and live-updating benefit cards on the right.

How we built it

  • Amazon Nova 2 Lite for reasoning, conversation, tool usage, and multimodal document analysis on Bedrock
  • Nova Multimodal Embedding for semantic search using RAG on the benefits knowledge base
  • Strands Agents SDK using agents as tools: An orchestrator agent interacts with four specialist agents for intake, eligibility, action planning, and document reading
  • Deterministic rules engine using pure Python: Eligibility calculations are performed using actual 2025 FPL thresholds rather than text generated by a language model
  • FastAPI + WebSocket for the backend and a plain JavaScript frontend
  • Deployed on EC2 with Bedrock handling inference

Challenges we ran into

  • Updating the benefits panel in real time -the Strands agent return is included in the tool results, which are sent back as a text response from the agent, meaning I had to intercept the output from check_eligibility at the WebSocket layer and send it as a separate, structured message to the front-end
  • Balancing the flexibility of the LLM with the need for accuracy - a quick learning curve for me was that allowing the LLM to compute income thresholds resulted in "hallucinated" numbers, and the hybrid solution was the "aha" moment
  • Document extraction accuracy - pay stubs and W-2s can be in wildly different formats, with Nova 2 Lite's multimodal vision system handling most of them, though prompt engineering was required to get a structured JSON output from the extract tool
  • State-specific program variations - federal programs are one thing, but in California alone, there are CalFresh, Medi-Cal, CalWORKs, CARE, CAPI, and more, with their own variations
  • Wiring up Nova Multimodal Embedding for RAG - Getting the two Nova models to work together was a bit finicky. The embedding model computes vectors on startup over 51 chunks of program data, and I needed the semantic search to degrade to keyword search when the embedding service was unavailable. Getting the chunk sizes and cosine similarity thresholds just right so that "help with groceries" returns SNAP rather than a host of unrelated results was a bit of a process

Accomplishments that we're proud of

  • It actually works. This is not a theoretical construct or a mock-up – it is an actual working agentic system with two Nova models, four sub-agents, a deterministic rules engine, a RAG pipeline, and a WebSocket frontend all working together in one conversation. Getting all the pieces to talk to all the other pieces was the most difficult and rewarding part.
  • The accuracy is real. I also had several friends test this system with their real-world financial situations, and their results were spot-on with what they found when they checked their results against official program guidelines on their own.
  • It's already helping people. I also found out that two friends qualify for SNAP and are already working on their applications thanks to BenefitsNavigator. Another friend didn't know he qualified for Medicaid until the agent told him and explained exactly how his income made him eligible under 138% FPL. I also used it for our neighbor Steve, who has been trying to deal with the benefits system on his own for months and got an action plan with exactly which programs to apply for, in which order, and which paperwork to bring with him. That's people helped by a hackathon project!

What we learned

Most important thing learned: The most important thing learned is that "with agentic AI, it's not about making the LLM do everything, it's about knowing what the LLM should NOT do." Eligibility math, document parsing, and program data retrieval are better done with deterministic tools, and the LLM's role is to reason about when to use those tools and how to present those results in an empathetic way.

What's next for Benefits Navigator

  • Nova 2 Sonic for voice interface, as users may prefer phone calls over typing for interaction
  • Nova Act for browser automation, as the agent could fill out application forms for users
  • Expanding from California to all 50 states
  • A notification system to alert users of waitlist openings, such as Section 8 housing
  • Production scaling - move from EC2 to Bedrock AgentCore for managed agent runtime with Firecracker isolation, store uploaded documents in S3, store user sessions in DynamoDB, and replace in-memory vector store with Bedrock Knowledge Base with OpenSearch Serverless to support thousands of concurrent users

Built With

Share this project:

Updates