Inspiration
In 2026 Houston ISD closed schools and redrew seven elementary zones. For three years, until 2027–28, a shuttle runs from each closed campus to its receiving school. After that, families are on their own. Texas only guarantees a bus beyond 2 miles, and almost nobody in these zones is that far. So kids who used to walk a short way to school now walk farther and across bigger roads, and no one has told families what those walks look like.
We ran the numbers on a ~110 m grid of 1,664 points across the seven closed zones:
- 47% → 79% of the zone area now has a walk to school that crosses a City-listed pedestrian-dangerous road or an active railroad.
- Walks that cross an active rail line went from 36% to 55%.
- Only 0.7% of the area is more than 2 miles from the new school, so almost no one gets a bus.
What it does
For families (English and Spanish, built for phones):
- Type an address, or drop a pin, and get a one-line answer, like "Crosses train tracks and 1 dangerous road". It shows both walks: to the shuttle pickup at the old campus, and straight to the new school.
- Where to cross: for each road or track, the nearest traffic light or public rail crossing, which direction it is, and how much extra walking it adds. Where there's nothing close, it says so and names who could fix it.
- A printable walk plan, plus a packet with text ready to paste into HISD's Transportation Support Request ("Walk Route Concerns").
- A "Text this" button (an
sms:link, so no account and no backend). About 17% of households in these zones have no home internet.
For City and HISD staff:
- Closed zones: before-and-after numbers for each zone, plus a card for each of the seven shuttle pickups.
- Corridors: a ranked list of the crossings the City can act on, with uncontrolled crossings first.
- Before April 15: for each receiving school, a draft of the City's school-zone application. Streets are sorted by the Public Works rules for when a school zone is allowed. Only a school's principal can file one, and the deadline is April 15.
AI assistant (optional, grounded, read-only):
- Ask about this result: answers only from what the page already computed. No address or coordinates are sent.
- Describe the walk for HISD: a family describes the walk in any language, and the assistant writes one plain English sentence for HISD's form. The family sees their words and the draft side by side, and nothing goes in until they tap to add it.
- Ask the data / Draft the narrative: staff questions about the corridor and school-zone data. Every number is cited to a row, and made-up row IDs are dropped in code before the answer is shown.
How we built it
- Data pipeline (TypeScript): we pull public layers ourselves: HISD school locations and zone boundaries (2025–26 and 2026–27), the City's Vision Zero dangerous-road lists, active railroads, TranStar traffic signals, FRA public rail crossings, the City's street classes and centerlines, and OpenStreetMap school grounds. A compute step compares the old and new zones on a grid and writes the stats, the corridor ranking and the requests for each school. Every number on the site is recomputed from these layers.
- One engine: the browser and the precompute share
analyzeAddress()andplanWalk(), so the site and the report can't disagree. - Frontend: React 19, Vite, React Router, and Leaflet maps. It's a static site that works offline from a data snapshot.
- AI proxy: a single Cloudflare Pages Function that calls Claude. It holds the key, builds the prompts on the server and checks every answer in code. Banned words ("safe", "qualifies", "seguro", "califica") and a reading-level check trigger one retry, and after that a fixed answer. It stores nothing. A disclosure appears before the first message, as Texas HB 149 asks of AI a government offers.
Challenges we ran into
- Messy public data. ArcGIS layer IDs are irregular (one HISD service is spelled
Texas_Rainroads). The OSM Overpass server kept timing out under load, so we added retries and a mirror. We also had to drop port and plant driveways from the FRA crossing data. - Missing data. Houston publishes no sidewalk, crossing-guard, stop-sign or crosswalk data, and HISD hasn't published shuttle stop spots or times. We say that on screen instead of guessing.
- What to tell families. Our research found that telling a family "this road is dangerous" mostly repeats what they already know and pushes families with a car into driving. So we changed the app to lead with where to cross and who can change it.
- Staying neutral. It's not HISD's voice and not a protest. It never says "safe" or "you qualify", because it gives evidence, not a decision.
Accomplishments that we're proud of
- Every number traces back to a public source, and there's a sources page with dates.
- It gives both families and staff something to act on: families get a filled-in form and a walk plan, principals get a draft school-zone application.
- The AI features are useful without being risky: no personal data goes out, and the rules are checked in code.
- The whole site works without the AI.
What we learned
- Public AI in government can go badly wrong. NYC's MyCity bot gave illegal advice, and LAUSD's "Ed" shut down when its vendor collapsed. That's why we built grounded, checked and optional features instead of a general chatbot.
- Who owns the fix matters as much as the risk: HISD owns the shuttle and buildings, while the City owns the streets, school zones and crossing-guard funding.
What's next for Walk Check
- Real walking routes instead of straight lines. Our results are a floor, since a street route crosses at least as many hazards.
- Counting students or homes (from appraisal district residential parcels) instead of land area.
- A professional review of the Spanish, and testing the live AI in both languages.
- Adding shuttle stops and times once HISD publishes them, and taking the school-zone drafts to principals before April 15.
Built With
- anthropic-claude
- cloudflare-pages
- cloudflare-workers
- esri
- geojson
- leaflet.js
- node.js
- openstreetmap
- overpass-api
- react
- react-router
- tsx
- typescript
- vite
- wrangler



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