Kestrel

About the data

Where every number in Kestrel comes from.

Per the hackathon’s transparency rules, every external API, dataset, and library this build depends on is listed here - nothing is a silent mock pretending to be a live feed.

Open-Meteo

open-meteo.com/

Real current and forecast weather (rainfall, temperature, wind) for every seeded location.

Free, no API key. Hazard severity is computed from these real readings with documented, auditable rule-based thresholds - see the source code in lib/hazardRules.ts. This is not an AI guess.

Groq API (llama-3.3-70b-versatile)

groq.com/

Turns an already-classified hazard reading into a short, plain-language, action-first warning, and reasons about escalation when confirmation lags.

The original build spec called for the Anthropic API. This build substitutes Groq - disclosed here in full per the hackathon's data/tooling transparency rule. The AI layer never invents hazard facts; it only translates and reasons over data it's given.

The one real delivery channel in this build - recipients who have started the bot receive an actual message with tap-to-confirm buttons.

Every other recipient is a simulated SMS/USSD dispatch, clearly labeled 'delivery simulation' throughout the UI - never presented as a real message.

MapLibre GL JS + OpenFreeMap

maplibre.org/

The live map - open-source rendering engine, free tile source, no vendor API key.

Restyled at runtime to Kestrel's paper/ink/ochre palette rather than the default basemap look.

All photography in this build - hero, section breaks, map backdrop.

Real, open-license editorial photography, not illustration or generated imagery. Full attribution in ATTRIBUTIONS.md.

Disclosed substitutions

  • Next.js 16 (App Router) is used in place of the spec's suggested Next.js 14 - a newer stable release of the same framework and paradigm, not a different architecture.
  • Fraunces and Hanken Grotesk (both free, Google Fonts) stand in for Tiempos/Canela and Söhne, which require paid licenses.

On the beneficiary data represented here

The at-risk community is represented only as aggregate delivery and confirmation numbers. Simulated recipients are synthetic - generated names with no connection to real individuals - used only to make the aggregate numbers demoable at a realistic scale alongside the real Telegram channel.