The problem isn't having content locally. The problem is mixing copy, layout, routing, and SEO in the same component.
A small model already changes a lot
With a minimal contract for BlogPost, Project, and Service, the app stops relying on repeated HTML blocks and starts working with real data.
That allows you to:
- list,
- filter,
- resolve by slug,
- generate a sitemap,
- apply consistent metadata.
And all of that can be done without adding a CMS on day one.
