Programmatic SEO · Claude · Neon Postgres · CDN · Next.js ISR · Voice DNA
The SEO pages that write themselves — and still sound like Atomic.
Every long-tail query your services page can't own has the same problem: it needs its own landing page. Industry-specific pain, use cases, proof — one generic page won't rank for all of it. Atomic Viral is the engine that fixes that at scale.
Yes, the copy is AI-generated. That's the point. Human-reviewed, Zod-validated, Voice DNA in the prompt — so it ships sounding like us, not like every other Claude page on the internet.
— No. 01
What you get
the end-state, before we built it
By the time you're done reading this, you'll know how Viral does five things:
- A real page per query. Every industry × use-case combo gets its own URL — hero, problem, POV, use cases, engagement, FAQ. No thin doorway pages.
- AI that sounds like Atomic. Voice DNA lives in the generation prompt — banned words, anti-patterns, short paragraphs. Not a post-hoc edit pass.
- An editorial gate. Zod validates structure. A human checks voice. Nothing goes live without both.
- Zero-downtime edits. Revise keeps the old JSON on the CDN while you patch in admin. Republish when ready.
- SEO on atomicbuild.com. Published JSON lands on a CDN; atomicbuild.com/industry-learn/[slug] renders it with native layout, canonical, and Open Graph — no rebuild.
Cost: internal tooling. Claude API usage per batch. Neon free tier. CDN serves JSON to atomicbuild.com — visitors never hit the database.
— No. 02
The loop
what you'll do, every time
- Generate — pick use case + industries, Claude writes 6 sections per page (Zod-validated)
- Discover — let Claude propose topics that don't overlap existing slugs
- Review — draft → edit → approve in the admin panel
- Publish — upload JSON + manifest to CDN; webhook revalidates atomicbuild.com
- Revise — edit live pages without taking them offline
— No. 03
The long-tail problem
one services page can't rank for everything
We wanted to own queries like "AI workflow automation for logistics" and "AI product studio for fintech." Each one needs its own page — specific pain, specific language, specific proof. A single services page can't do that. Hiring ten copywriters wasn't the move either.
— No. 04
Generic AI copy
sounds like every other page on the internet
You can't prompt Claude with "write me an SEO page about fintech" and ship whatever comes back. The output drifts. It reaches for "delve" and "leverage." It reads like a template. We needed guardrails baked into generation — not a folder of Google Docs and good intentions.
— No. 05
Publishing at scale
200 pages is an ops problem, not a writing problem
Which pages are drafts? Which are live? Did we already cover that angle? How do you fix a published page without a downtime window? We needed a system with status, manifests, and revise flows.
“The SEO problem isn't that AI can't write. It's that most AI pages never leave the draft folder.”
— No. 06
Batch generation with Claude
pick combos, hit generate
Select a use case and industries. Claude writes each page against a system prompt that embeds our Voice DNA — writing style, banned vocabulary, anti-patterns. Output is structured JSON, validated with Zod before it touches the database. If the schema doesn't match, it fails loud.
# Combo mode: one page per use-case × industry pair
POST /api/admin/seo-pages/generate
useCaseSlug: ai-workflow-automation
industrySlugs: [logistics, fintech, healthcare]— No. 07
Topic discovery
no duplicate angles
Give Claude an industry and a page count. It reads every existing slug, title, and topic summary in Neon, then proposes angles we haven't covered. Discovery mode is how we keep scaling without stepping on our own URLs.
— No. 08
Draft → review → publish
the editorial gate
Pages land as drafts in Neon Postgres. Editors patch in the admin panel, then publish. Publishing uploads pages/{slug}.json and updates manifest.json on the CDN — then fires a webhook to atomicbuild.com/api/revalidate so the next request regenerates the page. No redeploy, no rebuild.
publish → CDN pages/{slug}.json
→ CDN manifest.json (append slug)
→ POST atomicbuild.com/api/revalidate { slug }
request → /industry-learn/{slug} fetches JSON from CDN (ISR)— No. 09
CDN distribution
JSON on the edge, HTML on atomicbuild.com
Viral is the factory; the CDN is the handoff. On publish, structured JSON — hero, problem, POV, use cases, engagement, FAQ — goes to cdn.atomicbuild.com/viral/seo-pages/. Two files matter: manifest.json lists every published slug; pages/{slug}.json holds the page content validated by Zod.
CDN layout
manifest.json → { publishedSlugs: [...] }
pages/{slug}.json → { hero, problem, pov, useCases, ... }atomicbuild.com reads SEO_CONTENT_CDN_URL at runtime. lib/seo/cdn-content.ts fetches the manifest and individual page JSON with ISR (revalidate every 300s). Cache tags (seo-page:{slug}, seo-manifest) let the revalidate webhook invalidate exactly one page — or the whole manifest when a new slug ships.
Without SEO_CONTENT_CDN_URL (local dev), the site falls back to content/seo-pages/*.json on disk. Production always points at the CDN.
— No. 10
Industry Learn on atomicbuild.com
same slug, different domain — SEO authority stays here
viral.atomicbuild.com/ai-workflow-automation-for-logistics is the preview. atomicbuild.com/industry-learn/ai-workflow-automation-for-logistics is what Google indexes. Same slug, different path prefix — atomicbuild consumes JSON from the CDN and re-renders with its own components, not injected HTML.
- app/industry-learn/[slug]/page.tsx — fetches LandingPageContent via getLandingPage(), renders HeroSection, ProblemStatement, FAQBlock, etc.
- SEOHead — generateMetadata sets title, description, canonical (/industry-learn/{slug}), and Open Graph pointing at atomicbuild.com.
- dynamicParams = true — slugs not in the manifest at build time still generate on first request.
- sitemap.ts — lists every published slug under /industry-learn/{slug} for crawler discovery.
// atomicbuild.com — fetch + cache tag
const res = await fetch(`${CDN}/pages/${slug}.json`, {
next: { revalidate: 300, tags: [`seo-page:${slug}`] },
});
// viral — on publish
await fetch('https://atomicbuild.com/api/revalidate', {
method: 'POST',
headers: { 'x-revalidate-secret': SECRET },
body: JSON.stringify({ slug }),
});Why data, not HTML? atomicbuild owns the <head>. Canonical, structured data, and layout all point to atomicbuild.com. viral stays noindex — a factory, not a competitor in search.
— No. 11
Voice DNA in the prompt
sounds like us on the first pass
Short paragraphs. Active voice. Specific details. No "seamless," no "robust," no "in today's fast-paced landscape." The rules live in the prompt so every page that clears the pipeline already sounds like Atomic — because we wrote the rules the model follows.
— No. 12
Generation layer
Claude writes, we constrain
- Zod-validated sections — hero, problem, pov, useCases, engagement, faq. Bad output doesn't become a draft.
- Combos + discovery — combo mode for use-case × industry pairs; discovery mode invents topics cross-checked against the full DB.
- Prompt versioning (seo-v2 / seo-v3) — every draft records which prompt built it; re-generate when Voice DNA changes.
— No. 13
Storage
Neon for workflow, CDN for delivery
The database is editorial truth. The CDN is what atomicbuild.com reads.
- Neon seo_pages — full content, status (draft / published / archived), combo metadata, timestamps.
- CDN manifest + pages/*.json — publish uploads here; atomicbuild fetches at ISR time, not build time.
- Revise without downtime — DB row goes to draft, CDN JSON stays live until republish.
- Local fallback — content/seo-pages/*.json when SEO_CONTENT_CDN_URL is unset (dev only).
— No. 14
Admin API
/api/admin/seo-pages, Basic Auth
REST for the full lifecycle. Status transitions are enforced, not suggested. PATCH only on drafts. Publish uploads to CDN, updates manifest, and POSTs to atomicbuild.com/api/revalidate. Unpublish, revise, and archive each have defined side effects on CDN, manifest, and cache tags.
200+
pages live · weeks not quarters
2
gates before ship · Zod + human
0
duplicate topics shipped
— No. 15
What ships
not in the spec sheet, but worth knowing
- Each page targets a real industry × use-case combo — pain points, use cases, engagement model included.
- Voice DNA in the prompt does the heavy lifting. Pages don't read like AI slop.
- Revise keeps the old JSON live on the CDN while you patch in admin. No maintenance window.
- Discovery cross-checks slugs, titles, and summaries before proposing anything new.
- Publish → CDN → webhook → ISR. atomicbuild.com/industry-learn picks up new pages without a redeploy.
— Example
Live page
see what ships in production
One industry × one use case — hero through FAQ, generated in Viral, JSON on the CDN, rendered at /industry-learn/[slug] with atomicbuild.com canonical and layout.
See the engine in production
200+ pages — generated in Viral, delivered via CDN, indexed on atomicbuild.com/industry-learn.
Ready to start building?
Every engagement starts with an Opportunity Sprint — we define what to build and then we ship it.