Demo mode (built-in WLED simulator) and README screenshots #63
Labels
No labels
area/ai
area/backend
area/frontend
area/infra
area/scheduler
area/wled
good-first-issue
priority/high
priority/low
priority/medium
type/bug
type/chore
type/ci-cd
type/docs
type/feature
type/qa
v1.0.0
v1.1.0
v1.2.0
v2.0.0
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/Iris-WLED#63
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
From the 2026-07-15 review follow-ups. For public self-hosted adoption, let people try Iris with zero hardware and see it before installing:
DEMO_MODE=true(orWLED_HOST=simulator): an in-process fake controller implementing the/json/*surface theWLEDControllerclient uses — accepts pushes, reports plausible info/state, never failsDISABLE_AUTH+ viewer-only roleclaude-bot referenced this issue2026-09-05 01:37:31 +00:00
Landed in #137 (squash-merged to
main) — the simulator, the pairing with #14, and the demo seeding. README screenshots and the optional public instance are split to #136; see below for why.DEMO_MODE=trueswaps the HTTP controller for an in-process simulator, so the whole workflow runs with no hardware: the year generates, the review queue fills, schemes preview as an animated virtual strip, and pushes and preset sync succeed.Seeding gives an empty database three segments and sixteen approved schemes across eight events, so the calendar has colour rather than being a blank grid. It seeds only an empty install — existing segments and approvals are never touched, and it refuses to top up a partial layout, because this is a flag someone can set on a database with their real work in it. It deliberately leaves the rest as candidates: the review queue with things in it is the feature being demonstrated.
Subclassing the real controller paid for itself immediately. A test comparing the two surfaces found
get_infoun-overridden — it fell through to an HTTP call against hostdemo, producing a DNS error that would have read like a network problem rather than a missing method. Nothing in the class called it, so the hole was invisible until something compared them.It serves the captured 16.0.0 effect catalogue, not invented names, because the browser simulator maps effect IDs to animations. That capture moved from
tests/fixtures/toapp/data/so there's one shipped copy rather than a test fixture duplicated into the image.Three of my eight showcase event keys didn't exist —
thanksgiving_us,christmasandnew_years_evearethanksgiving_week,christmas_seasonand nothing at all. A typo there is invisible: the seed approves nothing for that key and the calendar is a little greyer than intended. There's a test now.Verified by booting it, not just unit tests — status reachable as "Iris Demo" with 220 effects, 3 segments, 108 schemes with 16 approved, push and quick push succeeding, preset sync writing 16 slots and verifying the read-back.
Two honest caveats, documented in the module, the README and
.env.example: nothing on your network lights up while it's on (a startup warning says so), and it never fails, so it exercises none of the retry, fallback or unreachable-controller paths. It's a demo, not a test rig.Why the screenshots are split (#136): I can generate them — Playwright is already set up — but I can't look at the result and tell whether the layout held, whether the crop shows the right thing, or whether it looks like software someone would want to run. Committing images I can't see to a README whose job is first impressions is the one place where "it produced output" is furthest from "it works". Demo mode makes that job easy for whoever does it, which is the useful half.
Verified: 29 new tests,
ruff/mypyclean, 790 backend tests, CI green.