Skip to content

Releases: csader/splitflap-os

v0.1.12 — Weather, Planes, Calibration & More

12 May 20:14

Choose a tag to compare

What's New

Weather App — Major Update (by @InertiaImpact)

  • 4 providers: Open-Meteo (free, no key), WeatherAPI.com, QWeather, OpenWeather
  • Open-Meteo is now the default — works out of the box with no API key
  • AQI, UV index, pollen — optional pages with color-coded status
  • Temperature units: F, C, K
  • Configurable refresh rate
  • Adapts to any grid size including 4+ rows
  • Caches last good pages on error

Existing users: If you had an OpenWeather API key, the provider defaulted to Open-Meteo after this update. Go to Weather settings and switch back to OpenWeather if needed.

Planes Overhead — API Usage Estimates (by @InertiaImpact)

  • Per-provider API usage estimates with free tier warnings

Settings System Improvements (by @InertiaImpact)

  • notice field type — info/warning/success/error boxes in settings modals
  • disabled_when — conditionally disable fields based on other values
  • polling_usage_estimate — config-driven API usage calculator with provider profiles
  • Better merge logic for live schema updates

Calibration Improvements

  • Reset Offset button — jump to 2832 in one click (no more clicking +32 hundreds of times, closes #26)
  • Direct offset input — type a target value and hit Set
  • Auto fine-tune direction fixed — now goes 1→63 (1 step per transition) instead of 63→1 (~63 steps per transition)

Simulator

  • Flap animation speed matches real hardware timing (~4.2s for full home, closes #27)

BirdNET App

  • Compact display: bird name + confidence on one line
  • Smart name shortening (White-Winged Dove → WW Dove, Carolina Chickadee → C. Chickadee)
  • Leaderboard: single page with one bird per row, fills grid height
  • Lucide icon
  • Removed guessed color indicators

v0.1.11 — Inbox, BirdNET & Bug Fixes

11 May 01:12

Choose a tag to compare

What's New

Inbox — Push Messages to the Display

External services can now push messages directly to the display via HTTP, regardless of what app is running.

High-priority messages interrupt between pages — your display reacts to your world in real time.

curl -X POST http://splitflap.local/inbox \
  -H "Authorization: Bearer <your-key>" \
  -d '{"text": "CHICKEN DETECTED", "priority": "high"}'

Setup: Settings > Inbox > Enable > Add Source. Each integration (Frigate, HA, n8n, OpenClaw, etc.) gets its own revocable API key.

Use cases: Frigate detections, laundry done, 3D print complete, calendar reminders, solar milestones, agent notifications, "WELCOME HOME" on arrival.

Endpoints:

  • POST /inbox — push a message (requires Bearer token)
  • GET /inbox — list queue
  • DELETE /inbox — clear queue or by source

BirdNET App

Polls a BirdNET-Pi instance for live bird detections. Shows latest detection, last 3 birds, or today's leaderboard. Maps bird species to flap color characters (cardinal→red, jay→blue, goldfinch→yellow, etc.).

Bug Fixes (v0.1.10)

  • PUSH TO DISPLAY was silently failing (broken after Compose tab simplification)
  • Compose grid not resizing when grid dimensions change
  • Compose grid crash on init (race condition)
  • Stale CSS/JS after update — now uses version as cache-busting string
  • Update modal stuck on spinner after server restarts
  • savedPlaylistList null error

v0.1.10 — Bug Fixes

09 May 12:44

Choose a tag to compare

Bug Fixes

PUSH TO DISPLAY was broken

sync() was reading removed DOM elements (modeToggle, delayInput, styleInput, speedInput) which returned null and threw a TypeError before the fetch fired. Fixed by removing dead references and using defaults.

Compose grid not resizing with grid dimensions

initComposeGrid() was missing from applyGridConfig() and the polling loop's dimension-change handler. All three code paths that change grid size now also resize the compose grid.

Compose grid crash on init

onChange fired during createComposeGrid initialization before composeGrid was assigned, causing getBuffer() on null. Fixed with a local _grid reference.

Stale CSS/JS after update

Static asset URLs now use the app version as the cache-busting string (?v=0.1.10). After each update, browsers automatically fetch fresh CSS/JS — no more unstyled page after clicking Reload.

Update modal stuck on spinner

Race condition where the poll could complete and show "Update complete" before the fetch().catch() fired, which then overwrote the state with "Restarting…". Fixed with a done flag.

savedPlaylistList null error

renderSavedPlaylists was crashing when the element didn't exist (removed from Compose tab). Added a null guard.

v0.1.9 — Bug Fixes

08 May 23:52

Choose a tag to compare

Bug Fixes

PUSH TO DISPLAY was broken

The Compose tab's "PUSH TO DISPLAY" button was silently failing. When we simplified the Compose tab (moving multi-page playlists to the Playlists tab), we removed the modeToggle, delayInput, styleInput, and speedInput elements — but sync() still tried to read them. document.getElementById() returned null, causing a TypeError before the fetch ever fired. Fixed by removing the dead references and using sensible defaults.

Compose grid not resizing with grid dimensions

The compose grid wasn't updating when grid dimensions were changed via Settings or applyGridConfig(). initComposeGrid() was missing from two code paths that change grid size — now all three paths (initial load, settings save, polling loop) resize the compose grid correctly.

v0.1.8 — Update Modal & UX Fixes

08 May 21:40

Choose a tag to compare

What's New

Update Progress Modal

  • Clicking "Update Now" now opens a modal with step-by-step progress
  • Shows: Downloading → Restarting → Complete
  • Spinner animation during active steps
  • Reload Page button appears when server comes back (no surprise auto-reload)
  • Error state with Close button if update fails

Bug Fixes

  • Fixed clicking the "update available" badge opening the hamburger menu instead of navigating to Settings
  • Hamburger menu now closes (not toggles) when navigating to a settings page from outside the drawer

v0.1.7 — Grid Compatibility

08 May 18:42

Choose a tag to compare

What's New

Grid Compatibility

Apps now declare minimum grid requirements and adapt to non-standard grid sizes.

Adaptive apps (work on any grid size):

  • Stocks & Crypto — chunk by get_rows() instead of hardcoded 3; each ticker/coin gets its own page on smaller grids
  • Sports — 1-row (score only), 2-row (score+status), 3-row (league+score+status)
  • Weather — 1-row (temp+desc), 2-row (temp+hi/lo), 3-row (city+temp+desc)
  • Metro — 1-row (both directions), 2-row (two lines), 3-row (header+directions)
  • ISS — 1-row (lat+lon), 2-row (header+coords), 3-row (full with crew count)
  • Time — 1-row (just the time), 2+ rows (centered)
  • Date — 2-row (date+weekday), 3-row (time+date+weekday)
  • Countdown — 2-row (event+time), 3-row (event+time+REMAINING)

Incompatible app cards dim with the reason shown (e.g., "Requires 3+ rows") when the configured grid is too small.

Other Fixes

  • Compose grid resizes when grid dimensions change in Settings (closes #20)
  • Update badge shows "update available" text instead of ↑ (closes #19)

v0.1.6 — Updater & Installer Polish

08 May 03:47

Choose a tag to compare

What's New

Software Updater

  • Clicking the green update badge in the top bar now scrolls directly to the Software Update section in Settings
  • Dependencies updated automatically when requirements.txt changes (no manual install.sh needed)
  • Update errors shown in the UI instead of silently reloading

Installer

  • Hotspot SSID/password preserved when re-running install.sh after an update
  • Installer output now shows the UI URL (http://<pi-ip>) instead of a misleading "Start now" message
  • Service starts immediately after install — no reboot or manual start needed

Updating

From the UI: Settings > Software Update > Update Now

Manually:

cd ~/splitflap-os
git pull origin main
sudo bash setup/install.sh

v0.1.5 — Updater & Installer Fixes

08 May 02:50

Choose a tag to compare

Bug Fixes

Software Updater

  • Fixed "Update Now" failing when the service runs as root but the repo is owned by a regular user (git "dubious ownership" error)
  • Update errors now shown in the UI instead of silently reloading

Installer

  • Added libopenblas0 dependency — required by NumPy on Raspberry Pi OS Lite (minimal images don't include it, causing server crash on import)

Updating

If you're on v0.1.3 or earlier, update manually this one time:

cd ~/splitflap-os
git pull origin main
sudo bash setup/install.sh

After that, future updates can be done from Settings > Software Update in the UI.

v0.1.4 — Community Apps, Updater & Fixes

08 May 02:36

Choose a tag to compare

What's New

Community Contributions

  • Planes Overhead app — track nearby aircraft with 5 provider options (OpenSky, FlightAware, FR24, AirLabs, Aviationstack)
  • Advanced settings controls — segmented toggles, number steppers, conditional visibility, computed fields, inline toggles, declarative sync (PR #16 by @InertiaImpact)
  • Narrow screen fix — top bar wraps gracefully on screens under 400px (PR #18 by @InertiaImpact)
  • UTF-8 encoding — manifest and settings files explicitly use UTF-8 (PR #15 by @InertiaImpact)

Software Updater

  • Update notifications in top bar and Settings page
  • One-click "Update Now" — pulls latest and restarts automatically
  • "Check Again" button to bypass 1-hour cache
  • Warns if requirements.txt changed (prompts to run setup/install.sh)

Setup & Hotspot Fixes

  • Fixed hotspot activating on connected WiFi (was triggering after 30s regardless)
  • Installer no longer copies to /opt — runs from cloned repo directory
  • Services start immediately after install (no reboot required)
  • MQTT disabled by default
  • Added Updating section to README
  • Added git install note for Raspberry Pi OS Lite users

UI

  • App settings modal shows Lucide icon in title
  • Sports modal: segmented controls for Show/League Name/Games per page
  • Stepper controls on all number fields
  • Small selects converted to segmented toggles
  • Logo SVGs converted to outlines (no font dependency)

v0.1.3 — Software Updater & Setup Fixes

07 May 22:10

Choose a tag to compare

What's New

Software Updater

  • Update notifications in the top bar and Settings page
  • One-click "Update Now" button — pulls latest and restarts automatically
  • "Release Notes" link to GitHub releases
  • Checks against GitHub releases once per hour

Setup & Hotspot Fixes

  • Fixed hotspot activating on connected WiFi networks (was triggering after 30s regardless)
  • Installer no longer copies to /opt — runs from cloned repo directory
  • Services start immediately after install (no reboot required)
  • MQTT disabled by default (enable in Settings > MQTT)
  • Added Updating section to README

UI

  • App settings modal shows Lucide icon in title
  • Sports modal: segmented controls for Show/League Name/Games per page
  • Stepper controls on all number fields
  • Small selects converted to segmented toggles