Commit Graph

9 Commits

Author SHA1 Message Date
Jeff Emmett 321e3e3f75 fix: cap image sizes and increase memory limit to stop 502 crash loop
Next.js image optimization was generating 3840px images that caused the
container to exceed its 128MB memory limit, triggering repeated restarts.
Capped deviceSizes to max 1200px and bumped mem_limit to 256MB.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 16:17:58 -04:00
Jeff Emmett b0b50bb07c fix: add init:true to docker-compose for Node signal handling
CI/CD / deploy (push) Successful in 30s Details
Node.js as PID 1 in Docker doesn't handle signals properly,
causing intermittent clean exits (exit code 0) under the
traefik-public network. Using tini via init:true fixes this.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 12:19:05 -04:00
Jeff Emmett c7b97aa0cc ci: use internal registry (bypass Cloudflare upload limit)
CI/CD / deploy (push) Failing after 41s Details
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 10:47:08 -07:00
Jeff Emmett 630312c7ea Site restructure + admin panel for self-management
- Split page.tsx into server component + home-client.tsx (data-driven)
- Add /about page with extended biography, Art as Ritual, Art in Motion
- Add /admin panel (password-protected) for artworks, events, services CRUD
- Restructure nav: Home | Art | Services | Re Evolution Art | About | Contact
- Services now show "How it works" / "Who it is for" bullet points
- Gallery: featured artworks (large), grid, sold/private carousel, lightbox with metadata
- "Future Gatherings" renamed to "PULSAR"
- JSON data layer with auto-seed from hardcoded content (/data volume)
- Image upload API with file type validation (max 10MB)
- HMAC session auth (Web Crypto API, Edge-compatible)
- Docker: named volume xhivart-data, /data directory, ADMIN_PASSWORD env

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 02:37:05 +00:00
Jeff Emmett b377c9a3b1 Add Docker healthcheck to docker-compose.yml
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:49:22 -07:00
Jeff Emmett 4febc3b11d Replace Resend with Mailcow SMTP via nodemailer
- Swap resend SDK for nodemailer in contact form API route
- Update docker-compose.yml env vars: RESEND_API_KEY → SMTP_*
- Update package.json: resend → nodemailer dependency
- Remove Vercel deploy boilerplate from README

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 16:07:20 -07:00
Jeff Emmett 1e2ce584a0 Add xhiva.art domain to Traefik routing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 17:34:14 +00:00
Jeff Emmett 017a67e2a0 Add functional contact form with Resend email delivery
- Create /api/contact route that sends form submissions to xhivart@gmail.com
- Wire up ContactSection with state management, validation, and UX feedback
- Add loading, success, and error states to the contact form
- Use Resend SDK with reply-to set to sender's email for easy replies
- Add RESEND_API_KEY to docker-compose environment
- Fix dj-xhiva.jpg positioning to show top of photo

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:00:11 +00:00
Jeff Emmett d5efb63145 Initial xhivart.ch mirror site implementation
Complete single-page application mirroring xhivart.ch content:
- Hero section with Ximena Xaguar branding
- Ritual Art Alchemy section
- Services section (Crystal Therapy, Temazcal, Deep Integration)
- Re Evolution Art cultural platform section
- Testimonials section
- About section
- Contact form
- Responsive navigation with mobile menu
- Footer with social links

Styling:
- Custom CSS variables for brand colors
- Elegant typography with Cormorant Garamond and Montserrat
- Glassmorphism navigation
- Fade-in animations
- Service cards with accent colors

Deployment:
- Docker configuration with standalone output
- docker-compose.yml for Traefik integration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 01:30:30 +01:00