Inspiration
Social Security disability denial letters are confusing, stressful, and hard to act on. A person may be denied because the record is incomplete, not because their condition is not real. Missing doctor notes, unclear functional limits, incomplete treatment history, or no treating-source statement can make a real claim look unsupported.
We built Dignity Machine to help someone move from “I was denied and I do not understand why” to “I know what proof is missing, what policy matters, and what I should do next.”
What it does
Dignity Machine reads a text-readable Social Security disability denial PDF and turns it into an appeal-prep workspace.
The agent can explain the denial in plain English, retrieve relevant SSA/POMS policy through Elastic Agent Builder MCP, identify possible missing proof, ask for missing case details, save user-provided facts to Elastic case memory, rerun the action plan using saved facts, create next-step tasks, draft a doctor or clinic records request, prepare a review summary, and open user-controlled Google Calendar and email drafts.
How we built it
Dignity Machine is deployed on Google Cloud Run as a single FastAPI service that serves both the backend API and the built React frontend.
The agent layer uses Google ADK with Gemini on Vertex AI. Elastic is central to the workflow: official SSA/POMS policy, SSA forms, uploaded denial text, case facts, generated tasks, records requests, summaries, and action logs are all stored or retrieved through Elastic.
Elastic Agent Builder MCP exposes policy and form retrieval tools to the ADK agent. We also built backend-scoped case tools so the agent can only retrieve documents and facts for the selected case, keeping the workflow grounded in the PDF the user selected or uploaded.
Challenges we ran into
The biggest challenge was making the project agentic without making it fake. We avoided pretending to send messages to advocates or automatically file legal paperwork. Instead, the agent acts inside the product: it finds gaps, asks targeted questions, saves memory, creates tasks, prepares drafts, and opens user-controlled Calendar/email actions.
Another challenge was keeping the experience understandable. Disability policy is complex, and the agent retrieves real SSA/POMS material, but the user should not have to be a lawyer to understand the output.
We also had to handle agent hallucination against policies/details which may not be mentioned.
Accomplishments that we're proud of
We built a complete end-to-end agent workflow, not just a chat demo. A user can upload a denial, get a plain-English explanation, find missing evidence, save missing details, rerun the plan, generate tasks, draft a records request, and prepare a review summary.
We are also proud that Elastic is used as a core part of the product: for official policy retrieval, case document storage, case memory, generated artifacts, and traceable action logs.
What we learned
We learned that retrieval alone is not enough. The useful product is the loop: read the denial, retrieve official policy, identify what is missing, ask for missing details, remember the answers, rerun the plan, and turn the result into tasks and drafts.
That loop is what makes Dignity Machine more than a document summarizer.
What's next for Dignity Machine
Next, we would add OCR for scanned denial letters, support multiple supporting documents, improve deadline handling across more appeal stages, and add exportable packets for legal aid workers or disability advocates.
We would also expand the indexed policy corpus and add stronger evaluation tests to measure whether the agent correctly identifies missing evidence and retrieves the right SSA policy for different denial types.
Built With
- docker
- elastic
- elastic-agent-builder-mcp
- elasticsearch
- fastapi
- gemini
- google-adk
- google-cloud-build
- google-cloud-run
- kibana
- pypdf
- python
- react
- tailwind-css
- typescript
- vertex-ai
- vite
Log in or sign up for Devpost to join the conversation.