Initialize Git publishing
SEO_BLOG_SITE_SLUG='<slug>' \
SEO_BLOG_SITE_ORIGIN='<origin>' \
npx --yes @wotaso/seo-blog-admin-cli init-static --site-slug '<slug>' --site-origin '<origin>' --content-dir '<content-dir>' --extension mdx
Run this once inside the tenant website repository. It writes seo-blog.config.json and a scheduled GitHub workflow; review those generated files before committing. This initializer is not a dry run.
Scheduled runner health heartbeat
SEO_BLOG_PUBLISH_TOKEN='<tenant-token>' \
SEO_BLOG_SITE_SLUG='<slug>' \
SEO_BLOG_SITE_ORIGIN='<origin>' \
npx --yes @wotaso/seo-blog-admin-cli health --config seo-blog.config.json --mode static --site-slug '<slug>' --site-origin '<origin>'
Run this from the real scheduled runner after seo-blog.config.json contains the selected connector configuration and the listed secrets are loaded. It reports configuration readiness, not a live article. The dashboard expires readiness at the returned deadline, with a 36-hour fallback when no deadline is available.
Fields and data model
- Content directory and file extension are explicit
- Frontmatter can match the framework schema
- Generated image data can be materialized under public assets
Canonical and route
The host framework exclusively owns routes, canonical tags, and the sitemap. The integration does not create a second hosted blog or a client-side content dependency.
Known limits
- The project must render the generated frontmatter and MDX syntax.
- A Git commit is not proof of a successful deploy.
- Build and sitemap behavior remain project-specific by design.
Recovery
- Review generated config and workflow in a pull request first.
- Test the publisher with the same Node version as CI.
- Fix generated content after a build failure and never print the publishing token.