Inspiration

Florida's official "Get A Plan!" tool gives everyone the same information regardless of their personal situation, blank fill-in-the-box questions and emails back a generic PDF. It doesn't adapt to who's answering and that is something I wanted to highlight. Someone who relies on power-dependent medical equipment, has no car, or has a mobility limitation gets the exact same form as anyone else, with no guidance on what actually applies to them. For Alachua County residents with accessibility needs, this can cause people missing out on resources that could significantly change lives.

What it does

Steady builds a personalized storm plan from either:

  • a short multiple choice question intake form
  • describing your situation in your own words, parsed by Google's Gemini API into the same structured profile, with the user being able to edit the form afterwards

From there, a rules engine matches your answers against a set of plan modules (registering with the county, backup power, evacuation zones, pet plans, mobile-home-specific guidance, and more) and organizes them into four phases: Do now, When a storm is coming, During, and After. Anything left unanswered defaults to showing the related step rather than hiding it. If there are any error or if the alogorithm is in doubt, the plan will show more information rather than less. It is better to have useless information than necessary information be absent.

The finished plan can be printed as a single page that works without power or internet: key phone numbers written out in full, a pack list generated from users specific needs, and space to fill in personal details by hand. Nothing personal is ever stored within the site and because the website runs in browser (with the exception of the small AI element) no personal information is saved. I am emphasizing this for internet safety.

Accessibility first

Accessibility isn't a feature bolted on afterward — it's the whole premise:

  • Read this page aloud — on-device text-to-speech reads any screen, or a single plan step at a time
  • Adjustable text size, high contrast, reduced motion, and plain language, all live in a persistent settings panel
  • A colorblind-safe color system (WCAG-verified) for the four plan phases, always paired with icon and label — never color alone
  • Atkinson Hyperlegible typeface, designed for low-vision readers
  • A printable QR-code flyer, designed to be posted in libraries, shelters, or community centers for people who wouldn't otherwise find the tool online

How we built it

  • React + TypeScript (Vite)
  • Tailwind CSS (version 4)
  • Motion (Framer Motion) for animation, respecting prefers-reduced-motion
  • Google Gemini API (via a Vercel serverless function) for free-text intake parsing, with all model output validated against fixed allow-lists before use
  • Deployed on Vercel

Plan content was verified against official Alachua County Emergency Management, FloridaDisaster.org, Florida Department of Health, and Regional Transit System sources.

Challenges I ran into

Balancing a genuinely adaptive, AI-assisted intake against a hard requirement: the tool has to remain fully usable and trustworthy with zero internet or power, since that's exactly when someone needs it most. That shaped nearly every design decision, from the offline-safe fallback intake to the printed plan's design.

What's next for Steady

  • Expanding plan content to neighboring counties and other areas
  • Adding further offline-first support via a service worker
  • Partnering with local shelters, libraries, and community buildings to distribute the printable QR code flyer ahead of hurricane season
  • Furthing accessibility features by implemented voice-to-speech interaction for those who have trouble using a keyboard and adding more offline features
  • Changing the modules to fit other natural disaster protocols (droughts, fires, tornados, etc.) and allow the user to choose which one they are planning for
  • Find test groups of all age ranges to test the website, recieve feedback, and then further implement

Built With

Share this project:

Updates

Submission history