What inspired me
People in real trouble — housing, food, job loss, safety — don't get help because the systems designed to help them are confusing. You search "I can't make rent" and get a wall of government acronyms, outdated PDFs, and phone trees. The people who need help the most are the least equipped to navigate bureaucracy under stress.
I wanted to build something that removes that friction entirely: describe what you're going through in your own words, get a calm plan back in plain language, with real phone numbers and links you can actually use.
How I built it
PlainSpeak is a Next.js app (App Router) with a single server route that calls Gemini 2.0 Flash using structured JSON output (responseMimeType: "application/json").
The AI receives a person's situation and returns exactly three things:
- A one-sentence calm reflection of what they're facing
- 3–5 concrete steps for this week, in plain language
- Which support categories apply (from a fixed allow-list: housing, food, income, legal, health, domestic safety)
The key architectural decision: the AI never generates resource links. It only selects categories. The app maps those categories to a hand-verified list of real NJ resources (app/resources.js) — phone numbers and URLs I confirmed are live. No hallucinated hotlines. No outdated links.
The responsible-AI guardrail I'm most proud of
The 988 Suicide & Crisis Lifeline, Crisis Text Line, and NJ 211 are always rendered on the page — not conditionally, not after an AI decides someone is "in crisis." They're part of the layout, visible to every user, every time.
This is the human-in-the-loop guarantee: the AI cannot accidentally decide someone doesn't need crisis information. The most important safety decision stays with the design, not the model.
Challenges
The hardest part wasn't the code — it was the resource curation. I manually verified every link and phone number in the resource list. Some "official" NJ resources I found had disconnected numbers or 404 pages. I cut anything I couldn't confirm was live.
The second challenge was prompt design. Early versions of the Gemini prompt returned verbose, jargon-heavy steps ("contact your local municipal housing authority to inquire about Section 8 voucher availability"). I iterated the system prompt until the output matched how a calm, knowledgeable friend would actually talk.
What I learned
Building this taught me that AI's value in social-impact apps isn't replacing human judgment — it's translating between "what someone can actually say" and "what systems need to hear." The model is a bridge. The humans, the verified data, and the unconditional crisis lines are the actual infrastructure.
Built With
- cerebras
- google-gemini-api
- next.js
- tailwind-css
- vercel
Log in or sign up for Devpost to join the conversation.