Skip to content

CMS

TAVP CMS is a content management system built on the TAVP Stack. WordPress-familiar, Voyager-style admin, thin and fast — with pluggable storage, headless API, SEO module, and a modern feature set.

For developers

This page is the user-facing feature guide. For architecture, module composition, and internal wiring, see the TAVP CMS ecosystem page.

Features

  • Pluggable Storage — Database (Phalcon ORM) or flat-file (Markdown + YAML front matter)
  • BREAD Content Types — Browse, Read, Edit, Add, Delete with auto-generated admin UI
  • 19 Field Types — text, textarea, richtext, slug, number, boolean, select, date, datetime, media, relation, blocks, json, password, email, url, color, tags, repeater, seo
  • SEO Module — Meta tags, Open Graph, Twitter Cards, JSON-LD schemas, sitemap, robots.txt, RSS, redirects, analyzer, social sharing
  • Validation — Server-side rules: required, min, max, email, url, unique, numeric, in, regex
  • Taxonomy — Hierarchical categories and flat tags
  • Revisions — Version history with one-click rollback
  • Search — Full-text search across all content types
  • Media Library — Upload, list, preview, delete files via admin UI
  • Menu Builder — Nestable menu items with drag-and-drop ordering
  • Settings — Site name, description, URL, SEO defaults
  • Webhooks — HTTP POST on content events with HMAC signature
  • RBAC — Role-based access control via tavpid (database-backed)
  • Headless API — REST API with Bearer token auth
  • CLItavp cms:publish, tavp cache:clear, tavp schedule:run

Quick Start

bash
composer create-project tavp/cms my-site
cd my-site
tavp migrate
tavp serve

Configuration

env
CMS_STORAGE=database
CMS_ADMIN_EMAILS=you@example.com
CMS_API_TOKENS=your-secret-token-here

SEO Module

Complete on-page and technical SEO toolkit.

Features

FeatureDescription
Meta TagsAuto-generated title, description, keywords per content
Open Graphog:title, og:description, og:image, og:type, og:url
Twitter Cardstwitter:card, twitter:title, twitter:description, twitter:image
JSON-LD SchemasArticle, Product, WebPage, FAQPage, BreadcrumbList
XML SitemapAuto-generated from published content, ping Google/Bing
Robots.txtDynamic generation from config
RSS FeedAuto-generated at /feed
Redirect Manager301/302 redirects with hit tracking
SEO AnalyzerScore (0-100), errors, warnings, suggestions
Social SharingTwitter, Facebook, LinkedIn, WhatsApp, Telegram buttons
Webmaster ToolsGoogle/Bing verification meta tags
Google AnalyticsAuto-inject GA tag
Outbound Link TrackingTrack + detect broken links
AI Meta GeneratorAuto-generate meta tags from content

Admin Routes

RouteDescription
/admin/seoSEO Dashboard (stats, sitemap, robots)
/admin/seo/settingsSEO settings (meta, OG, Twitter, webmaster, analytics)
/admin/seo/redirectsRedirect manager (CRUD)
/admin/seo/analyzerContent SEO analyzer
/admin/seo/pingPing search engines with sitemap

Front-end Routes

RouteDescription
/sitemap.xmlAuto-generated XML sitemap
/robots.txtDynamic robots.txt
/feedRSS/Atom feed

Config

php
// config/seo.php
return [
    'enabled' => true,
    'meta' => [
        'title_suffix' => ' | My Site',
        'separator' => ' | ',
    ],
    'sitemap' => [
        'enabled' => true,
        'ping_google' => true,
        'ping_bing' => true,
    ],
    'robots' => [
        'allow' => ['/'],
        'disallow' => ['/admin', '/api'],
    ],
    'open_graph' => ['enabled' => true],
    'twitter' => [
        'card_type' => 'summary_large_image',
    ],
    'schemas' => [
        'types' => [
            'page' => 'WebPage',
            'post' => 'Article',
        ],
    ],
    'rss' => ['enabled' => true, 'limit' => 20],
    'webmaster' => [
        'google_verification' => env('GOOGLE_SITE_VERIFICATION'),
        'bing_verification' => env('BING_SITE_VERIFICATION'),
    ],
    'analytics' => [
        'google_analytics_id' => env('GOOGLE_ANALYTICS_ID'),
    ],
];

API

All endpoints require Authorization: Bearer <token>.

Content Types

bash
GET /api/cms/types

Browse Records

bash
GET /api/cms/{type}?page=1&per_page=15&status=published

Read a Record

bash
GET /api/cms/{type}/{id}

Create a Record

bash
POST /api/cms/{type}
{
  "title": "Hello",
  "slug": "hello",
  "body": "World",
  "status": "published"
}

Update a Record

bash
PUT /api/cms/{type}/{id}
{
  "title": "Updated"
}

Delete a Record

bash
DELETE /api/cms/{type}/{id}
bash
GET /api/cms/search?q=hello&type=post

Taxonomy

bash
GET /api/cms/taxonomy/category
POST /api/cms/taxonomy
{
  "type": "category",
  "name": "News",
  "slug": "news"
}

Revisions

bash
GET /api/cms/{type}/{id}/revisions
POST /api/cms/{type}/{id}/rollback/{timestamp}

CLI

bash
php bin/cms help
php bin/cms types
php bin/cms make:type product
php bin/cms api:token my-app
php bin/cms search:reindex
php bin/cms taxonomy:list category

Configuration Reference

KeyDefaultDescription
CMS_STORAGEdatabaseStorage driver
CMS_CACHE_ENABLEDtrueEnable read-through cache
CMS_CACHE_DRIVERfileCache backend
CMS_CACHE_TTL300Cache TTL in seconds
CMS_API_PREFIXapi/cmsAPI route prefix
CMS_API_TOKENSComma-separated bearer tokens
CMS_REVISIONS_ENABLEDtrueEnable version history
CMS_SEARCH_ENABLEDtrueEnable search
CMS_TAXONOMY_ENABLEDtrueEnable categories + tags
CMS_SEO_ENABLEDtrueEnable SEO module
CMS_WEBHOOKS_ENABLEDtrueEnable webhooks

Migrations

#TableDescription
001contentsCore content storage
002content_typesBREAD type definitions
003mediaMedia library files
004menus, menu_itemsNavigation menus
005settingsKey-value site settings
006taxonomy_terms, content_taxonomyCategories + tags
007content_revisionsVersion history
008webhooks, webhook_deliveriesWebhook config + logs
009api_tokensAPI bearer tokens
010seo_metaPer-record SEO fields
011redirects301/302 redirect rules
012outbound_linksLink tracking + broken detection

Comparison

FeatureTAVP CMSWordPressStrapiStatamic
Pluggable storage✅ DB + flat-fileFlat-file only
Headless API✅ REST built-inPlugin✅ REST+GraphQLPro
Revisions✅ File-based✅ DBGit-based
Validation✅ 9 rulesLimited
Caching✅ Read-throughPlugin
Webhooks✅ + HMACPluginPlugin
SEO✅ Full modulePluginAddon
JSON-LD✅ Built-inPluginAddon
Redirects✅ Built-inPluginPlugin
Memory~4MB~256MB~128MB~16MB

Released under the MIT License.