CB Labs

13 — WEB & APIS · 2026

Grill Index

A free public API that scores grilling conditions 0–100 anywhere on the map and finds your best window to cook, tuned for charcoal, gas or smoker.

Built
A free public API and site that scores grilling weather.
Stack
Cloudflare Workers, TypeScript, Hono, Zod, Durable Objects, OpenAPI 3.1; 295 tests.
State
Live; text alerts switched off.

LIVE · UPDATED 2 OCT 2026

Public and free to call; text alerts are built but switched off.

grillindex.cblabs.app

Carter Barnes · cloud engineer, federal Azure · Contact

Render · The sign's renderer drawing a Grill Index score from the public API.

What it is

A public REST API and site that scores grilling conditions 0 to 100 for any point on the map, finds your best window to cook, and tunes itself for charcoal, gas or smoker. No key required, MIT licensed, with a published OpenAPI 3.1 spec.

It answers what the score is now and when today's window is, the best window in the next 48 hours, which of 45 metros wins today, and what the week looks like, by city or ZIP.

Illustration · The badge lockup.

How it works

Runtime
Cloudflare Workers, TypeScript in strict mode, Hono and Zod. No database and no build step beyond Wrangler.
Scoring
Every factor scores 0 to 100, then a weighted geometric mean blends them with weights for charcoal, gas or smoker. The grades are grilling grades, not school grades: an A means light it now.
Rate limiting
A Durable Object, because no key required means the limiting has to be real: 60 requests a minute per IP. Weather is cached in cells of roughly seven miles for 30 minutes.
Alerts
Subscriptions in Workers KV and an hourly cron sweep against each subscriber's local clock. Sign-ups are closed and sending is switched off.
Spec
OpenAPI 3.1, published. MIT licensed.

By the numbers

45 metros
ranked on one national board
0 keys
needed to call it
60 req/min
per IP, enforced by a Durable Object
295 tests
passing

Decisions

  1. 01

    Charcoal, gas and smoker are three physics problems

    A smoker cares about sustained ambient temperature and wind; a gas grill barely cares about the wind. One score with a cooker parameter beats three products.

  2. 02

    One bad factor has to sink the score

    An average lets a perfect afternoon outvote near-certain rain. A weighted geometric mean does not: one near-zero factor sinks the whole score, while middling factors still move it normally.

  3. 03

    No API key means the rate limiting has to be real

    It forces real rate limiting and a cheap runtime. Both constraints made it better.

  4. 04

    The second product proves the architecture

    Golfdar runs on the same scoring, windowing and ranking engine and took days, not months. That is the evidence the first one was factored correctly.

  5. 05

    Text alerts ship switched off

    The whole pipeline is live, with sign-ups closed and sending disarmed. Once a texting account exists, arming it is three one-line commands, which is exactly why a checklist stands in the way: a findable postal address, a non-text way to opt out, and walking the full consent flow on a real phone. Until then, nobody gets a text.

What went wrong

  1. 01

    The first national board crowned a city that was asleep

    Ranked on conditions right now, at 2 a.m. Eastern it put New York first at 98, and all ten leaders were in the dark, because 2 a.m. is calm, mild and dry. The board now ranks each metro's best upcoming window. A review then found a second path to the same bug: a fallback for days with no good window quietly scored the present again, and a city calm at 2 a.m. and rained out from dawn took the crown at 99. It now falls back to the best hour a person would actually grill.

  2. 02

    The smoker board ran the wrong recipe

    A smoker needs six steady hours and no rain; a grill needs a short block at lunch or dinner. The national board judged smokers on the grill path, named the wrong winner by 19 points and recommended smoking into a 95% chance of rain. Each cooker style now runs its own path.

Next · 14 / 18Star & Moon LampA talking night lamp for a small child: one base, two swappable heads, eight printed parts, and 51 dimension checks before anything was printed.