A modern self-hostable web platform: CMS · themes · plugins · Python services. Built on Laravel 12 + Filament 3 + PostgreSQL.
⚠️ Pre-alpha. Active development, not production-ready. No stable release yet. First public milestone planned as v1.0.0.
OnFlaude is a self-hostable web platform that treats a CMS, a theme library, a plugin system, and Python-based automation services as first-class citizens of a single installation.
You install OnFlaude once — and from one admin panel you can:
- Run your content site (pages, posts, media, SEO)
- Install and switch themes, create child-themes
- Install plugins that extend the admin and the public site
- Launch and monitor Python services — Telegram bots, n8n workflows, parsers, AI agents — without jumping to a separate server
Built-in, not bolted on:
- Security first — no legacy surface area, custom admin path, hardened session handling
- Own theme & plugin library — each theme/plugin is a self-contained module with manifest metadata
- Python as a peer — the platform knows how to install, start, stop, and talk to Python services via a standard
service.jsoncontract
This is the vision. The README below separates what already works, what is in progress, and what is planned.
The problem with the current landscape:
- Legacy CMSs carry years of compromise in their security model
- Modern Laravel CMSs stop at content — they don't help you run a Telegram bot alongside your site
- Flat-file CMSs sacrifice structured content for simplicity
OnFlaude aims for a different point on the map: a strict modern core with a first-class extension story for both PHP plugins and Python services.
Core & DB [█████████████████░░░] 85%
Admin UI [████████████░░░░░░░░] 60%
Media library [████████████░░░░░░░░] 60%
Theme system [████████░░░░░░░░░░░░] 40%
Plugin system [█░░░░░░░░░░░░░░░░░░░] 5%
Python services [░░░░░░░░░░░░░░░░░░░░] 0%
Documentation [░░░░░░░░░░░░░░░░░░░░] 0%
Localization [░░░░░░░░░░░░░░░░░░░░] 0%
Overall: ~55% toward v1.0.0.
| Layer | Technology |
|---|---|
| Backend | PHP 8.3, Laravel 12 |
| Admin panel | Filament 3.3 (Livewire v3, Alpine.js) |
| Database | PostgreSQL 16 |
| Frontend build | Vite 7, PostCSS, Tailwind CSS v3 |
| Editor | TipTap (via awcodes/filament-tiptap-editor) |
| Image processing | Intervention Image + Imagick |
| Testing | Pest |
| Web server | Nginx 1.24 |
| OS (reference) | Ubuntu 24.04 LTS |
Optional (for plugins that ship Python services):
- Python 3.10+, pip, venv
- systemd (for managed auto-restart)
- Custom admin URL path (stored in DB
options, not hardcoded) config/onflaude.php— platform settings (paths, active theme, locale)- View namespaces:
theme::for the public site,admin::for the admin panel - Full ITCSS CSS architecture for both theme and admin panel
- Hybrid Vite build:
vite.config.js(theme) +vite.filament.config.js(admin)
optionstable — global site settings (WordPress-likewp_optionsanalog)- Pages, Posts, Categories, Tags, Media, MediaFolders, Users
- Users with roles (admin/editor/author) and per-user time preferences
- Custom branding (logo, favicon, color scheme)
- Dashboard with WelcomeBanner (time-of-day greeting) and Screen Options panel
- Collapsible sidebar with accordion (single-open groups)
- Custom top bar: site favicon, Add New dropdown, global search
- Full-width content layout
- Settings page (UI over
optionstable)
- TipTap rich editor with full toolbar
- 2+1 layout: main column + collapsible right sidebar (metadata, categories, tags, featured image)
- Featured image via MediaPicker with instant preview
- Builder blocks: heading, text, image, code, quote
- Own core — no third-party media packages
- Folders, thumbnails (400×400 auto-generated), renamable files
- MIME validation through
finfo - Files served through
MediaController, not public disk exposure
themes/default/— flat theme structure (noresources/wrapper)theme.jsonmanifest (name, slug, version, author, requires, supports, screenshot)- Routing for pages, posts, categories, tags + catch-all slug
- ITCSS CSS layers (settings / base / layout / components / pages / utilities)
resources/admin-bar/— CSS + JS + Blade, injected byInjectAdminBarmiddleware- Any theme automatically gets the admin bar without
@includeor CSS import - Positioning via
body:has(.of-admin-bar)— themes stay admin-bar-agnostic
- Recovery endpoint authenticated via APP_KEY prefix
- Daily PostgreSQL backups (cron, 7-day rotation)
- Pest test suite (~13 baseline tests)
- Theme installer (ZIP upload →
themes/) - Theme Library UI (browse, preview, activate themes)
- Child-theme support (WordPress-style
{name}-childconvention) - Drag-to-resize dashboard widgets
- MediaPicker modal migration from Filament Action to Alpine-driven modal (resolves a Livewire wire-cycle conflict)
- Populating empty ITCSS layers of the default theme with real styles
- Mobile adaptation (< 1024px)
plugin.jsonmanifest with versioning and compatibility declarations- Plugin installer (ZIP upload →
plugins/) - First killer plugin: Visual Builder (drag-and-drop block editor for pages)
- Additional planned:
n8n-connector,telegram-admin,vpn-manager
- Standard
service.jsoncontract (entrypoint, requirements, systemd config, API endpoints) app/Services/ServiceManager.php— start/stop/restart/statusapp/Services/ServiceInstaller.php—python -m venv,pip install, systemd unit setupapp/Services/ServiceRegistry.php— scanservices/andplugins/*/service/- Filament Services page: status, logs in real-time, Start/Stop/Restart buttons
- First ported services:
hh-parser(HH.ru vacancies),freelance-bot(multi-platform AI parser)
- Two-factor authentication via email code (own implementation, no third-party packages)
- Audit log for admin actions
- Honeypot on the login form
- Icons on collapsed sidebar with tooltips
- Drag-and-drop widget reordering on Dashboard
- Dark/Light theme switch per user
- Interface scale setting
- "For Developers" landing page in admin
The dev instance is not publicly accessible yet — screenshots are the current way to see OnFlaude in action. These are captured from the active development branch.
More screenshots in
docs/screenshots/.
A simplified view of the repo layout:
repo/
├── app/
│ ├── Filament/ Admin panel (Resources, Pages, Widgets)
│ ├── Http/Middleware/
│ │ └── InjectAdminBar.php Platform-level admin bar injection
│ ├── Livewire/ Livewire components (MediaPicker)
│ ├── Models/ Eloquent models
│ └── Providers/ AppServiceProvider, AdminPanelProvider
│
├── config/
│ └── onflaude.php Platform settings (paths, theme, locale)
│
├── resources/
│ ├── admin/ Admin panel sources (ITCSS: CSS/JS + Blade)
│ │ ├── css/ theme.css + settings/base/layout/components/pages/utilities
│ │ ├── js/ index.js + components/
│ │ └── views/ Blade, namespace: admin::
│ ├── admin-bar/ Platform-level admin bar (injected by middleware)
│ └── views/ System Blade (recovery, welcome)
│
├── themes/ All themes live here
│ └── default/ Bundled default theme
│ ├── theme.json Theme manifest
│ ├── assets/ Static (logo, favicon)
│ ├── css/ ITCSS layers
│ ├── js/ Entry + bootstrap
│ └── views/ Blade, namespace: theme::
│
├── plugins/ (empty — coming)
├── services/ (for platform-level Python services)
├── storage/app/media/ Media storage
└── public/build/ Vite output
Key design decisions:
- Flat theme structure — themes are self-contained modules without a
resources/wrapper. Drop a folder inthemes/and it's installable. - Two Vite configs —
vite.config.jsfor the theme,vite.filament.config.jsfor the admin panel. Not unified intentionally, for isolation and Filament 3 compatibility. - Platform-level admin bar — lives in
resources/admin-bar/, injected via middleware. Any theme gets it automatically. - View namespaces everywhere —
theme::pages.blog,admin::pages.dashboard. Nofrontend.*orfilament.*references in the code.
- PHP 8.3+ with extensions:
pdo_pgsql,gdorimagick,fileinfo,mbstring - PostgreSQL 16+
- Node.js 20+ (build only, can be on a dev machine)
- Composer 2+
- Nginx or Apache
git clone https://github.com/Magbusjap/onflaude.git
cd onflaude
composer install
npm ci # IMPORTANT: ci, not install — see note below
npm run build:all # builds theme + admin in parallel
cp .env.example .env
php artisan key:generate
# Configure DB_* variables in .env, then:
php artisan migrate
php artisan storage:linkThe exact Tailwind CSS version (tailwindcss@3.4.19) is pinned only in package-lock.json, not in package.json. Running npm install may pull the wrong major version and break the theme build.
Always use npm ci for a clean install.
If the lock file gets lost:
git checkout master -- package-lock.json
rm -rf node_modules
npm cinpm run build (theme) clears public/build/ entirely — default Vite behavior. Running npm run build:filament before npm run build means the admin CSS gets wiped out.
Always in this order:
npm run build && npm run build:filamentOr use the combined script:
npm run build:allnpm run dev # theme
npm run dev:filament # admin (separate terminal)php artisan testThe admin URL is stored in the DB (options table, key admin_path), not hardcoded. Change via the Settings page or directly in the DB.
Set in options.active_theme or overridden via ONFLAUDE_THEME env variable.
- v0.2 — Plugin system foundation (installer, manifest, first plugin
visual-builder) - v0.3 — Python services (ServiceManager, Installer, Registry, Services page)
- v0.4 — Security hardening (2FA, audit log, honeypot)
- v0.5 — Theme Library UI, child-themes, 404 page, mobile adaptation
- v0.6 — Documentation (User Docs + Developer Docs), English + Russian
- v1.0 — First stable release: full plugin/theme API, Python service contract, production-ready
Progress is tracked as branches and pull requests. See issues.
OnFlaude is currently in pre-alpha — the author is building the foundation as a solo project. External pull requests are not accepted yet to keep the architecture coherent during early design.
What you can do now:
- ⭐ Star the repo if the direction resonates with you
- 👀 Watch to follow the progress
- 💬 Open issues — bugs, ideas, architectural questions are welcome
- 💭 Discussions — share feedback on the pitch and roadmap
Once v0.5 is out and the plugin/theme contracts stabilize, contributing guidelines will be published and PRs will open.
Mikhail Ankudinov (Mikhail Bozheslav) Laravel & DevOps developer · Perm, Russia
- Portfolio: bozheslav.ru
- GitHub: @Magbusjap
MIT — do what you want, keep the copyright.
OnFlaude · v0.1.0-dev · Built with Laravel, Filament, and a lot of ITCSS.




