LibrePortal/CLAUDE.md
librelad e6c63af339 docs: note lp-shot's login requirement and the live-install path
lp-shot now exists on this machine, and two things about it were not
written down anywhere: every WebUI route except / sits behind the login
so it needs a session in the environment, and screenshotting a change
means copying it into the bind-mounted live tree first.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 21:29:18 +01:00

34 lines
1.7 KiB
Markdown

# LibrePortal — agent notes
## Verify WebUI changes visually before marking them done
After changing anything user-visible in the WebUI (`containers/libreportal/frontend/`),
confirm it actually renders correctly — syntax checks and type-correctness don't
catch layout or visual regressions.
The maintainer's dev environment provides a headless screenshot helper, `lp-shot`,
that captures a WebUI route (or a single element, via a trailing CSS selector) to a
PNG for review:
```
lp-shot /admin/system # full route -> /tmp/webui-shot.png
lp-shot /admin/system /tmp/x.png 12 ".sys-strip" # just one element, crisp
```
Use it (and read the PNG) to self-check UI work instead of assuming it looks right or
asking the user to look. Skip it for purely backend/non-visual edits. If `lp-shot`
isn't present, fall back to asking the user for a screenshot.
Every route except `/` is behind the WebUI login, so `lp-shot` needs a session in
the environment — `LP_SHOT_TOKEN` (the `libreportal_token` cookie) or
`LP_SHOT_USER` + `LP_SHOT_PASS`. Without one it stops with that message rather
than screenshotting the sign-in box. Only the maintainer sets those: ask them to
export it (or to run the `lp-shot` command for you) — never go looking for the
credentials yourself. `lp-shot --help` lists the rest (`LP_SHOT_URL`,
`LP_SHOT_VIEWPORT`, `LP_SHOT_SCALE`, …).
Testing against the live WebUI means updating the running install, not just the
repo: `/libreportal-containers/libreportal/frontend/` is bind-mounted into the
container, so copying changed files there (owned `dockerinstall:dockerinstall`)
takes effect on the next browser load — no rebuild or restart. Diff before you
copy; the live tree can hold changes the repo doesn't.