Skip to content

Birding edition: eBird sightings radar + data screens (FEATURE_BIRDING)#26

Merged
daniel-frenkel merged 1 commit into
mainfrom
feat/birding-edition
Jun 30, 2026
Merged

Birding edition: eBird sightings radar + data screens (FEATURE_BIRDING)#26
daniel-frenkel merged 1 commit into
mainfrom
feat/birding-edition

Conversation

@daniel-frenkel

Copy link
Copy Markdown
Member

Adds a fifth edition built from the same boards and shared infra as the radar / EAM / Spacescope / Seismic: notable bird sightings near you, live from eBird. Rebased onto current main (so it stacks cleanly on the just-merged Seismic edition).

UI — a hybrid (radar + cards and rotating data screens)

Dwell-timed auto-rotation that skips empty feeds + swipe-to-navigate (the Space/EAM shell) plus a tap-to-inspect detail-card overlay (the Seismic/Aviation radar). Screens:

  • Radar — sightings plotted by bearing/distance; notable ones gold + ringed. Tap a blip → detail card (species, sci-name, location, distance/bearing, date, count, notable flag).
  • Notable — scrolling list of rare/notable sightings; tap a row → card.
  • Big Day — distinct species count nearby + recent-observation count.
  • Hotspot — nearest eBird hotspot, all-time species count, distance.
  • Targets — your watchlist matches nearby.
  • Splash (cold-start setup prompt) + Clock.

Data — BYO eBird key, no baked-in secret

The user enters their own free eBird token (config ebird-key, sent as X-eBirdApiToken), masked on the config page exactly like the OpenSky secret (*-mask on GET, skip-if-masked on save). One worker over three endpoints (recent notable / all recent / hotspots), all dist/maxResults-bounded. Nothing is polled until a key and a location are set.

Alerts

ntfy on two toggles — a notable/rare sighting nearby, or a target species appears — seeded at boot via a seen-species set so the backlog never fires.

Integration

[env:blipscope-birding-s3-146] · #elif defined(FEATURE_BIRDING) config branch (with key masking) · own OTA channel firmware-birding-s3-146.bin · CI matrix row · RELEASING.md + CLAUDE.md notes.

Verification

All five envs build clean on this branch: blipscope-birding-s3-146, blipscope-s3-146 (radar), blipscope-eam-s3-146, blipscope-space-s3-146, blipscope-seismic-s3-146.

🤖 Generated with Claude Code

A fifth compile-time product from the same boards + shared infra, alongside
the radar / EAM / Spacescope / Seismic editions: notable bird sightings near
you, live from the Cornell eBird API.

- src/birding/: Models (eBird obs/hotspot parsers + haversine), FeedClient
  (one worker over three eBird endpoints -- recent notable nearby, all recent
  nearby, nearby hotspots -- all dist/maxResults bounded), Manager, Screens,
  Theme (leaf-green palette, gold accent for notable/rare).
- BYO key: the user supplies their own free eBird token (config "ebird-key",
  sent as X-eBirdApiToken; never baked in), masked on the config page like the
  OpenSky secret (*-mask on GET, skip-if-masked on save). Nothing is polled
  until a key AND a location are set.
- UI is a hybrid: dwell-timed auto-rotation that skips empty feeds + swipe nav
  (Space/EAM shell) PLUS a tap-to-inspect detail card (Seismic/Aviation radar).
  Screens: sightings Radar, Notable, Big-Day, Hotspot, Targets, Splash, Clock.
  Static range rings, so main.cpp gates the PPI sweep out (with EAM/Space/Seismic).
- ntfy alerts on two toggles (notable sighting / target species), seeded at
  boot via a seen-species set so the backlog never fires.
- Config #elif FEATURE_BIRDING branch (with key masking); new
  [env:blipscope-birding-s3-146] with its own OTA channel; CI row; docs.

Verified: all five envs (birding, radar, eam, space, seismic) build clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@daniel-frenkel daniel-frenkel merged commit 04d78d7 into main Jun 30, 2026
7 checks passed
@daniel-frenkel daniel-frenkel deleted the feat/birding-edition branch June 30, 2026 21:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant