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.
- 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
- 01Any content type, defined once, with real fields and validation
- 02One editorial workflow: review, scheduling, revisions
- 03Multilingual and multi-site from the core, not an add-on
- 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.
Model /journal/:slug
- title
text - excerpt
textarea - cover
image - topics
relation - body
richtext
17 field types · revisions · scheduling · SEO
- 01Draft
- 02Pending review
- 03Scheduled
- 04Published
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.
- 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.
- 02
Previews that expire
Preview links are signed and short-lived, and render exactly as the theme will — no separate preview template to drift.
- 03
Importer with an undo
The WordPress importer previews first, rolls everything back if it fails halfway, and skips anything whose address already exists.
- 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
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

