Development
Build and check doona locally. The app lives in Zakkaus/doona; these pages and their site live in Zakkaus/doona-docs.
Read the app's CONTRIBUTING.md before submitting changes. For tool versions, see Requirements.
Build the standard edition
From the doona app repository root:
pnpm install --frozen-lockfile
pnpm devThe development server uses the mock backend. Stop it before continuing with the build and checks:
pnpm build
pnpm check
pnpm check:sizeThe build writes dist/. check runs type checks, lint, translation and formatting checks, unit tests, and generated API checks. check:size measures the built output.
Build doona lite
From the same app repository root, after installing the root dependencies:
pnpm --dir apps/lite install --frozen-lockfile
pnpm --dir apps/lite build
pnpm --dir apps/lite checkThe build writes apps/lite/dist/. Use pnpm --dir apps/lite dev to start its development server.
Run browser tests
From the app repository root:
pnpm e2e:install --with-deps
pnpm e2eThe first command installs the browsers and system dependencies. The second rebuilds the standard edition and runs Playwright tests.
For a live backend, set DOONA_API to its server root, supply DOONA_TOKEN through your shell environment if required, and run pnpm e2e:live. This runs the accessibility, mobile and keyboard specifications. Keep credentials out of command history and reports.
Live tests reject backend overrides in fixture storage and block control requests, including DNS queries. Ordinary pnpm e2e rejects DOONA_API unless you set DOONA_LIVE_OBSERVE=1; use pnpm e2e:live for the supported live-backend pass.
Capture screenshots and check the API
Run these tools from the app repository root after installing its dependencies.
- Screenshots: install Playwright's Chromium,
cwebpandimg2webp, then start a mock-backed preview. Runnode tools/screenshots.mjs <url> docs/screenshots, replacing<url>with the preview address. The tool writes localized pages, a palette sheet, an English theme gallery, phone strips, page-tour stills and a routing animation as WebP. - API contract: run
node tools/conformance.mjs http://router:9527, replacing the address with the backend's server root. It checks discovery, capabilities and read-only responses against the vendored contract, skipping mutating operations. If the backend requires authentication, pass the token from your shell environment with--token "$DOONA_TOKEN".
Package both editions
Build both editions first. Install GNU tar, gzip, Brotli and sha256sum, then run from the app repository root:
pnpm packageThe release/ directory contains the standard, lite, fonts and precompressed archives, plus SHA256SUMS. Archive names use package.json's version. pnpm package --git-version uses git describe --tags --always without a leading v.
Archive timestamps use SOURCE_DATE_EPOCH, or the HEAD commit time when it is unset.
Update API types
The contract source record identifies the vendored API contract. After updating that contract, run from the app repository root:
pnpm gen:api
pnpm checkThe generator writes types to src/api/types.ts.
Check this documentation site
From the documentation repository's root, install its dependencies and set DOONA_DIR to your app checkout so the checker can validate the app's documentation links:
pnpm install --frozen-lockfile
DOONA_DIR=/path/to/doona pnpm -s docs:check
DOONA_DIR=/path/to/doona pnpm -s test
pnpm docs:buildThe site build writes dist-docs/.
Find source files
Paths below are relative to the app repository root.
| Path | Purpose |
|---|---|
src/features/ | Pages, feature hooks and messages |
src/shell/ | Application shell, navigation and search |
src/ui/ | Shared components, themes and icons |
src/api/ | Client, backend profiles, adapters and generated types |
mock/ | Demo, preview and test backend |
src/store/ | Resource watching, cached reads and action hooks |
src/i18n/ | Translations and locale helpers |
contract/ | Vendored OpenAPI contract and its pin |
public/ | Static icons, manifest and service worker |
e2e/ | Browser tests |
tools/ | Build, packaging, conformance and screenshot tools |
install/ | Distribution packaging and installation recipes |
docs/ | App-side reference documents, including country flags and fonts |
node_modules/@fontsource-variable/ | Installed Noto Sans TC/SC font sources bundled by Vite |
See CHANGELOG.md for release notes.
Source: doona upstream, licensed under CC BY 4.0.
