atomicbuild.com · v1.0 · guide
EXPERIMENTENGINESEO

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:

  1. 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.
  2. AI that sounds like Atomic. Voice DNA lives in the generation prompt — banned words, anti-patterns, short paragraphs. Not a post-hoc edit pass.
  3. An editorial gate. Zod validates structure. A human checks voice. Nothing goes live without both.
  4. Zero-downtime edits. Revise keeps the old JSON on the CDN while you patch in admin. Republish when ready.
  5. 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

  1. Generate — pick use case + industries, Claude writes 6 sections per page (Zod-validated)
  2. Discover — let Claude propose topics that don't overlap existing slugs
  3. Review — draft → edit → approve in the admin panel
  4. Publish — upload JSON + manifest to CDN; webhook revalidates atomicbuild.com
  5. 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.

why we built Viral

— 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.

bash# 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.

textpublish → 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.

textCDN 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.
typescript// 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.

Atomic Build · Internal experiment · Claude + Neon + CDN + Next.js ISR · Voice DNA enforced

Ready to start building?

Every engagement starts with an Opportunity Sprint — we define what to build and then we ship it.