Journal

A simple yet flexible CMS driven website.

A practice with no developer needed to change its own website at lowest possible friction while being able to build a beatuiful website.

All postsContentArchitecture
Published
4 June 2026
Read
3 min read
Written by
Eric Chautems
Contents

On this page

Cabinet des Alpettes is a neuropsychology and psychotherapy practice. Being two different domain with different offerings, the practice needed a flexible website that allowed her to add a page, edit some content, change some blocks, and keep here website up-to-date without a developer.

The most used solution in the market is WordPress. We refused to use it. Why? I think it deserves it’s own blog post, but basically we think in 2026 there are much better alternatives. Astro combined with Directus in that case was the perfect fit.

A page is a document, and some of its nodes are pointers

The content model keeps a page as a rich-text document. Most of its nodes are what you would expect — paragraphs, headings, lists — and they are edited the way anyone edits text. The twist is we went further and added a dynamic block system that allows you to add any block you want, without any code.

src/content/config.ts
const relationBlockSchema = z.object({
type: z.literal("relation-block"),
attrs: z.object({
  id: z.string().uuid(),
  junction: z.string(),
  collection: z.string(),
}),
});

const contentSchema = z.object({
type: z.literal("doc"),
content: z.array(relationBlockSchema),
});

A relation-block node holds no content of its own. It names a collection and an id, and sits in the document at the position the writer put it. The page is the document, read top to bottom.

This is where Directus shows its power: each blocks is nothing more than another collection. Each collection holds the content for a block. Theses blocks can take any shapes and complexity. we then decide from that content how we render it in Astro. The fooprint is minimal because we only need to define the block types and their schemas, not how they are rendered by the same system that serves all other blocks.

The only limit is your imagination

There site ships with eight block types: hero, feature grid, call to action, gallery, FAQ, form, service type, and rich text. The practicer then decides which blocks to use on each page and can fully customize the content and layout of each block.

The FAQ block earns a mention. It’s a complete research engine that allows the practice to add, edit, and delete questions and answers as needed. But more importantly, it’s possible to categorize and add labels to questions and answers. It supports different layouts and styles, so the practice can choose the best fit for their needs.

The practice team page on a phone, each therapist introduced one under the other.The practice team page on a phone, each therapist introduced one under the other.

Phone390px

The practical information page on a tablet, with its table of sections under the text.The practical information page on a tablet, with its table of sections under the text.

Tablet834px

The practice home page on a desktop browser, with the introduction beside the services.The practice home page on a desktop browser, with the introduction beside the services.

Desktop1440px

Three pages, three widthsThis showcase well the level of flexibility and customization the combination of Astro and Directus enable.

Editing on the page, not in a tree

Every block renders a data-directus attribute naming its collection, its item and the exact fields that region shows. With visual editing on, clicking a heading opens that heading’s field. Nobody has to find the page in a tree, then the block in a list, then the field in a form.

The services page of the practice, showing service categories rendered as cards with a short description under each.
FigureThe service-type block on the services page, drawn as cards. The same block, same content, draws as columns, a grid or tabs.

Preview is the one route on the site that is not prerendered. It reads draft content with the editor’s own session token, sets noindex, and returns a 404 in production when there is no token at all. Draft work is visible to the person writing it and to nobody else.

It’s not a silver bullet

We often reach for Astro & Directus when the customer needs flexible content management at minimal overhead. It works well for many use cases. Yet it does not solve every problem. If you need a full-featured CMS that is tightly coupled with external sources, if you need a tailored content management system, we prefer to reach for Sanity.

If you want to fidn out more about how we use Sanity to build extremly flexible content management systems, take a look at our Autocorner Story

Journal

More from the journal

  • When the customer changes, the platform must follow

    Kooko began by delivering dinner to individuals, then served groups of colleagues and finally their employers. Five years and four architectures taught us when to adapt a system—and when to stop extending it.

    ArchitectureMigrationCommerce6 min read
  • How the web became the default

    Every platform once demanded its own language, toolchain and answer to deployment. The web escaped that and became the default for almost everything, including the things it was worst at, and it never handed anyone an architecture.

    ArchitectureOpen source11 min read
  • How the web stack grew up

    The last decade did not produce a winning framework. It produced better runtimes, lighter delivery, shared standards and durable workflows, plus two answers nobody yet ships in the same box: opinionated frameworks and open standards.

    ArchitectureOpen sourceDeployment19 min read

Next step

Recognise the problem?

If one of these sounds like your system, the first conversation costs nothing.