Generated lockfile on dev LXC (Node 20, npm 10). Dockerfile now uses
npm ci --omit=dev which requires the lockfile and is more deterministic
than npm install.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 7-step booking flow modal: Date → Session → Length → Location →
Contract → Payment → Confirm
- Step indicator bar with completed/active states and connector lines
- Per-step validation with inline error messages
- Option card selection pattern for steps 2, 3, 4
- Summary panel on step 7 with client contact fields
- POSTs to POST /api/bookings on final submit with success screen
- Book a Session button added to nav, hero CTA, and mobile nav
- Pricing pulled from siteConfig.booking.pricing when available
- Steps 3-6 have stub UI with comments marking which issue fills them
Closes#2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- New api/ service: Express + better-sqlite3, health check at GET /api/health,
POST /api/bookings stores sessions with all required fields
- Dockerfile with Alpine build deps for native sqlite3 module
- docker-compose.yml: api service with volume mounts for data, signed-contracts, contracts
- nginx.conf: proxy /api/ to api:3001; Immich regex locations remain higher priority
- .gitignore: exclude SQLite db file and signed PDFs from version control
Closes#1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Created self-hosted runner workflow for automatic deployment
- Deploys on push to main branch
- Builds and restarts Docker containers
- Includes health check verification
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Updated Immich base URL to immich.jerodrigged.com
- Senior Portraits: use all-seniors album
- Changed Engagements to Couples, use all-couples album
- Changed Families to Family or Friends, use families-or-friends album
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Check for existing local templates first
- Show available templates for debugging
- Allow manual template entry as fallback
- Fix template path handling
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Instead of hardcoding the template name, now searches for the
latest available Debian 12 template.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>