Recursos

Todo lo que viene en la caja

Un CMS completo en la descarga: panel, campos ricos, SEO, formularios, miembros y multi-idioma. Sin plugins que buscar, sin versión de pago.

Lo esencial

Un panel que se arma solo

El admin se genera del site.json — y ya nace con lo que todo sitio necesita por debajo.

Panel generado del esquema

Cada página, tipo de contenido y campo declarado se convierte en una pantalla de edición. El cliente solo ve lo que el sitio realmente tiene — sin menús de sobra, sin pantallas de configuración.

SEO integrado

Meta title, description y og:image adjuntados automáticamente a cada página e item, con sitemap.xml generado — incluyendo hreflang cuando el sitio es multi-idioma.

Biblioteca de medios

Subida de jpeg, png, gif, webp, svg y pdf con texto alternativo, nombres limpios y tamaños con nombre generados bajo demanda — thumb, hero, los que declares.

Formularios listos

Protección CSRF + honeypot, envíos guardados en la base de datos y enviados por email con asunto dinámico ({{name}}). ¿Falló el email? El envío sigue guardado.

Área de miembros

Logins del sitio — clientes, alumnos, leads — con sus propios tipos y campos, rutas personalizables y sesiones separadas de los usuarios del admin. Un problema en un lado no alcanza el otro.

Multi-idioma nativo

URLs con prefijo y slug por idioma, traducción por contenido en pestañas en el propio editor y fallback automático — los helpers del tema resuelven el idioma solos.

Campos

17 tipos de campo

Declarados en el site.json, renderizados en el panel, leídos en el tema con field().

text

Texto de una línea — títulos, nombres, titulares.

textarea

Texto largo sin formato.

richtext

Editor visual (TipTap) que guarda HTML limpio.

image

Una imagen de la biblioteca de medios; resuelta con image_url().

gallery

Lista ordenada de imágenes.

select

Desplegable con opciones que defines.

boolean

Activar/desactivar — destacado, badge, sección opcional.

number

Valor numérico.

email

Input de email con validación HTML5.

url

Input de URL con validación HTML5.

date

Selector de fecha.

repeater

Grupo de subcampos que se repite — testimonios, FAQs, listas.

flexible

Bloques con layouts con nombre — el "contenido flexible" de ACF.

link

Título + URL + nueva pestaña; se imprime con link_tag().

item

Relación con otro contenido, por búsqueda — solo items publicados.

group

Caja organizativa plegable en el admin; el almacenamiento sigue plano.

tabs

Pestañas organizativas en el editor — solo visual, sin cambiar los datos.

Estructura

Estructura declarada, contenido libre

El site.json describe lo que el sitio puede tener. El panel y las URLs lo siguen.

Tipos de contenido

Posts, casos, servicios, propiedades — tú los nombras. Cada tipo tiene slug, template, archivo (listado) y, si quieres, plantillas alternativas por item.

Taxonomías

Categorías, etiquetas y lo que necesites — jerárquicas o no, con página propia opcional y campos personalizados en los términos.

Relaciones

El campo item conecta contenidos — el caso al servicio, el post al autor — con un combobox de búsqueda en el panel.

Páginas de las dos formas

Páginas estructurales declaradas en el esquema (home, contacto) y plantillas de página para que el cliente cree nuevas en el admin — cada una con sus campos.

Opciones globales

Teléfono, redes sociales, textos de pie: las páginas de opciones se vuelven formularios en el admin y salen en el tema con option('contacto.phone') — cacheado, una sola query.

Grupos reutilizables

field_groups define bundles de campos una vez — SEO local, bloque de CTA — y los reutiliza en páginas y tipos con una línea.

Vibe coding

La CLI es la API

Todo lo que hace el panel, bin/velk lo hace por JSON. Así un agente de IA crea el esquema, escribe contenido, publica y mantiene el sitio entero — de punta a punta.

  • schema:validate
  • page:sync
  • item:create
  • item:update
  • page:update
  • item:schema
  • --json-stdin
  • --dry-run
  • --format=json
bin/velk

$ ./bin/velk item:schema servico

name · type · required — el mapa antes de escribir

 

$ ./bin/velk item:create servico --json-stdin

✓ Item creado: consultoria-seo

 

$ ./bin/velk item:publish servico consultoria-seo

✓ Publicado

Bajo el capó

Hecho para durar en producción

Upgrades sin miedo

El engine es una dependencia versionada: el upgrade descarga el tarball, verifica el sha256 y cambia solo los archivos del core — tema, contenido, uploads y .env quedan intactos.

Auto-migrate en el arranque

¿Subiste archivos nuevos por FTP? En la primera petición Velk aplica las migraciones pendientes solo, serializado con un lock de MySQL — un hosting sin SSH termina el upgrade sin terminal.

Seguridad de fábrica

Escape de salida con e(), SQL 100% en prepared statements, CSRF en cada POST, honeypot en los formularios y sesiones de miembros aisladas de las del admin.

Mira todo esto funcionando

Instala la skill en Claude Code y describe tu primer sitio — la IA instala Velk y el panel aparece antes de que se enfríe el café.