Commit Graph

3 Commits

Author SHA1 Message Date
Jeff Emmett 620f56429d feat: add admin video manager and dynamic video library
Switch from static export (nginx) to standalone Next.js server with API
routes. Admin can manage YouTube tutorial videos at /admin with a
separate password. Videos stored in JSON file persisted via Docker volume.
Also links Facebook page in CTA section.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 20:28:10 +00:00
Jeff Emmett 02074d43e4 feat: add password-gated video access for clients
- 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>
2026-02-10 20:00:25 +00:00
Jeff Emmett a7a626c66a feat: rebuild as Next.js App Router project
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>
2026-02-10 19:30:21 +00:00