Files
houseplan-card/demo
Matysh 85491d0fea v1.47.0: pick a plan you already uploaded
Closes both findings from the v1.46.6 review with one feature, because they are
the same gap seen from two sides. HP-1466-02: a detached plan stayed on disk and
could not be re-attached from the card — the old url is nowhere in the config,
and the backend test 'proved' reattach by remembering it in a Python variable.
HP-1466-01: files kept forever with no way to see or remove them is not a
policy, it is accumulation.

New: houseplan/plans/list (name, url, size, modified, and which spaces use it)
and houseplan/plans/delete, which refuses while a space still references the
file — the stored configuration answers that, not the client. In the space
dialog, 'Already uploaded' shows the list with thumbnails; one click attaches,
reading the aspect from the image as an upload does; the trash button is the
only way a plan file is ever deleted.

That also bounds the disk without any timer, which is the part every automatic
attempt got wrong: v1.46.4 deleted detached plans, v1.46.5 raced the retry that
was about to reference an upload. The user decides, and can now see what they
are deciding about.

Docs: comments in plans.py and websocket_api.py still described the age-based
collection v1.46.6 removed (report §6); ARCHITECTURE gained the two new routes
and an explanation of why the listing is what makes 'never delete' livable.
2026-07-28 21:49:37 +03:00
..

Synthetic demo home

A fully fictional house (plans, devices, states) used for README screenshots, the demo GIF and headless smoke tests — so no real home data ever appears in public materials.

  • srv/demo.html — self-contained host page: <ha-icon>/<ha-card> stubs and a fake hass (registries, states, callWS, callService, floors).
  • srv/assets/ — generated plan SVGs and icons.js (node demo/gen_icons.mjs, needs the repo's devDependencies). The card bundle is copied from dist/: cp dist/houseplan-card.js demo/srv/assets/.
  • serve.mjs — playwright launcher (route interception, no web server).
  • smoke_*.mjs — feature smoke tests; run with a Chromium installed via PLAYWRIGHT_BROWSERS_PATH=<dir> npx playwright install chromium-headless-shell.

Note for sandboxed sessions: /tmp does not survive; this directory is the persistent home of the harness (docs/DEVELOPMENT.md has the LD_LIBRARY_PATH recipe).