Inspiration
New York City's energy assistance programs distribute billions annually, yet over 40% of eligible households never apply. The barrier isn't income. It's navigation. HEAP, EAP, EmPower+, Solar for All: 15 overlapping programs across 6 agencies, each with its own forms, deadlines, and eligibility rules buried in bureaucratic language. Worse, the order you apply matters. If a family applies for EmPower+ before HEAP, they face full income verification. If they apply for HEAP first, their SNAP enrollment gives them categorical eligibility, making the EmPower+ application automatic. Miss one cascade chain and a family loses up to $3,100 a year they were already entitled to. Nobody tells you this. WattsGood does.
What it does
WattsGood is an intelligent energy savings navigator for NYC households. Users answer a short intake form and the app identifies every assistance program they may qualify for, estimates annual savings, and generates a numbered step-by-step application strategy. The key insight is sequencing: the tool determines which "anchor" benefit to apply for first so that subsequent programs unlock through categorical eligibility or automatic enrollment, eliminating redundant paperwork and maximizing total value. It supports English and Spanish and surfaces cascade chains visually so users understand exactly why order matters.
How we built it
React 18 and Tailwind CSS on the frontend, Node.js/Express on the backend, with Claude Sonnet 4.6 powering the eligibility analysis. A static cascade graph models the trigger-to-unlock relationships between programs (e.g., HEAP approval auto-qualifies a household for Con Edison EAL). The backend resolves these chains after each LLM assessment and computes an optimal application plan. Plus, Linkup API integration provides real-time program context. Development was done in Cursor with Claude Code for rapid iteration.
Challenges we ran into
Compressing 15 programs worth of eligibility logic into a prompt that returns valid, parseable JSON under latency constraints. LLM outputs frequently included trailing commas, malformed strings, and inconsistent schemas, so we built a multi-strategy JSON parser with bracket-balanced extraction and trailing-comma correction. Coordinating cascade chain resolution with LLM-generated program data required careful normalization to avoid duplicate or missing steps in the application plan.
Accomplishments that we're proud of
Shipping a working MVP that goes beyond a simple eligibility checker. The application sequencing engine is the core differentiator: it tells users not just what they qualify for, but the strategically optimal order to apply. The cascade visualization and bilingual support make it accessible to the communities that need it most.
What we learned
Upfront architecture planning saves more time than it costs. Defining the cascade data model and API contract before writing UI code meant the frontend and backend could evolve in parallel without breaking each other. We also learned that LLM output reliability is an engineering problem, not a prompt problem: structured output modes and robust parsing matter more than clever instructions.
What's next for WattsGood
PDF document upload so users can scan benefit letters and have the system auto-detect existing enrollments. Integration with ACCESS NYC and HRA APIs for real-time application status tracking. A caseworker dashboard for community organizations to manage multiple household assessments, and push notifications for program deadlines and re-enrollment windows.
Built With
- api
- autoprefixer
- claude-api
- claude-code
- concurrently
- cors
- css
- cursor
- dotenv
- express.js
- javascript
- json
- linkup
- node.js
- postcss
- react
- tailwind
- vite
- zod

Log in or sign up for Devpost to join the conversation.