- Videos page now requires a shared password to access
- Login page repurposed as password entry (password: higgy2024)
- Auth state persisted in localStorage (remembers forever)
- Header shows Client Login / Log Out based on auth state
- Removed signup page (not needed with shared password)
- Password stored as SHA-256 hash (not plaintext)
To change the password:
printf 'newpassword' | sha256sum
Then update VALID_HASH in lib/auth.ts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reconstructed the site from static HTML export into a proper
Next.js 15 project with Tailwind CSS v4 and shadcn/ui components.
- Self-hosted all images (previously on Vercel Blob Storage)
- Added per-page SEO metadata, Open Graph tags, JSON-LD structured data
- Made phone number a clickable tel: link
- Added sitemap.xml and robots.txt generation
- Created Dockerfile (multi-stage build -> nginx static serve)
- Added docker-compose.yml with Traefik labels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>