Skip to content
Onome Osika

Projects are data, not pages

How this site turns a folder of MDX into routes, cards, filters, OG images and search, and fails the build when content is wrong.

The rule

Adding a project means adding one folder. No new components, no routing changes.

Validation

Frontmatter is parsed with Zod. A missing alt text, a low-contrast accent or a broken internal link fails the build, so mistakes never reach production.

const parsed = projectSchema.safeParse(frontmatter);
if (!parsed.success) throw new Error(formatIssues(parsed.error));

What gets generated

Each project produces a static route, a card on the work index, an Open Graph image, metadata, JSON-LD, a sitemap entry and a search entry.