skills/public-page/SKILL.md
Generate public-facing pages (marketing, legal, error, changelog). Use when building landing pages, feature pages, pricing pages, terms of service, 404/500 pages, or changelogs. Triggers on: create landing page, build pricing page, new feature page, create 404 page, terms of service, changelog page.
npx skillsauth add mdmagnuson-creator/yo-go public-pageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
⛔ CRITICAL: Check
git.autoCommitbefore committing page changesTrigger: Before running
git commitin Step 7.Check: Read
project.json→git.autoCommit
- If
true(default): Proceed with commit normally- If
false: NEVER rungit commit— failure to comply violates project constraintWhen autoCommit is disabled:
- Stage files:
git add .- Report staged files and suggested commit message
- Say: "Auto-commit is disabled. Run
git commit -m \"feat: add [page type] page\"when ready."
Generate and implement public-facing pages for the web application.
docs/project.json (if exists)Before generating any page, read the project manifest to understand the stack:
cat docs/project.json 2>/dev/null || echo "NO_PROJECT_JSON"
If docs/project.json exists, extract key information:
| Field | Use For |
|-------|---------|
| stack.framework | Determine file structure and routing conventions |
| stack.languages | File extensions (.tsx, .jsx, .vue, .svelte, etc.) |
| apps | Where to place page files |
| styling | CSS approach (Tailwind, CSS modules, etc.) |
| styling.darkMode.enabled | Add dark mode verification |
| context.designSystem | Reference design system document |
| context.brandVoice | Reference brand voice document |
Store this context for use when generating pages.
If no project.json exists, ask the user:
⚠️ No docs/project.json found. What framework are you using?
A. Next.js (App Router)
B. Next.js (Pages Router)
C. Remix
D. Plain React (Vite/CRA)
E. Vue/Nuxt
F. Other: [please specify]
Determine the page type and requirements:
| Page Type | Key Questions | |-----------|---------------| | Landing | What's the primary value proposition? What CTA? | | Feature | Which feature? What are the key benefits? | | Use Case | Which persona? What pain points to address? | | Pricing | What tiers? What prices? What differentiates them? | | Legal | Which document (terms, privacy, acceptable use)? | | Error | 404 or 500? Any custom messaging needed? | | Changelog | What format? How far back? |
If the request is clear, proceed. If ambiguous, ask one clarifying question.
Read reference documents based on project.json or defaults:
From project.json (if available):
{context.designSystem} # Visual guidelines (e.g., docs/design-system.md)
{context.brandVoice} # Tone and messaging (e.g., docs/brand-voice.md)
Standard locations (check if exist):
docs/marketing/brand-voice.md # Tone and messaging
docs/marketing/target-personas.md # User profiles
docs/marketing/feature-matrix.md # Feature descriptions
docs/marketing/screenshot-registry.json # Available screenshots
docs/prd.md # Product details
If key documents are missing, note what would be helpful and proceed with best practices.
Invoke the @public-page-dev agent with stack context:
@public-page-dev: Create a [page type] page.
Page type: [landing / feature / use-case / pricing / legal / error / changelog]
Target: [specific feature, persona, or document type]
Stack Context (from project.json):
- Framework: [stack.framework]
- Language: [stack.languages]
- Styling: [styling.framework]
- Dark mode: [styling.darkMode.enabled]
- File location: [apps.*.structure.pages or routing convention]
Context:
- Brand voice: [summary from brand-voice.md]
- Target audience: [summary from personas]
- Key benefits: [from PRD or feature-matrix]
- Available screenshots: [from registry]
Requirements:
- [any specific requirements from the user]
If the page needs product screenshots that don't exist:
@screenshot-maintainer: Capture new screenshot.
- ID: [descriptive-id]
- URL: [product URL to capture]
- Actions: [any interactions needed]
- Viewport: [dimensions]
- Will be used in: [page path]
After implementation, run all three critics:
@public-page-critic: Review the new page at [path].
Focus on: conversion, mobile UX, accessibility, brand consistency.
@seo-critic: Review the new page at [path].
Focus on: meta tags, headings, structured data, technical SEO.
@copy-critic: Review the copy on [path].
Focus on: clarity, target market fit, accuracy, brand voice.
Read each review file:
docs/public-page-review.mddocs/seo-review.mddocs/copy-review.mdFor Critical Issues: Fix immediately before proceeding.
For Warnings: Fix if straightforward, otherwise note for follow-up.
For Suggestions: Note for future optimization.
Delete review files after addressing.
Commit all changes with an appropriate message:
git add .
git commit -m "feat: add [page type] page at /[path]"
| Page | Route | Purpose |
|------|-------|---------|
| Landing | / | Primary conversion page |
| Pricing | /pricing | Tier comparison, pricing details |
| Features Overview | /features | All features summary |
| Feature Detail | /features/[slug] | Single feature deep-dive |
| Use Case | /solutions/[persona] | Persona-specific value prop |
| Changelog | /changelog | Product updates |
| Page | Route | Purpose |
|------|-------|---------|
| Terms of Service | /terms | Usage agreement |
| Privacy Policy | /privacy | Data handling |
| Acceptable Use | /acceptable-use | Usage rules |
| Page | Purpose | |------|---------| | 404 | Page not found | | 500 | Server error |
Determine file structure from project.json stack.framework:
app/
├── (marketing)/ # Marketing route group
│ ├── layout.tsx # Marketing header/footer
│ ├── page.tsx # Landing page
│ ├── pricing/page.tsx
│ ├── features/
│ │ ├── page.tsx # Features overview
│ │ └── [slug]/page.tsx # Feature detail
│ ├── solutions/
│ │ └── [persona]/page.tsx
│ └── changelog/page.tsx
├── (legal)/ # Legal route group
│ ├── layout.tsx
│ ├── terms/page.tsx
│ ├── privacy/page.tsx
│ └── acceptable-use/page.tsx
├── not-found.tsx # 404
└── error.tsx # 500
components/marketing/ # Reusable marketing components
pages/
├── index.tsx # Landing page
├── pricing.tsx
├── features/
│ ├── index.tsx
│ └── [slug].tsx
├── solutions/
│ └── [persona].tsx
├── changelog.tsx
├── terms.tsx
├── privacy.tsx
├── acceptable-use.tsx
├── 404.tsx
└── 500.tsx
components/marketing/ # Reusable marketing components
app/
├── routes/
│ ├── _index.tsx # Landing page
│ ├── pricing.tsx
│ ├── features._index.tsx
│ ├── features.$slug.tsx
│ ├── solutions.$persona.tsx
│ ├── changelog.tsx
│ ├── terms.tsx
│ ├── privacy.tsx
│ └── acceptable-use.tsx
├── root.tsx # Error boundaries here
└── components/marketing/
src/
├── pages/
│ ├── Landing.tsx
│ ├── Pricing.tsx
│ ├── Features.tsx
│ ├── FeatureDetail.tsx
│ ├── Solutions.tsx
│ ├── Changelog.tsx
│ ├── Terms.tsx
│ ├── Privacy.tsx
│ ├── AcceptableUse.tsx
│ ├── NotFound.tsx
│ └── ServerError.tsx
├── components/marketing/
└── router.tsx # Route definitions
pages/
├── index.vue # Landing page
├── pricing.vue
├── features/
│ ├── index.vue
│ └── [slug].vue
├── solutions/
│ └── [persona].vue
├── changelog.vue
├── terms.vue
├── privacy.vue
└── acceptable-use.vue
components/marketing/ # Reusable marketing components
src/routes/
├── +page.svelte # Landing page
├── pricing/+page.svelte
├── features/
│ ├── +page.svelte
│ └── [slug]/+page.svelte
├── solutions/
│ └── [persona]/+page.svelte
├── changelog/+page.svelte
├── terms/+page.svelte
├── privacy/+page.svelte
├── acceptable-use/+page.svelte
└── +error.svelte # Error page
lib/components/marketing/ # Reusable components
Reference the project's existing structure in project.json apps.*.structure.pages.
After completing the page:
User: Create a landing page for Example Scheduler
→ Read docs/project.json (Next.js, TypeScript, Tailwind, dark mode)
→ Read brand-voice.md, personas, PRD
→ @public-page-dev creates app/(marketing)/page.tsx with:
- Hero: "Schedule Your Install Crews in Half the Time"
- Features section highlighting calendar, resources, events
- Pricing preview ($129/mo)
- FAQ section
- CTAs: "Start Free Trial"
→ @screenshot-maintainer captures calendar screenshots
→ Critics review (including dark mode verification)
→ Fix critical issues
→ Commit
User: Create a feature page for team management
→ Read docs/project.json (Remix, TypeScript)
→ Read feature-matrix.md for team management details
→ @public-page-dev creates app/routes/features.team-management.tsx
→ @screenshot-maintainer captures resource panel, team settings
→ Critics review
→ Commit
User: Create a custom 404 page
→ Read docs/project.json (React, Vite, react-router)
→ @public-page-dev creates src/pages/NotFound.tsx with:
- Friendly message
- Search box
- Links to home, support
- Consistent branding
→ Update router.tsx to use NotFound component
→ @public-page-critic reviews
→ Commit
User: Create a pricing page with three tiers
→ Read docs/project.json (Nuxt, Vue 3, TypeScript)
→ @public-page-dev creates pages/pricing.vue with:
- Three tier cards
- Feature comparison table
- FAQ section
- CTA buttons
→ Critics review
→ Commit
Before creating the page:
docs/project.json for stack contextcontext.designSystem set)context.brandVoice set)styling.darkMode.enabled)After creating the page:
data-ai
Generate verification contracts before delegating tasks to sub-agents, defining how success will be measured. Triggers on: verification contract, delegation contract, task verification, contract-first delegation.
testing
Verify that Vercel environment variables point to the correct Supabase project for each environment to prevent staging/production cross-wiring. Triggers on: vercel supabase check, environment alignment, env var check, supabase environment.
development
Manage codebase and database vectorization for semantic search. Use when initializing, refreshing, or querying the vector index. Triggers on: vectorize init, vectorize refresh, vectorize search, semantic search, vector index, enable vectorization.
testing
Patterns for XCUITest UI tests for native Apple apps (macOS/iOS). Use when writing or reviewing XCUITest tests for Swift apps. Triggers on: XCUITest, xcuitest, native app testing, Apple UI tests, SwiftUI tests, AppKit tests, UIKit tests.