A CMS project before your first post
You wanted to publish one launch post. Instead you're setting up a hosted CMS, API tokens, and preview environments. Here, a post is an entry in a file, and it ships with your next deploy.
Publish a post by adding one entry. The rest is handled.
Write a post, add it to one list, and it's live: reading time, categories, search, related posts, and search-engine markup all happen for you. Every post uses the same clean layout, so publishing never turns into a design task.
The mechanism end to end, as implemented in the repository.
Add a typed post
Define the post in one content file with its slug, date, description, author, tags, and content blocks. Required fields are enforced by types.
Discovery derives itself
The featured story, category filters, search, reading time, and listing cards are computed from the catalog. No wiring per post.
One shell renders every post
The shared article component renders all five block types, and related links must point at real posts, so they can't go stale.
Crawlers see what readers see
The post page emits article markup from the same metadata that renders on screen, so SEO stays in lockstep with the content.
Interactive example
This walkthrough demonstrates the implemented backend contract without using an account, credentials, or provider calls.
Interactive example
Deterministic sample data only. No account, provider, or network connection is used by the interaction.
Without a shared foundation, every team rebuilds these edge cases — differently.
You wanted to publish one launch post. Instead you're setting up a hosted CMS, API tokens, and preview environments. Here, a post is an entry in a file, and it ships with your next deploy.
One post has no date, another no author, a third no description. Search engines get scraps. Here, those fields are required, so an incomplete post won't even build.
Each article hand-rolls its own markup, so callouts and code blocks drift in style, and writing becomes coding. Here, five block types and one shared layout make every post consistent.
Highlights
Add a post to one typed file and the listing, filters, reading time, and related stories all update on their own.
Paragraphs, lists, callouts, code blocks, and quotes all render through one shared article shell, so every post looks consistent.
Each post publishes proper article markup from the same required fields (date, author, description) that readers see.
Engineering guarantees
Posts live in your repo and get checked at build time. RSS, stored feedback, and dynamic social images aren't included yet, and the disabled Sanity scaffold isn't presented as an active CMS.
The boundary above is code, not a claim. These files carry the contract:
src/modules/blog/content.tssrc/modules/blog/BlogArticle.tsxsrc/routes/_public/blogThese capabilities share contracts and boundaries with this one.
The docs describe the same contracts this page demonstrates.