MyPhotoAI · pSEO case study

A working pSEO case study, shipped on Next.js App Router

If you have read programmatic SEO described in the abstract and want to see how the moving parts actually fit, this leaf is the one-page summary. The pSEO surface on MyPhotoAI is built in Next.js using the App Router. The slug list is a typed TypeScript manifest. The sitemap is composed at build time from that manifest. Image generation runs out of band. Every claim on this page traces back to shipping code that you can read in our public monorepo.

By AlkenaCode engineering team

We ship programmatic SEO surfaces, AI-driven receptionists, and case-study sites for Kenyan SMEs and overseas clients. Every claim on this page traces back to shipping work, not speculation. The audit tool on /audit is the same software we use to evaluate prospective engagements.

Authors of the myphotoai.alkenacode.dev pSEO surface itself. Source code is open at github.com/Kiragu-Maina/alkenacode-family. Production deployments include agents.alkenacode.dev and home.alkenacode.dev.

Last updated:

We built the surface you are reading on. The slug manifest is open in our monorepo, the build is reproducible from a clean clone, and the deployment is the same Docker compose stack documented in the architecture spine piece.

A working pSEO case study, shipped on Next.js App Router

What the surface looks like in production

Twenty-two leaves at /p/{slug}, six spine pieces at /case-study/{slug}, one audit endpoint at /audit, one sitemap.xml at the root. Every leaf renders from the same React component that reads the slug manifest with generateStaticParams. The static export emits 22 leaf HTML files at build time. Lighthouse SEO scores 98 to 100 across the surface, mobile and desktop. The full source for the slug type, the manifest, the build-time validator, and the page renderer is in the open monorepo, so the architecture is auditable end to end.

Why this stack and not a CMS

A pSEO surface lives or dies by the round trip between editorial intent and shipped HTML. A CMS adds two surfaces of state that drift: the database and the front-end. With a TypeScript manifest, every editorial change is a code change with a diff, a commit, and a deploy. The cost is that non-engineers cannot edit. The benefit is that the production HTML is provably consistent with the slug manifest at every point in time. We have shipped CMS-driven pSEO and code-driven pSEO; for surfaces under 200 leaves with a small editorial team, the code path is faster, cheaper, and more honest. Above 200 leaves with a multi-author team, the calculation flips.

What this leaf does not cover

This is the summary. The architecture page in the spine has the longer-form walk-through with the file-by-file structure, the deploy topology, and the bot detection posture. The slug-strategy spine piece covers how we choose what to write about and what to leave on the table. The results spine piece carries the index-coverage and Core Web Vitals numbers. If you want to skip ahead to a specific concern, the related leaves below are linked from inside the body where relevant.

src/app/p/[slug]/page.tsxtsx
import { SLUGS } from "../../../../content/slugs";

export const dynamicParams = false;

export function generateStaticParams() {
  return SLUGS.map((s) => ({ slug: s.slug }));
}

export default function LeafPage({ params }: { params: { slug: string } }) {
  const leaf = SLUGS.find((s) => s.slug === params.slug);
  if (!leaf) notFound();
  // ... render the leaf
}
The leaf route's generateStaticParams reads the manifest at build time and tells Next.js which slugs to emit as static HTML.

Sources

Every claim on this page traces back to one of the verifiable sources below. Citations are publisher-stable; we avoid blog posts and other URLs that may not survive a year.

  1. Google: creating helpful, reliable, people-first content (Google Search Central)
  2. Google: indexing overview (Google Search Central)
  3. Google: sitemaps overview (Google Search Central)
  4. Google Search Quality Rater Guidelines (PDF) (Google Search Central)
  5. Next.js docs: App Router (Next.js)
  6. Next.js docs: generateStaticParams (Next.js)
  7. Next.js docs: sitemap file convention (Next.js)
  8. Next.js docs: output option (standalone, export) (Next.js)
  9. web.dev: Lighthouse SEO audits (Chrome for Developers)
  10. sitemaps.org: 0.9 protocol specification (sitemaps.org)
Free site auditor

See how the pattern applies to your site

The auditor uses the same evidence bundle described above (robots, sitemap, page samples) and returns a structured opinion. No signup, no email required to see results.