Skip to content

Repository files navigation

Vertext CMS

Version Status PHP License

Modular PHP CMS built for developers.

Vertext is a lightweight, extensible content management system written in PHP 8.2+. It provides a professional admin panel, role-based access control, and a clean module system so you can ship exactly the features you need - nothing more.

Vertext 0.1.4b is a public self-host beta - good enough for real use, but not enterprise-hardened. Read Known Limitations before deploying, and Going to Production before inviting real users.

Built on Phuse 1.3.0 - Vertext is powered by the Phuse framework, which provides the ORM, router, session manager, input helpers, validator, and core utilities.


Features

  • Modular architecture - install, enable, disable, and uninstall modules without touching core code; modules declare inter-dependencies enforced at install/uninstall time
  • Role-based access control - fine-grained permissions per resource and action; custom roles
  • Admin panel - responsive sidebar UI with dark/light theme, flash messages, and audit trail
  • Public theme system - ThemeEngine wraps all front-end module views in a shared theme layout; 4 bundled themes (Default, Clean, Field, Frame) support dark/light mode with OS preference detection and a toggle button
  • Email notifications - built-in Mailer (PHP mail + SMTP); contact notifications, comment approvals, auto-replies, welcome emails
  • Slug auto-generation - vtx-slug component generates URL slugs from titles across all module forms
  • Navigation module - build front-end menus with custom links, page slugs, module routes, and dropdown support; modules auto-register nav items on install; renders automatically in theme layouts via NavHelper
  • Admin profile page - any logged-in user can update their own name, email, and password at /admin/profile
  • Blog module - posts, categories, tags, comment moderation, Quill editor, SEO fields, dynamic URL routing, RSS feed, scheduled/expired publishing, content revisions
  • Analytics module - privacy-friendly page-view tracking; unique visitors; device breakdown; date range filter; period comparison; CSV export
  • Search module - full-text ILIKE search across indexed pages and posts; GET /search; admin reindex dashboard
  • Theme Customizer module - accent color, font family, logo, and freeform custom CSS overrides injected into all theme layouts
  • Media module - file upload with image resizing + thumbnail generation; grid browser; bulk delete; reusable picker modal
  • Pages module - static page CRUD with front-end rendering via ThemeEngine; scheduled/expired publishing; content revisions
  • Sitemap module - automatic /sitemap.xml from published pages and blog posts; extensible via SitemapProvider interface
  • Webhooks module - outgoing webhooks with HMAC-SHA256 signed payloads; admin UI for endpoint management and delivery logs
  • Gallery module - photo albums backed by Media library; drag-to-reorder; CSS lightbox
  • Contact Form module - public contact form, admin inbox, email notifications, auto-reply
  • Videos module - YouTube/Vimeo embed management; poster thumbnail caching; lazy iframe player
  • Theme Manager - dedicated admin section (/admin/themes) to switch the active front-end theme; promoted from a settings tab to a first-class system module
  • Setup wizard - guided 5-step installation with DB connection testing
  • Security - CSRF protection, Argon2id passwords (auto-upgrade from bcrypt), password reset, active-session management, session hardening, login rate limiting, audit logs
  • PostgreSQL - full native support via PDO with connection pooling and query caching
  • vtx- component library* - chart, datatable, rich-text editor, media picker, tag input, upload, slug, and more
  • Two-factor authentication (2FA) - TOTP (RFC 6238) via the TwoFactor module; QR code setup; backup codes; trusted-device cookie (30 days)
  • Forms Builder module - drag-to-reorder field builder; conditional logic; multi-step forms; file uploads; email notifications; math challenge + optional reCAPTCHA v3; [form] shortcode; CSV export
  • Newsletter module - subscribers with double opt-in; audience segments; scheduled campaigns; open/click tracking; welcome email; [newsletter_signup] shortcode; CSV import/export
  • Events module - event listings with per-attendee RSVP, capacity + waiting list, ticket types, recurring events, iCal export, Canvas calendar sidebar, and attendee admin with CSV export
  • Bundle packages - install groups of related modules in one click; custom bundle builder in the Module Manager
  • Module Marketplace - install a module from any HTTPS URL via the Module Manager; SSRF-safe, SHA-256 verified
  • Module scaffold CLI - php vertext make:module Foo and php vertext make:bundle Foo generate boilerplate files
  • i18n - __() translation helper; locale path-prefix routing (/id/...); per-content Language field; admin Translations editor with locale scaffolding; I18n::date() with IntlDateFormatter support
  • Members module - front-end visitor accounts with email verification, member profiles, and admin moderation
  • REST API - read-only JSON API (/api/v1/posts, /pages, /events) with Bearer API keys and rate limiting
  • Performance - opt-in full-page cache for public renders, nav fragment cache, version-fingerprinted assets, lazy-loaded images

Requirements

Requirement Version
PHP 8.2 or higher
PostgreSQL 13 or higher
PHP extensions PDO, pdo_pgsql, json, mbstring, fileinfo
Web server Apache (mod_rewrite) or Nginx

Quick Start

# 1. Clone the repository
git clone https://github.com/primaybr/vertext.git
cd vertext

# 2. Point your web server document root to: /path/to/vertext/Public/

# 3. Open the setup wizard in your browser
#    http://your-domain/setup
#    Follow the 5 steps to configure the database and create an admin user.

# 4. Log in
#    http://your-domain/admin/login

Directory Structure

vertext/
├── App/                  # Application code (your work lives here)
│   ├── CMS/              # Auth, Installer, ModuleManager, NavHelper, I18n
│   ├── Controllers/      # Admin, Setup, Web controllers
│   ├── Lang/             # Translation files (App/Lang/{locale}/{file}.php)
│   ├── Mail/             # Mailer, MailMessage, MailTemplate + Templates/
│   ├── Models/           # Database models
│   ├── Modules/          # Installable modules (Blog, Media, Pages, ...)
│   ├── Theme/            # ThemeEngine - wraps front-end views in a theme layout
│   ├── Themes/           # Theme source files (default/, clean/, field/, frame/)
│   └── Views/            # Templates (admin + deployed module views)
├── Core/                 # Framework internals - do not modify
├── Config/               # Routes, Database, Paths config
├── Public/               # Web root - only this is web-accessible
│   ├── assets/           # CSS, JS, images (styles.css = Phuse framework base)
│   ├── themes/           # Deployed theme assets (auto-generated)
│   └── index.php         # Front controller
├── Storage/              # Runtime config (gitignored: db.php, app.php)
├── Migrations/           # Database schema files
├── Cache/                # Query and template cache
└── Logs/                 # Application logs

Module System

Vertext modules are self-contained units that own their database tables, routes, permissions, and views.

App/Modules/YourModule/
├── Module.php          # Implements ModuleInterface (install, uninstall, registerRoutes)
├── module.json         # Manifest: name, slug, version, category, nav links, permissions
├── Controllers/
├── Views/
└── Assets/             # Per-module CSS/JS, deployed to Public/assets/modules/{slug}/

Install a module: Admin → Module Manager → Install

Bundled Modules

Module Version Category Description
Blog 0.0.6 Content Posts, categories, tags, threaded comments, post series with prev/next nav, related posts, reading list (localStorage), dynamic URL routing, RSS feed, scheduled/expired publishing, content revisions
Pages 0.0.3 Content Static page CRUD, page templates (default/full-width/sidebar/landing), custom fields, scheduled/expired publishing, content revisions
Media 0.0.4 Media File uploads, folders, browser image editor (crop/rotate/flip), thumbnails, bulk move/delete
Gallery 0.0.1 Media Photo albums with lightbox, backed by Media library
Videos 0.0.1 Media YouTube/Vimeo embed management with poster thumbnails
Contact 0.0.1 Communication Public contact form with admin inbox and email notifications
Navigation 0.0.2 Navigation Front-end menu builder; Module Route type; auto-registration of module nav routes on install
Analytics 0.0.4 Analytics Privacy-friendly page-view tracking; unique visitors; device breakdown; date range filter; search term tracking; CSV + JSON export
Search 0.0.1 Content Full-text search across pages and posts; GET /search; admin reindex button
Theme Customizer 0.0.1 Design Accent color, font, logo, and custom CSS overrides for the public theme
Sitemap 0.0.1 SEO Automatic /sitemap.xml from published pages and blog posts
Webhooks 0.0.1 Integration Outgoing webhooks with HMAC-SHA256 signing and delivery logs
Forms 0.0.2 Communication Form builder with conditional logic, multi-step pages, file uploads, email notifications, anti-spam (honeypot/math/reCAPTCHA v3), shortcode embed, CSV export
Newsletter 0.0.2 Communication Subscribers, segments, scheduled campaigns, open/click tracking, welcome email, signup shortcode, CSV import/export
Events 0.0.2 Community Per-attendee RSVP with capacity + waiting list, ticket types, recurring events, iCal export, attendee admin
Members 0.0.1 Community Front-end visitor accounts: registration, email verification, profiles, admin moderation
Two-Factor Auth 0.0.1 Security TOTP authenticator app support; backup codes; trusted-device cookie

See docs/module-system.md and docs/creating-a-module.md for the full guide.


Documentation

Document Description
Getting Started Installation, requirements, first steps
Going to Production Pre-launch checklist: env, permissions, HTTPS, backups
Upgrading Git-pull upgrade steps, running migrations, version notes
Backup & Restore vertext backup/restore, secret redaction, limitations
Troubleshooting Install issues, DB connection problems, blank pages
Known Limitations What this beta explicitly does not cover yet
Configuration Config files, settings, mail keys, trusted proxies
Admin Guide Users, roles, permissions, settings, modules, themes
Security CSRF, RBAC, sessions, audit logs, uploads
Module System How modules work, lifecycle, ModuleLoader
Creating a Module Step-by-step module scaffold guide
ORM Guide Query builder, CRUD, pagination, raw queries
Template System {{var}}, {!! raw !!}, adminRender, flash
Theme System ThemeEngine, dark/light mode, custom themes, asset deployment
Mail System Mailer, MailMessage, templates, SMTP config
JS Components vtx-chart, vtx-editor, vtx-slug, vtx-media-picker, etc.
Blog Module Posts, categories, tags, comments, RSS feed
Media Module Upload, image resizing, thumbnails, bulk delete, picker modal
Analytics Module Page-view tracking, date range filter, period comparison, CSV export
Sitemap Module Auto XML sitemap, SitemapProvider interface
Webhooks Module Outgoing webhooks, HMAC signing, delivery logs
Pages Module Static page CRUD and public rendering
Gallery Module Photo albums, lightbox, drag-to-reorder
Contact Module Public form, admin inbox, email notifications
Videos Module YouTube/Vimeo embeds, poster thumbnails
CLI Module scaffold and bundle creation commands
2FA Module TOTP setup, backup codes, trusted devices
Forms Module Form builder, submissions, honeypot, CSV export
Newsletter Module Subscriber management, double opt-in, HTML campaigns
Events Module Event listings, RSVP, Canvas calendar
i18n Guide Translation files, __() helper, locale routing, Translations admin
Members Module Front-end accounts, email verification, SiteAuth
REST API Endpoints, API keys, rate limits, response envelope
Caching Full-page cache, fragment cache, asset fingerprinting

Examples

File Description
examples/hello-module.php Minimal module scaffold with module.json and Module.php
examples/using-auth.php Auth::check, Auth::can, requirePermission
examples/custom-settings.php Reading/writing site settings
examples/orm-queries.php Common ORM query patterns
examples/media-picker-integration.php Adding a media picker to a module form
examples/sending-mail.php Sending email with Mailer and MailTemplate
examples/using-themes.php ThemeEngine, dark/light mode, custom theme layout
examples/dispatching-webhooks.php Dispatching webhook events from a module controller
examples/sitemap-provider.php Implementing SitemapProvider to contribute URLs to /sitemap.xml

Security

Found a security issue? Please report it privately before disclosing publicly.

See docs/security.md for a full description of Vertext's security model.


License

MIT License - see LICENSE file for details.

About

Vertext: You Decide What's Possible.

Resources

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages