# Crussell Nail salon booking platform — Go 1.25 backend + SvelteKit 5 SPA + PostgreSQL 17 + Docker. Built for a UK sole-trader nail artist. Europe/London timezone only, UK phone format only, single-employee business. ## Features **Booking**: Self-service (customer), walk-in (admin), call-in (admin). Slot reservations prevent double-booking (4 TTL types). Guest accounts with GDPR-compliant anonymization. Service eligibility based on age + patch test validity. **Payments**: Square Terminal (in-person) + Web Payments SDK (online). Cash with change calculation. Gift cards (12-digit code or account balance). Saved cards for faster checkout. Tips on completed bookings. Refunds. All payment types: deposit, full, partial, balance, tip. **Gift Cards**: Multi-method purchase (cash, card machine, online card, giveaway). Inventory cards for stock management. 24-month rolling expiry. Idle account cleanup (2yr/5yr thresholds). Expired balance recovery with admin audit trail. Transaction audit log. Idempotency keys for purchases. **Scheduling**: Default weekly hours, holiday/exceptional groups, time blockers (one-off + recurring with cron). Lunch protection. Late-night lock (22:00–11:00). Admin schedule page (Google Calendar-style week view). **Admin**: Today page with interactive calendar grid. Booking management (create, edit, reschedule, approve, cancel). User management with customer relationship data (spend, visits, top services). Discount campaigns (time-based and milestone). Time blocker CRUD. Portfolio image upload with tag management. Gift card management. Business settings (VAT, gift card config). Notification queue with priority ordering. **Loyalty & Discounts**: 1 stamp per paid appointment (max 1/day). 10 stamps → 10% off next visit. Campaigns: time-based, per-user milestone, global milestone, anniversary. All discounts stack additively against original total. **Compliance**: GDPR Article 15 data export (async, 12h cache, 16-section JSON + PDF). Account deletion with external system scrubbing (S3, Square). Guest PII anonymized 6 months post-appointment. UK financial data retention (7 years). Gift card SPV/MPV VAT treatment configurable. **Frontend**: Portfolio gallery with tag/category filtering, multi-format images (AVIF/WebP/JPEG/JXL with WASM client-side encoding). MapLibre GL map on contact page. PhoneInput component with UK validation. CharCounter for long notes. **Infrastructure**: Docker Compose (postgres, backend, sabredav, nginx). Dev mock for Square payments (`//go:build dev`). RustFS dev storage, Cloudflare R2 for prod. SabreDAV CardDAV sync for profile photos. ## Limitations - **Single employee** — no multi-staff scheduling, no team management - **No email/SMS** — SMTP integration not wired; booking reminders, password resets, and notifications are UI-only - **No production S3/R2** — prod storage stubs return "not implemented" - **No social auth** — OAuth providers (Google, Microsoft, Facebook) not registered - **No dark mode, no PWA, no recurring bookings, no CSV export** - **Password reset flow exists backend-only — no frontend link** - **No error tracking/monitoring** — Sentry not configured ## Prerequisites | Tool | Version | |------|---------| | Docker & Docker Compose | >= 20.10 | | Go | >= 1.22 | | Node | >= 18 (npm) | | tmux | >= 3.0 | ## Getting Started ```bash cp .env.example .env # Edit .env — set POSTGRES_*, JWT_SECRET_KEY docker compose up --build -d ``` | Service | URL | |---------|-----| | Frontend | http://localhost | | API | http://localhost/api | | SabreDAV | http://localhost/dav | ### Local dev (tmux) ```bash ./local-dev-2.sh ``` Launches 4-pane tmux session: psql console, Go dev server, Svelte dev server, Rustfs logs. Seeds 20 users, 12 services, 43 bookings, guest accounts, time blockers, exceptional hours. Default logins (password: `password`): - Admin: `admin@example.com` - User: `user@example.com` ## Building & Testing ```bash cd backend && go build -o bin/backend ./main.go cd frontend && npm ci && npm run build cd backend && go test -tags "test,dev" -p 1 ./... # 633/636 passing, 3 skipped ``` ## Full Documentation Detailed architecture, schema, admin workflows, user journeys, and backlog in [obsidian/Crussell/](obsidian/Crussell/).