Live demo: https://porchlight-bay.vercel.app · Code: https://github.com/chinesepowered/porchlight · Pitch deck: https://porchlight-bay.vercel.app/slides.html

What it does

Porchlight is an AI agent built with the Strands Agents SDK for neighborhood mutual-aid groups, senior centers and churches. When the National Weather Service issues a heat warning, it scores every enrolled neighbor's heat risk, sends the nearest volunteers to the highest-risk homes first, reads their reports, books cooling rides, schedules retry visits, and interrupts the human coordinator only when someone truly can't be reached.

The problem

Heat often kills quietly, at home, and alone. In British Columbia's 2021 heat dome, 619 people died: 98% indoors, 56% living alone, two-thirds aged 70+ (BC Coroners Service, 2022). In Maricopa County, AZ, more than 600 heat deaths were confirmed in 2024; in 88% of indoor deaths an A/C unit was present, but 70% of those weren't working (Maricopa County Dept. of Public Health). The people who can catch this are neighbors, usually one volunteer coordinator with a spreadsheet, a phone, and hours, not days.

How it works

  1. Watch: check_heat_alert reads live api.weather.gov alerts (a clearly labeled simulated warning powers drills).
  2. Triage: score_residents applies fixed rules (age, living alone, no/broken AC, heat-sensitive medications, mobility, top floor); plan_checkins assigns the nearest volunteer, highest risk first; send_checkin_requests texts everyone.
  3. Follow up: quick "OK" taps are recorded automatically; the model reads free-text volunteer notes and classifies them with record_note_outcome, and code books the nearest cooling center or schedules a retry.
  4. Escalate only when it matters: after two unanswered visits, escalate_to_coordinator shows one decision card.
  5. Close the loop: the coordinator approves a welfare check or a second visit; the agent carries it out and tracks everyone to "reached".

How we use Strands Agents

  • A Strands Agent (TypeScript SDK) per event with 9 tool()s defined by zod schemas (lib/agent.ts).
  • Guardrails in code, not prompts: a BeforeToolCallEvent hook cancels unsafe calls: no mass texting without a heat warning, at most 2 texts per resident per hour, a 14-tool-call step cap, escalation only after two unanswered visits, and welfare checks or entry only with coordinator approval. Every verdict appears in the activity feed.
  • Model: Strands OpenAIModel against an OpenAI-compatible endpoint (Qwen3.8-27B on W&B Inference). Strands is model-agnostic, so moving to Amazon Bedrock is a model swap. Not deployed on AgentCore for this submission; runs on Vercel.
  • The LLM plans the order of work and reads messy human notes; deterministic code scores, routes and enforces the rules.

In the demo drill, 7 volunteers reach 34 of 34 neighbors in 100 simulated minutes, and the coordinator makes exactly one decision.

All residents and volunteers are fictional; SMS and police requests are simulated; weather is live unless marked simulated. Built during the hackathon with Claude Code as a coding assistant; narration by ElevenLabs. Open source (MIT).

Built With

Share this project:

Updates

Submission history