audit-hosting
Audit a Hostinger web hosting account (Shared, Cloud and Agency plans) and report what needs attention: every plan and website,…
Step 7 (validate) of the Hostinger Headless flow. OPTIONAL quick gate before deploy: every prior stage already self-verifies, so this is a fast confirmation (instance live + backend API answers with seeded content) plus optional local preview and user sign-off. Skip the heavy
$ npx -y skills add hostinger/api-mcp-server --skill 07-validate --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/07-validateContext preview
The summary Claude sees to decide when to auto-load this skill.
Step 7 (validate) of the Hostinger Headless flow. OPTIONAL quick gate before deploy: every prior stage already self-verifies, so this is a fast confirmation (instance live + backend API answers with seeded content) plus optional local preview and user sign-off. Skip the heavy
name: headless-step-validate description: "Step 7 (validate) of the Hostinger Headless flow. OPTIONAL quick gate before deploy: every prior stage already self-verifies, so this is a fast confirmation (instance live + backend API answers with seeded content) plus optional local preview and user sign-off. Skip the heavy parts when nobody needs to approve."
> **Optional / fast.** Every stage before this one already verifies its own work (provision checks the > backend, content-model push checks the REST counts, frontend builds clean), and **deploy verifies the > live result**. So validate is **not** a re-run of all that — it's a quick confirmation, plus the > optional human preview/sign-off. **Skip Steps 3–4 (rebuild + approval) entirely** on an autonomous or > temp-domain run where no one is signing off; just do the two 10-second checks below and move on. Spend > time here only when a person wants to see it before it goes live.
**In:** project in `~/.hostinger/<domain>/src/`, `site.json`, `state.json`.
`provision.status == "completed"` **and** re-verify against the connector: `hosting_websites_list-setups { "domain": "<domain>" }`, exact-match the row → `completed`. Anything else → not ready; return to the instance barrier, don't deploy.
Hit the live API from `site.json` and confirm it answers **with the content the push created** — a 200 with an empty catalog means the push didn't land:
planned post count, and `GET {urls.rest_api}/media?per_page=1` → `X-WP-Total` matches the planned image count (more = duplicates).
`GET {urls.store_api}/products?per_page=100` → 200 with the seeded products and `prices` (minor units); count matches the plan. Don't test checkout while `woocommerce.payment_enabled` is `false`.
prices *(confirm against the store)*.
name/email/subject/message + CF7's hidden `_wpcf7*` fields — see `../04-content-model/wordpress/contact-form.md` §3) to `contact_form.feedback_url` and assert the JSON `status` is **`mail_sent`**. This is the one place a real send happens, so one test email reaches the owner — not several. `mail_failed` is a real finding: surface it to the user (CF7 is wired, but `wp_mail` delivery/SPF needs attention — a Hostinger mailbox on the domain is the most reliable recipient) and log it as an issue. A `validation_failed` means the test payload didn't match the form's fields — fix the field names in `site.json`, not the plugin. **Then check the honeypot:** POST a **second** throwaway submission with the same valid fields **plus** `contact_form.honeypot_field` **filled**, and assert the `status` is **`spam`** (no mail sent). Keep the real fields valid — CF7 validates **before** running the spam filter, so an invalid payload would return `validation_failed` and never reach the honeypot check. A `mail_sent` here means the `cf7-headless-spamguard` plugin isn't active — surface it and re-check its deploy.
Fail or counts off → fix content-model push before building against live data.
Frontend already produced a clean build; only redo this if you want a from-scratch guarantee before a human sign-off. Remove the build output and rebuild; a failed or incomplete build is a stop (no fixtures, placeholder copy or `.htaccess` in the output).
When someone wants to see it first: start the local preview (Astro: `npm run preview`; Next.js: `npx next start`), check desktop and mobile widths, navigation and a couple of key routes, and present it for **explicit approval**. If preview tooling is unavailable, give the user the command and URL. On an autonomous or temp-domain run, skip this — deploy will verify the live result anyway.
Then (after approval, or immediately if 3–4 were skipped): `state.json` → `stage: "deploy"`, fresh `updated_at`; leave `provision` unchanged.
Audit a Hostinger web hosting account (Shared, Cloud and Agency plans) and report what needs attention: every plan and website,…
Connect a custom domain to a website on Hostinger web hosting (Shared, Cloud or Agency plans) end to end: attach the domain to…
Deploy an existing project to a website on Hostinger web hosting (Shared, Cloud or Agency plans) and keep it deployed: picks the…
Orchestrator for the Hostinger Headless build flow — build and deploy a real website on the user's Hostinger account from a…
Connect step for the Hostinger Headless flow — verify Node, run the bootstrap (reach the Hostinger MCP server + OAuth sign-in),…
First build step of the Hostinger Headless flow, run right after connect. Works out where a given domain's build stands — is a…