April 2026 — SEO platform foundation
April 24, 2026
This month Aedifex shipped the groundwork for the next 6-12 months of growth: real content, real discoverability, and real test coverage.
New routes
/blog— writing for architects, designers, and homeowners. First post: a practical walkthrough of designing a 30 sqm studio./solutions/{floor-plan,interior,ai-designer}— use-case landing pages with keyword-focused copy and structured data./showcase— community-published 3D designs. Anyone with a Pro account can publish a project to the public directory with one click.
Under the hood
- SEO invariants now tested. A 12-case Playwright suite asserts title, description, canonical URL, JSON-LD structured data,
robots.txt,sitemap.xml, and hreflang alternates on every public route. CI gates landing, solutions, blog, showcase, and the guest demo. - Two-query share pages. The
/view/[shareId]page used to load megabytes of scene JSON on every bot crawl. Split intogetPublicProjectMetadata(lightweight) +getPublicProjectScene(heavy), so search engines cost us a few KB instead. - KV-backed incremental cache. OpenNext now uses a Cloudflare KV namespace for ISR pages, the sitemap, and fetch-cache. Bot traffic no longer re-runs route handlers against D1 on every request.
- SSR crawlable body. Share and showcase pages render project name, author, and context text in HTML even when the 3D viewer mounts client-side. Schema.org
CreativeWork+BreadcrumbListincluded.
New database fields
slug— the canonical URL segment for/showcase/{slug}summary— one-sentence meta description, regenerated by an LLM when you publishisListed— gate for the public showcase directory (separate fromisPublicwhich only controls the share link)publishedAt— sort key for the showcase feedlocale— placeholder for per-project language hints
Existing projects were backfilled automatically. No action required.
UI
- Share dialog now has two independent toggles: "Public Access" (anyone with the link can view) and "Publish to community showcase" (goes into the public directory and gets SEO metadata).
- Footer surfaces Blog / Solutions / Showcase. A language picker is visible but disabled — we'll unlock Chinese and Japanese as translations land.
Developer experience
pnpm test:e2e— run the SEO regression suite against localhost.pnpm test:e2e:prod— run it against aedifex.app after deploy.pnpm typecheck:local— TypeScript check scoped to our own code, filters out upstream aedifex noise.
Known gaps
- Per-project Open Graph images fall back to the static site-wide card. Dynamic
next/oggeneration collides with OpenNext's WASM bundler; tracking as a TODO. - Chinese and Japanese UI copy is not shipped yet.
hreflang x-default+en-USdeclared so we don't regress when we do ship.
Next month: content expansion (Q2 blog roadmap), dynamic OG via Satori, and content for the zh-CN launch.