- Add puppeteer + mime-types to devDependencies
- Integrate prerender.mjs into build script (runs after vite build)
- Add Linux/Docker-safe Chrome flags (--disable-setuid-sandbox, --disable-dev-shm-usage, --disable-gpu)
- Fix static server to strip query strings from URLs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Manual script (node scripts/prerender.mjs) that starts a local static
server, visits each route with Puppeteer, waits 3s for React to render,
and saves full HTML to dist/. Covers all static routes + blog posts.
Run after vite build when prerendering is needed. Requires puppeteer
installed (npm i -D puppeteer mime-types).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New script reads public/blog/posts.json at build time and outputs
public/sitemap.xml with all static routes + /blog/:slug entries,
each with lastmod from post dates or current date.
Build pipeline: sync-blog → generate-sitemap → tsc → vite build
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Converts existing server-side JSON blog posts to Markdown format with
YAML frontmatter so they appear in TinaCloud admin and are managed via git.
Also fixes sync-blog.mjs parseFrontmatter to support multi-line YAML lists
(TinaCMS writes hashtags as multi-line list items).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add tina/config.ts with full schema for all site sections
- Convert i18n from TypeScript to nested JSON (content/translations/)
- Update LanguageContext to import JSON with flattenObject utility
- Update dev/build scripts to run tinacms build
- Add sync-blog.mjs support for content/blog/*.md (TinaCMS posts)
- Update CI/CD with Tina env vars, remove blog rsync exclusion
- Add tina/__generated__/ to .gitignore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Exclude reviews.json from rsync --delete so deploy doesn't wipe it
- Show all reviews with rating >= 4 (not just those with text)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
React 19 + TypeScript SPA with Vite, mobile responsive fixes,
GitHub Actions CI/CD pipeline for automated deployment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>