Development
The app is its own project in src/, so every Bun command runs from there; the landing page is
promo/. Compose runs from the repo root.
cd src
bun install
bun run format:check && bun run lint && bun run typecheck && bun run typecheck:tests && bun run quality && bun run test
bun run build
bun run quality includes the dependency audit. bun run audit runs it separately, with verified temporary
advisory exceptions recorded in rulebook/dependencies.md and their regression checks run first.
Browser tests
The browser tests (bun run test:e2e) run against the running stack. On an install that signs in through an
identity provider, run bun run e2e:login once and sign in in the window it opens: the tests that need your library
then run as you instead of skipping. It saves a live session to src/e2e/.auth/ (kept out of git; set
E2E_STORAGE_STATE in your shell to put it elsewhere), so keep that file private and run it again when it expires.
To run them against a throwaway stack instead (no sign-in, no host ports, nothing kept on disk, two synthetic Bibles),
run bun run test:e2e:stack from src/, optionally followed by -- e2e/<file>.e2e.ts --project=chromium. It builds
and removes its own Compose project, bibliup-e2e-local (set E2E_PROJECT=bibliup-e2e-<name> in your shell to name
it differently), so it can run beside your own stack. The first run downloads browsers (about 600 MB, cached in a
volume).
Good to know
- The service worker ships in the production image only, so offline reading does not work under
bun run dev. - Chat's PDF Download needs Chromium:
bunx playwright install chromiumfromsrc/on Windows or macOS, Debian'schromiumat/usr/bin/chromiumon Linux. src/components/ui/is the pristine shadcn/ui registry; customise insrc/components/ui-ext/instead.- The reasoning behind each part of the code is in AGENTS.md, which maps it to rulebook/ and the skills under .claude/skills/.