The root cause of the schema mismatch was skipIfSchemaCurrent=true in
TinaCMS's syncProject() call, which caused TinaCloud to skip re-indexing
when it thought the schema SHA hadn't changed. This left TinaCloud with
a stale GraphQL schema missing the pages collection (PagesSeo type).
Fix: add an explicit curl step before the build that calls TinaCloud's
reset endpoint WITHOUT skipIfSchemaCurrent, forcing a full re-index.
Keep --skip-cloud-checks in the build command to avoid the circular
dependency (build failing because TinaCloud is still indexing).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
server/nginx.conf was never synced to the server — CI/CD only deployed
dist/. Add rsync step to copy nginx.conf before container restart.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TinaCloud requires _schema.json and _graphql.json to index branches.
Generated by running tinacms dev locally.
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>
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>