The first AI Engine Optimization platform: audits how a site is seen by ChatGPT, Claude, Perplexity and Google AI Overviews.
AEO Content is an AI Engine Optimization platform that I co-founded and run as CTO. It answers a question classic SEO tools do not: when a buyer asks ChatGPT, Claude, Perplexity, Gemini or Google AI Overviews for a recommendation, is a given business named, ignored, or replaced by a competitor? The product audits a site for citation readiness, tracks how often AI engines cite it, and runs a done-for-you content engine to close the gaps.
I architected the platform and lead its engineering. The core is a TypeScript monorepo on Turborepo and pnpm: the Studio client portal and an internal admin, both on Next.js 16 and React 19, sharing packages for scoring, the job queue, database access and publishing. Around it run Python workers on Modal for crawls, batch audits and site migrations, a headless-browser visibility collector, an MCP server, an Astro marketing site, a Chrome extension and a WordPress plugin.
It has grown from an audit tool into a full service: topic research from live sources, sourced articles scored against the AEO Rank engine, publishing into client CMSs and repositories, website migrations to Astro, and scheduled visibility monitoring. It is live at aeocontent.ai, and the public site reports more than 26,000 AI-visibility audits run.
Moved production off Vercel and Supabase to self-hosted Postgres and Docker containers on AWS Graviton (ARM64); the ARM image rebuilds needed no code changes, and a CI guard now blocks Supabase from coming back.
AEO Rank is run as a governed standard: scoring uses deterministic, repeatable checks with no AI judgment, the scoring core is protected by repository rules, and a regression gate re-scores a fixed validation set.
Batch re-audits fan out on Modal to up to 100 worker containers, with a fast lane, a slower retry lane for transient failures, heartbeats and stale-run cleanup.
Publishing safety lives in code rather than in prompts: the auto-publish cron holds structurally incomplete articles and scans rendered text against each client's banned terms before anything goes live.