Documents the shift planning and closure/payroll modules (new tables,
routes, stores), the dark redesign, and the docker-compose-broken-host
workaround. Adds CLAUDE.md pointing agents at docs/. Translates README to
English and keeps host-specific infrastructure details out of the repo.
Ports two modules from the friend's Google Apps Script build (kept as
reference in gscript/) onto the TypeScript stack, rewritten cleanly against
this app's own data model rather than copied 1:1:
- Shift planning: weekly template (Sun-Thu evening, Fri/Sat two slots),
lazy idempotent generation per period (no cron needed), employee
signup/cancel with collision + capacity checks, admin calendar view with
slot editing and manual assignment.
- Month closure + payroll: employee confirms the month (blocked while a
shift is still open), admin locks and finalizes pay (base hours * rate +
tips/bonus/other), reopen to undo a premature lock, mark paid. Pay rates
are versioned by date, defaulting the first-ever rate to apply
retroactively to the employee's whole history.
- A shift left open more than 12h (forgotten clock-out) is auto-closed at
clock_in + 12h, checked lazily on read instead of a background job.
- Full dark, sharp-edged modern restyle (theme.css replaces tui.css) with
an amber accent, keeping every existing class name so no component
logic needed to change.
Backend test coverage (jest) for all three workflows: shift planning,
closure/payroll, and the forgotten-clock-out auto-close.
Google-SSO PWA for bistro employee clock-in/out, admin employee
management, and stats with CSV export. Express + SQLite backend,
React + Zustand frontend in the light-mono-tui design language.
Multi-stage Dockerfile, compose.yaml for image-based deploys, nginx
reverse-proxy template, and an OKF documentation bundle in docs/.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>