Hosting with 20% off when you buy through the link.

Features

Everything in the box

A complete CMS in the download: panel, rich fields, SEO, forms, members and multi-language. No plugins to hunt, no paid tier.

The essentials

A panel that builds itself

The admin is generated from the site.json — and it is born with what every site needs underneath.

Panel generated from the schema

Every page, content type and declared field becomes an editing screen. The client sees only what the site actually has: no leftover menus, no settings screens.

site.json → /admin

Built-in SEO

Meta title, description and og:image attached automatically to every page and item, with a generated sitemap.xml — including hreflang when the site is multi-language.

sitemap.xml · hreflang · og:image

Media library

Upload with alt text, clean file names and named sizes generated on demand: thumb, hero, whichever ones you declare.

jpeg · png · gif · webp · svg · pdf

Forms out of the box

CSRF and honeypot protection, submissions saved to the database and emailed with a dynamic subject. Email failed? The submission is still stored.

CSRF · honeypot · assunto {{name}}

Members area

Site logins (clients, students, leads) with their own types and fields, customizable routes and sessions kept apart from admin users. Trouble on one side never reaches the other.

sessions isolated from the admin

Multi-language, natively

Prefixed URLs and a slug per language, per-record translation in tabs inside the editor itself, and automatic fallback: the theme helpers resolve the language on their own.

/pt/ · /en/ · /es/

Fields

17 field types

Declared in site.json, rendered in the panel, read in the theme with field().

text
Single-line text — titles, names, headlines.
textarea
Long text without formatting.
richtext
Visual editor (TipTap) that saves clean HTML.
image
One image from the media library; resolved with image_url().
gallery
Ordered list of images.
select
Dropdown with options you define.
boolean
On/off — highlight, badge, optional section.
number
Numeric value.
email
Email input with HTML5 validation.
url
URL input with HTML5 validation.
date
Date picker.
repeater
A group of subfields that repeats — testimonials, FAQs, lists.
flexible
Blocks with named layouts — the ACF "flexible content".
link
Title + URL + new tab; printed with link_tag().
item
Relationship to other content, via search — published items only.
group
Collapsible organizational box in the admin; storage stays flat.
tabs
Organizational tabs in the editor — visual only, no data change.

Structure

Declared structure, free content

The site.json describes what the site can hold. The panel and the URLs follow.

Content types

Posts, cases, services, listings: you name them. Each type has a slug, a template, an archive listing and, if you want, alternate templates per item.

Taxonomias

Categories, tags and whatever else you need: hierarchical or not, with an optional page of their own and custom fields on the terms.

Relacionamentos

O campo item links content together — the case to the service, the post to the author — with a search combobox in the panel.

Pages, both ways

Structural pages declared in the schema (home, contact) and page templates so the client can create new ones in the admin, each with its own fields.

Global options

Phone, social links, footer copy: option pages become forms in the admin and come out in the theme with option('contato.phone'), cached, a single query.

Reusable groups

field_groups defines field bundles once (local SEO, a CTA block) and reuses them across pages and types in a single line.

Vibe coding

The CLI is the API

Everything the panel does, the bin/velk does over JSON. That is how an AI agent creates the schema, writes content, publishes and maintains the whole site, end to end.

  • bin/velk
  • schema:validate
  • page:sync
  • item:create
  • item:update
  • page:update
  • item:schema
  • --json-stdin
  • --dry-run
  • --format=json
~/my-site
$ ./bin/velk item:schema servico name · type · required — the map before writing $ ./bin/velk item:create servico --json-stdin ✓ Item created: consultoria-seo $ ./bin/velk item:publish servico consultoria-seo ✓ Published
Official skill
skill.velkcms.com

Paste into Claude Code to install:

Install the Velk skill from skill.velkcms.com into ~/.claude/skills/velk

Under the hood

Built to last in production

  1. Upgrades without fear

    The engine is a versioned dependency: the upgrade downloads the tarball, verifies the sha256 and swaps only the core files. Theme, content, uploads and .env stay untouched.

  2. Auto-migrate on boot

    Uploaded new files over FTP? On the first request Velk applies the pending migrations by itself, serialized with a MySQL lock: a host without SSH finishes the upgrade with no terminal at all.

  3. Secure out of the box

    Output escaping with e(), SQL 100% on prepared statements, CSRF on every POST, honeypot on forms and member sessions isolated from the admin ones.

See all of this running

Install the skill in Claude Code and describe your first site — the AI installs Velk and the panel appears before your coffee gets cold.