📚 Official documentation for the WordPress Starter Kit by SolidBunch
This repository is the source of truth for all Starter Kit documentation
starter-kit-foundation— the framework corestarter-kit-theme— WordPress theme built on Foundation
Docs here are converted to Gutenberg block markup and published to the Starter Kit's own
WordPress site (as the doc-page custom post type, not generic Pages) by the sync tooling in
scripts/. Two ways it runs:
- Automatically —
.github/workflows/publish-docs.ymlruns on every push tomainordevelop: an offline test suite gates a live publish.mainpublishes to the production site (starter-kit.io),developto the development site (develop.starter-kit.io) — same split as the app repos' own dev/prod deploys (seeci-cd-deployments.md). - By hand — from a local checkout, for previewing changes before they're pushed (see
scripts/README.mdfor the full CLI walkthrough).
Sync is one-way: Markdown here is the source of truth. An edit made directly in WordPress is
overwritten on the next push — see scripts/README.md's "One-way sync" section if you have
WP admin access.
The workflow picks its target by branch via a GitHub Environment (environment: on the
sync job) — main → production, develop → development — so the same three secret
names can hold different values per branch, same idea as the app repos' GitLab CI
environment-scoped variables.
To make the automatic pipeline work, in the GitHub repo set:
-
Settings → Environments → New environment — create two:
productionanddevelopment. -
For each environment, add all three secrets (environment secrets, not repository secrets — that's what makes the same name resolve differently per branch):
Secret productionvaluedevelopmentvalueNotes WP_BASE_URLhttps://starter-kit.iohttps://develop.starter-kit.ioMust be https://unless the target's WordPressenvironment_typeislocal— Application Passwords are rejected over plain HTTP otherwise.WP_USERa dedicated user's login, assigned the docs-publisherrole, on that site— See "Target site prerequisites" below — the role itself is created automatically. WP_APP_PASSWORDthat user's Application Password — Generated in wp-admin → Users → Profile → Application Passwords, one per site. -
Target site prerequisites (one-time, in wp-admin on each of the two sites):
starter-kit-addonactive — it creates thedocs-publisherrole automatically (readplus ten doc-page-scoped primitives:edit_doc_pages,edit_others_doc_pages,edit_published_doc_pages,edit_private_doc_pages,publish_doc_pages,read_private_doc_pages,delete_doc_pages,delete_others_doc_pages,delete_published_doc_pages,delete_private_doc_pages— explicitly notedit_pages/edit_published_pages/publish_pages/edit_others_pagesor any other core Page capability, so it cannot touch core WP Pages, and explicitly notunfiltered_htmlormanage_options); the only manual step is assigning that role to a dedicated user- the role is created by the addon's activation hook, which does not fire when the plugin
is deployed by copying files onto a site where it is already active — after such a deploy,
reactivate it once on that site with
wp plugin deactivate starter-kit-addon && wp plugin activate starter-kit-addon(wp plugin activatealone is a no-op on an already-active plugin) - the
skt/v1/serialize-blocksREST endpoint present (starter-kit-addon) and thedoc-pagecustom post type registered under theskt/v1REST namespace
-
(Recommended for
production) Settings → Environments → production → Deployment protection rules — require a reviewer before amainpush actually publishes live, same recommendation as the app repos' "Protected environments" for their prod deploy. -
If a target isn't publicly reachable (e.g. a LAN-only staging box) — change
runs-on:on the workflow'ssyncjob to a self-hosted runner label; nothing else needs to change. -
(Recommended) verify your GitHub notification settings once — profile → Settings → Notifications → Actions — email-on-failure is opt-in, not a default.
No self-hosted runner is required for a publicly reachable target — this pipeline targets
GitHub-hosted ubuntu-latest runners out of the box. Full detail, edge cases, and the local CLI
usage all live in scripts/README.md.
- Fork this repository
- Create a new branch:
git checkout -b feature/your-feature-name - Edit or add a
.mdfile at the repo root, and updateindex.md's table of contents to match (add/rename/remove entries as needed — seeCLAUDE.mdfor the full convention) - Open a pull request