Inspiration
Puerto Rico is one of the oldest places in the world: 26% of residents are 65 or older (U.S. Census Bureau, July 2025 estimate), a higher share than any U.S. state. Federal Medicare data counts 44,483 people here who use medical equipment that needs electricity (HHS emPOWER Map, October 2026). Many home oxygen machines stop when the power does.
The person who looks after them, a daughter, a son, a neighbor, is often at work or in another town when the lights go out. Today the family finds out late, or by chance. In 2024, the Centro de Periodismo Investigativo reported that Puerto Rico had no integrated list of these patients, and that the electric company's own registry held about 3,000 people.
We built VitalPower so the family knows.
What it does
VitalPower alerts a caregiver when an outage is reported where their loved one lives.
It works in English and Spanish, with voice input, large buttons, and light and dark modes. Beyond the caregiver view, there are views for care organizations, for patients who register themselves, and for administrators.
The AI helps. It never decides who gets help first.
AI (Claude) does small jobs: it fills in the registration form from what the caregiver says, reads their reply, and drafts a summary for the responder. A person checks each one, and each step can be done by hand if the AI is unavailable.
How we built it
- Frontend: React and TypeScript with Vite, with our own stylesheet and an English/Spanish text system.
- Backend: Hono on Node.js, with a typed client so a changed route breaks the build instead of the demo.
- Database: PostgreSQL on Supabase.
- Alerts: WhatsApp through Twilio, plus in-app alerts and browser notifications.
- Outage data: LUMA's public outage reports. Every reading is stored, which lets us replay a real recorded outage for the demo.
- AI: the Anthropic API with structured outputs, validated again on our side.
- Hosting: Azure App Service.
- Safety: who can see what is enforced in the database queries. 86 automated tests cover the urgency rules, the visibility rules, the AI steps and the WhatsApp flow.
Challenges we ran into
- The outage feed did not behave the way we expected. It rejects requests that do not look like a browser, and it spells municipalities without accents but keeps the Ñ. We store every reading and mark the screen when data is old.
- Keeping the AI in its place. A reply like "the battery is about half" is easy for a model to turn into a guess. A reply can never change who is most urgent by itself.
- Checking our own claims. We fact-checked the pitch and rewrote two lines that were wrong as worded.
- Finding the real user. We started by building for responder organizations. Feedback showed us the caregiver is the person who needs this most, and we refocused on them.
Accomplishments that we're proud of
- The full story runs end to end on a real recorded outage: registration, outage, WhatsApp alert, reply, and a care organization taking the case.
- It is usable by someone who is not comfortable with technology.
- A responder can always see why a patient is marked urgent.
What we learned
- Start from the person who is worried, not from the system that manages them.
- In health care, being able to explain a decision matters more than making it clever.
- Public data is only useful if you plan for the moments it is late, missing or wrong.
What's next for VitalPower
- A power sensor in the home: a small plug-in device with a battery that sends the alert over the mobile network, so we do not depend only on the electric company's reports.
- Real sign-in. The demo uses a persona switcher and fictional patients only.
- A first pilot with real families, alongside one health plan or municipality.
Built With
- azure
- claude
- hono
- node.js
- postgresql
- react
- supabase
- twilio
- typescript
- vite
- zod

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