How to Add User Case Pages
Step-by-step instructions for marketing and content teams to safely add new SkillBoss user case pages without breaking the pSEO template.
This guide explains how to add a new user case page to the SkillBoss pSEO system without changing React code.
The current system is JSON-driven:
- Source file:
/content/use-cases/pseo-pages-v1.json - List page:
/use-cases - Detail page pattern:
/use-cases/[slug] - Rendering logic:
lib/use-case-pages.ts
If you follow this guide, you should only need to edit the JSON file.
What Happens When You Add a Record
Each object inside pseo-pages-v1.json becomes one public page.
Example:
{
"slug": "run-one-person-agency-ai-automation",
"title": "How to Run a One-Person Agency with AI Automation",
"meta": "You are a freelancer who wants agency-level output...",
"urlPrefix": "use-cases"
}
This will be rendered as:
/use-cases/run-one-person-agency-ai-automation
Important:
- The current implementation publishes all records under
/use-cases/[slug] urlPrefixis kept in the data for future expansion, but it does not currently change the public route
Required Fields
Every record must include these fields:
{
"slug": "unique-page-slug",
"title": "Page title / H1",
"meta": "Meta description",
"category": "Category label",
"before": "Pain point / current state",
"after": "Outcome after using SkillBoss",
"sections": [],
"steps": [],
"faq": [],
"related": [],
"heroImage": "https://...",
"heroAlt": "Accessible image description",
"ctaText": "Primary CTA copy",
"ctaUrl": "https://...",
"authority_citations": []
}
If one of these is missing, the admin preview validator should flag it.
Field Format Rules
slug
Rules:
- Must be unique across the whole file
- Use lowercase letters, numbers, and hyphens
- Do not use spaces
- Keep it descriptive and SEO-friendly
Good:
build-ai-sales-call-prep-system
Bad:
Build AI Sales Call Prep System
build_ai_sales_call_prep_system
sales
title
Rules:
- This becomes the page H1
- Keep it readable and specific
- Prefer “How to …” / “Build …” / “Monitor …” phrasing for search intent
meta
Rules:
- Write it like a real search snippet, not keyword stuffing
- Usually 120-160 characters is ideal
- Explain the outcome clearly
before and after
Rules:
beforeshould describe the painful current stateaftershould describe the improved future state after using SkillBoss- These fields are displayed near the top of the page, so they need to be concise and high-signal
sections
Format:
[
{
"heading": "Why Manual Work Breaks at Scale",
"content": "<p>HTML paragraph content here.</p>"
}
]
Rules:
headingbecomes anH2contentis HTML and is rendered directly- Use semantic HTML like
<p>,<ul>,<ol>,<a> - Do not paste broken HTML
steps
Supported shapes:
{ "name": "Step title", "text": "Step description" }
or
{ "title": "Step title", "description": "Step description" }
or
{ "title": "Step title", "content": "Step description" }
Recommendation:
- Prefer
name+textfor consistency
faq
Supported shapes:
{ "q": "Question?", "a": "Answer." }
or
{ "question": "Question?", "answer": "Answer." }
Recommendation:
- Prefer
q+afor consistency - Write 5 strong FAQs that answer real objections or search intent
related
Format:
[
{
"slug": "another-page-slug",
"title": "Related page title"
}
]
Rules:
- Prefer slugs that already exist in the same JSON file
- If a related slug does not exist, the UI will fall back to a safe related page, but this is not ideal
authority_citations
Format:
[
{
"source": "HubSpot",
"claim": "Teams using intent data see higher conversion rates",
"context": "Supports the argument about timing-based outreach"
}
]
Rules:
- Use credible sources only
- Each citation should support a specific argument in the page
- Best practice is to also include a real source URL in the section body when possible
Safe Workflow For Marketing
- Duplicate an existing good record in
pseo-pages-v1.json - Replace the content field-by-field
- Keep the same JSON structure
- Confirm the new
slugis unique - Confirm
related.slugreferences are real when possible - Upload the updated JSON into the admin preview screen
- Check validation output before asking engineering to publish
Admin Preview Checklist
Use the admin page:
/admin/use-cases
Before publish, confirm:
- Record count looks correct
- No validation issues
- Slugs are clean and unique
- Category breakdown looks reasonable
- The first slug preview matches expectation
Run the release-safe check from the repo root:
pnpm check:use-cases
That command verifies:
- JSON validation passes
- Every published
slugresolves through the shared adapter - Every page has render-safe title/meta/sections/steps/faq/citations
- Every public route is unique and follows
/use-cases/[slug]
Common Mistakes To Avoid
Do not:
- Change field names casually
- Mix multiple route strategies in one batch
- Use duplicate slugs
- Leave empty arrays for
sections,faq, orsteps - Put plain text into
sections.contentif it should be HTML - Add fake citations or unverifiable claims
- Assume
urlPrefixchanges the route today
Current Route Rule
Right now, all user case records are published under:
/use-cases/[slug]
Even if the JSON contains:
"urlPrefix": "industry"
the public page still renders at:
/use-cases/the-slug
If engineering later expands route families like /industry/[slug] or /templates/[slug], this document should be updated.
When To Ask Engineering For Help
Ask engineering before publishing if:
- You want a new section type that does not fit the current template
- You need a different route family
- You want custom schema markup
- You want per-page design changes
- The admin preview shows validation errors you do not understand
Quick Template
Use this starter object when drafting a new page:
{
"client": "skillboss",
"clientName": "SkillBoss",
"domain": "cases.skillboss.co",
"slug": "replace-this-slug",
"title": "Replace this title",
"meta": "Replace this meta description",
"category": "Replace this category",
"before": "Describe the painful current state.",
"after": "Describe the improved future state.",
"sections": [
{
"heading": "Why this problem matters",
"content": "<p>Write section content here.</p>"
}
],
"steps": [
{
"name": "Step 1",
"text": "Explain the first implementation step."
}
],
"ctaText": "Replace CTA text",
"ctaUrl": "https://www.skillboss.co",
"faq": [
{
"q": "Add a real question here?",
"a": "Add the answer here."
}
],
"related": [
{
"slug": "another-existing-slug",
"title": "Related page title"
}
],
"heroImage": "https://assets.skillboss.co/example-image.webp",
"heroAlt": "Describe the hero image",
"authority_citations": [
{
"source": "Trusted source",
"claim": "A specific claim",
"context": "Why this matters to the page"
}
],
"urlPrefix": "use-cases"
}
This is the safest way for non-engineers to add new records without breaking the template.