Case 09 · Veltrix platform

Content, modelled.
Published anywhere.

The content engine at the heart of Veltrix: any content type a site needs, a real editorial workflow, five languages and many sites from one install — with every entry available through a versioned API.

Custom CMS Platform — brand mark
01 // Role
Architecture · Product · Engineering
02 // Platform
Self-hosted CMS — Node and PHP editions
03 // Year
2026
04 // Status
Private release · 2.x

A The brief

Every client needed something a little different — events, products, case studies — and the usual answer was another plugin for each, with its own fields, its own screens and its own idea of a draft. Content ended up scattered across tools that didn’t agree.

A.2 What it had to do

  1. 01Any content type, defined once, with real fields and validation
  2. 02One editorial workflow: review, scheduling, revisions
  3. 03Multilingual and multi-site from the core, not an add-on
  4. 04Every entry available to other systems through an API

B · Content engine

Model. Edit. Deliver.

Pick a content type: its model becomes the form, the entry moves through review and scheduling, and the same content comes out of the API — with a signed webhook when it goes live.

VELTRIX // CONTENT
Draft

Model /journal/:slug

  • titletext
  • excerpttextarea
  • coverimage
  • topicsrelation
  • bodyrichtext

17 field types · revisions · scheduling · SEO

  1. 01Draft
  2. 02Pending review
  3. 03Scheduled
  4. 04Published
titleLaunching three sites in a week
excerptHow one platform replaced a stack of add-ons.
covercover.avif · 7 sizes
topicsPlatform, Studio
body1,240 words
ENFRARRevision 3 · autosaved

REST API v1

Webhook · signed · delivered

C · Capabilities

What it does.

01Content types
Pages and posts are just types. Add more with twelve feature switches — archives, revisions, scheduling, SEO, the builder, the API.
0217 field types
Text to rich text, dates, colours, galleries, relations and JSON — with required, range, pattern and option validation.
03Editorial workflow
Draft, pending review, scheduled, published and archived. Editing a live entry never changes it until it is published again.
04Revisions that keep history
Compare two versions field by field and restore one — as a new revision, so nothing is erased. Autosave every twenty seconds.
05Roles by capability
Seven built-in roles plus custom ones; every content type gets its own capabilities, some limited to the author’s own entries.
06Media that serves itself
Seven sizes in AVIF and WebP with a JPEG fallback, duplicates caught on upload, and alt text in every language.
07Languages and sites
Linked translations with their own slugs, hreflang and right-to-left; many sites in one install, each with its own content and theme.
08API, webhooks, CLI
A versioned REST API with an OpenAPI document, signed webhooks with retries, and the vx command line.

D · Engineering

How it’s built.

  1. 01

    Scheduling that survives restarts

    Scheduled publishing is a worker job checked every minute — not a timer in someone’s browser — so a restart never skips a launch.

  2. 02

    Previews that expire

    Preview links are signed and short-lived, and render exactly as the theme will — no separate preview template to drift.

  3. 03

    Importer with an undo

    The WordPress importer previews first, rolls everything back if it fails halfway, and skips anything whose address already exists.

  4. 04

    Webhooks you can trust

    Every delivery is signed, retried with backoff and backed by secret rotation, so receiving systems can verify where it came from.

Stack

  • TypeScript
  • Next.js
  • React 19
  • PostgreSQL
  • Drizzle ORM
  • pg-boss
  • OpenAPI
  • PHP edition

Brand system

  • Cyan#09F2FC
  • Blue#0071FB
  • Indigo#1F3FFB
  • Violet#B448FC

E · Impact

By the numbers.

17
Field types
225
REST API routes
14
Signed webhook events
7
Built-in roles, plus custom

Have something ambitious in mind?

Tell us what you’re creating — we reply within two business days.

↯ Quick contact

Just a quick question?

Ask anything — we reply within two business days.