- Merge two-bar header into single nav bar: remove social icons top bar,
move search + cart icons next to hamburger menu
- Add /subscribe page with email signup form
- Fix blog images by restoring Squarespace CDN in next.config remotePatterns
- Compress footer into 4-column link layout, remove logo block
- Update Cynthia Trenshaw Poetry link to cynthiatrenshaw.com
- Add local images for homepage, about, IYOS, and artwork pages
- Add /wisdom-words page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The env_file is only available at runtime, not during docker build.
Build args need explicit values in docker-compose.yml for NEXT_PUBLIC
vars to be inlined into the client bundle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
NEXT_PUBLIC_* vars must be available at build time to be inlined
into the client JS bundle. Added NEXT_PUBLIC_PAYPAL_CLIENT_ID as
a Docker build arg so the PayPal checkout button works in the browser.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Configure images.localPatterns to allow /api/assets/** with query strings
- Add /app/.next/cache as tmpfs for image optimization cache (read-only container)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Next.js image optimizer blocks internal Docker URLs due to SSRF
protection (private IP resolution). Instead, proxy assets through
/api/assets/[id] which fetches from internal Directus URL server-side.
This bypasses both Cloudflare Access and SSRF protection since the
<Image> src is a same-origin path, not an external URL.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
NEXT_PUBLIC_ vars need to be set both at build time (client bundle)
AND at runtime (server-side rendering in standalone mode).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Directus CMS is behind Cloudflare Access, which blocks the Next.js
image optimizer from fetching assets. Route image requests through the
internal Docker network (http://katheryn-cms:8055) instead.
- Add NEXT_PUBLIC_DIRECTUS_ASSET_URL/TOKEN env vars for client components
- Use DIRECTUS_INTERNAL_URL for server-side Directus API calls
- Convert store detail page from client to server component (data
fetching now happens server-side, not in browser)
- Add internal Docker hostname to Next.js remotePatterns
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migrated from /root/.katheryn_credentials to the new organized
/opt/secrets/ directory structure. Symlinks ensure backward compat.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use env_file referencing /root/.katheryn_credentials for all secrets
- Remove inline secrets from environment block (PayPal, SMTP, store token)
- Add directus_katheryn-internal network for internal CMS access
- Add container security: read_only, cap_drop ALL, no-new-privileges
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Parse Squarespace WordPress XML export and extract all blog posts
- Create blog listing page with posts grouped by year
- Create individual blog post pages with full content
- Add social sharing, prev/next navigation, related posts
- Configure Next.js for Squarespace CDN images
- Add Tailwind typography plugin for prose styling
- Include 357 artwork thumbnails from Airtable
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>