--- name: "project-templatebot-verify-skill" title: "templatebot verify skill" description: "Project-local .cursor/skills/verify-templatebot drives the Vite marketplace over CDP; Feature Map includes 30-per-page D1 browse, browse card coat blend, unlisted /data analytics, PostHog funnel, marquee, pay-to-install, MCP publish, live X embeds, multi-bot collect progress/skip/claim + master-detail publish, viewport presets" type: "project" category: "agents" tags: ["project", "templatebot", "verification", "cli"] related: ["[[feedback-pstack-verification]]"] sources: ["https://github.com/duyet/templatebot"] aliases: ["verify-templatebot"] --- templatebot ships `.cursor/skills/verify-templatebot` (CLI lever + Feature Map + one proven drive). Primary surface is the local Vite/Cloudflare marketplace driven over Chrome DevTools Protocol via `control-templatebot.mjs`. **Why:** `main` had no Playwright/Cypress suite and no verify skill. Agents need a composable launch/doctor/drive loop before feature ships. **How to apply:** - Use `control-templatebot.mjs` (`launch` / `doctor` / `goto` / drive / `cleanup`; `--json`, `--dry-run` on launch/stop/cleanup). - Feature map covers browse (incl. `browse-page` 30-per-page from D1 on `/` and `/templates`; `browse-marquee` above the footer; coat-blend card surfaces via `surface-bot-card` / `botCardTint` in light+dark), preview (incl. `preview-scroll`), submit (incl. resubmit / history / X collect; post-submit Leaderboard vs Paid Template equal choices), leaderboard, dashboard, unlisted `/data` analytics (`features/data.md`), PostHog official JS funnel (`VITE_POSTHOG_PROJECT_TOKEN` env-only), pay-to-install (Sale; email + `/unlock/{token}`; `paid-demo.sql` / Night Counsel), MCP publish (`features/mcp-publish.md`), and live X embeds with corner clip (`features/on-x-posts.md` `on-x-embed-corners`: `#15202b` fill + 12px `--background` radial `::after` caps). Viewport presets: mobile 375×812 / desktop 1280×800. - Proven drive: browse → Harvey search → Harvey Specter preview → `Close --exact`, then assert `scrollY` holds (no jump-to-top). - `Close` needs `--exact` (Harvey card name includes `disclose`). Hero Browse is role button; clear search via `goto /templates`. - Live paywall copy is `Checkout unlocks the install link` (not `unlock the install link`); `/unlock/{token}` sets `tb_unlock` so unpaid recipes must run first; `/privacy` shares terms email+unlock copy (`docs-terms`). - Local vite skip HTTP→HTTPS redirect on loopback so doctor sees real HTML. - Later ships: `/poteto-mode` plus this skill. Refresh with `/maintain-verification-skill` on ship. Cloud agents only; no git worktrees. Generic loop: [[feedback-pstack-verification]]. **2026-09-03:** Squash-merged [#65](https://github.com/duyet/templatebot/pull/65) (`fd72151`) after [#45](https://github.com/duyet/templatebot/pull/45) `/data` ship — Feature Map now covers unlisted `/data`, PostHog funnel, multi-bot X collect on main. **2026-09-03:** Squash-merged [#83](https://github.com/duyet/templatebot/pull/83) (`827735a`, closes #79) — Collecting N of M / skip-or-claim already-listed; then [#80](https://github.com/duyet/templatebot/pull/80) (`4bed5db`, closes #73) master-detail picker; [#85](https://github.com/duyet/templatebot/pull/85)/[#86](https://github.com/duyet/templatebot/pull/86) folded verify map (Publish N bots, Skip rows, marquee above FOOTER not H1). **2026-09-03:** Squash-merged [#76](https://github.com/duyet/templatebot/pull/76) (`4aeac0a`, closes #70) — `/on-x` and homepage On X use official live X/Twitter embeds (`widgets.js`), not homemade URL cards. **2026-09-03:** Squash-merged [#82](https://github.com/duyet/templatebot/pull/82) (`e1db213`, closes #74/#75) — Deploy applies remote D1 migrations before wrangler deploy; submit/`/data`/MCP hide SQLITE dumps; Feature Map notes migrate-on-deploy + SQLITE-hide. **2026-09-03:** Squash-merged [#62](https://github.com/duyet/templatebot/pull/62) (`bcbb2f4`) — indexed Top 5 Grok Bots roundup from kloss_xyz (`/blog/26-grok-bots`); Feature Map `kloss-26-grok-bots.md` shipped in the same PR. **2026-09-03:** Squash-merged [#81](https://github.com/duyet/templatebot/pull/81) (`8cc9481`, closes #69) — `/api` and `/mcp` are interactive product pages (try-it route/tool cards, copy curl, live 401 / discovery JSON); Feature Map `docs-api-mcp.md` shipped in the same PR. **2026-09-03:** Squash-merged [#88](https://github.com/duyet/templatebot/pull/88) (maintain-verification after live drive on default VM; folds #82 migrate-on-deploy / SQLITE-hide plus post-#78 footer marquee map honesty). **2026-09-03:** Squash-merged [#103](https://github.com/duyet/templatebot/pull/103) (`cfcffff`, maintain-verify after #101) — browse paging recipes proven live: verification-only `features/fixtures/browse-page.sql` (31 rows), Next/Previous are links when enabled, page-2 proof via count line / `page=2` (not Harvey text/marquee), out-of-range clamps to last page, invalid `page` omits param. **2026-09-03:** Squash-merged [#101](https://github.com/duyet/templatebot/pull/101) (`438429a`) — public `/` and `/templates` page at 30 from D1 (`LIMIT`/`OFFSET` + count); Feature Map `browse-page` shipped in the same PR. **2026-09-04:** Squash-merged [#107](https://github.com/duyet/templatebot/pull/107) (`a0cdd78`) — clip X embed rounded-corner canvas leak; Feature Map `on-x-embed-corners` shipped in the same PR. **2026-09-04:** Squash-merged [#108](https://github.com/duyet/templatebot/pull/108) (`80a4c81`, maintain-verify after #104) — preview dialog locked to `sm:max-w-xl` (576px / ~351px inset at 375); chrome nav MCP leftover corrected to API; demo Buy empty-Dodo alert aligned with pay-to-install.