# wutzcalc Festival drink-sale tracker. See [PLAN.md](PLAN.md) for architecture, [NOTES.md](NOTES.md) for the original requirements, and [TODO.md](TODO.md) for deferred work. ## Toolchain setup Requires Node.js 20+ and pnpm 9+. Native SQLite bindings install from prebuilt binaries on x86_64 / arm64 — no compiler needed for most setups. ### Nix (Linux / macOS) ```sh nix develop # node 20, pnpm, sqlite, build deps ``` ### Debian / Ubuntu ```sh # Node 20 from NodeSource curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs sudo corepack enable # provides pnpm # Only needed if a prebuilt better-sqlite3 binary is unavailable for your arch sudo apt install -y build-essential python3 ``` ### Windows Install Node.js 20 LTS via the official MSI from (this also installs the optional "Tools for Native Modules"). Then in PowerShell: ```powershell corepack enable # provides pnpm ``` Use PowerShell to set env vars on the same line, e.g. `$env:ADMIN_PASSWORD="changeme"; pnpm dev:server`. ## Dev ```sh pnpm install ADMIN_PASSWORD=changeme pnpm dev:server # http://localhost:3000 pnpm dev:client # http://localhost:5173 (proxies /api, /admin) ``` Open `http://localhost:5173/` for the tablet UI and `http://localhost:5173/admin.html` for the backoffice. ## Production build ```sh pnpm install pnpm build ADMIN_PASSWORD=... DB_PATH=/var/lib/wutzcalc/wutz.db node server/dist/index.js ``` Single Node process serves the API, both client entries (`/` tablet, `/admin` backoffice), and writes to one SQLite file. ## Env vars - `PORT` (default `3000`) - `HOST` (default `0.0.0.0`) - `DB_PATH` (default `./wutz.db`) - `ADMIN_PASSWORD` (**required** for backoffice login)