Mini CMS is a lightweight multilingual CMS for small websites. It is built with Laravel, Filament, Livewire, Tailwind CSS, Vite, and SQLite.
It is designed for personal sites, portfolios, business websites, and content websites that need a practical admin panel, multilingual public pages, media, galleries, news, menus, themes, roles, and production-oriented deployment documentation.
Current status: v0.2.0-beta production candidate.
- Multilingual public website: English, Persian/Farsi, Arabic
- RTL support for Persian and Arabic
- Admin panel for content editors and administrators
- Users, roles, and permissions
- Site settings with logo, theme, language, contact, and social controls
- Nested menus with desktop dropdowns and mobile navigation
- Pages with reusable content blocks
- News posts with listing/detail pages
- Galleries and media library
- Four public themes: personal, business, portfolio, blog
- Dynamic SEO metadata, canonical URLs, hreflang, robots.txt, and sitemap generation
- SQLite MVP production hardening
- Browser-based shared-hosting installer
- GitHub Actions source ZIP and installable ZIP artifacts
Screenshots are intentionally left as placeholders until the public demo content is finalized.
- Public homepage:
docs/screenshots/homepage.png - Admin dashboard:
docs/screenshots/admin-dashboard.png - Page builder blocks:
docs/screenshots/page-blocks.png - Gallery page:
docs/screenshots/gallery.png
- Laravel 13.8.0
- Filament 5.6.2
- Livewire 4.3.0
- Tailwind CSS 4.3.0
- Vite 8.0.11
- SQLite
- PHP 8.3+
- Composer
- Node.js and npm
- SQLite extension for PHP
For the installable release ZIP, Composer and Node/npm are not required on the hosting account because vendor/ and public/build are included.
For cPanel, HestiaCP, DirectAdmin, and similar hosting, use the installable ZIP from GitHub Releases.
- Upload and extract the installable ZIP.
- Point the domain document root to the extracted
public/folder. - Open
https://your-domain.com/install.php. - Follow the wizard.
- Click Delete installer securely after success.
Read docs/INSTALLER.md before using the installer. Do not run install.php on an already configured local development copy unless it is disposable, because it can update .env, the SQLite database, users, storage links, caches, and sitemap output.
Subdirectory installs are supported. If the final URL is https://example.com/cms, enter that exact Installation URL in the wizard. The installer stores APP_URL=https://example.com/cms and sets ASSET_URL=https://example.com/cms for built assets.
The installer includes a diagnostics mode:
install.php?action=diagnostics
It checks PHP extensions, missing vendor/build files, document root safety, public exposure of private files, Hestia hints, and PHP open_basedir restrictions. On Hestia, document root can be correct while open_basedir still blocks Laravel from loading vendor/autoload.php; see docs/INSTALLER.md.
composer install
npm install
cp .env.example .env
php artisan key:generate
php artisan migrate
php artisan db:seed
php artisan storage:link
npm run build
php artisan serve --host=127.0.0.1 --port=8001Open:
http://127.0.0.1:8001
http://127.0.0.1:8001/admin
Demo admin credentials are not hardcoded in source. Configure them with:
CMS_ADMIN_NAME=Admin
CMS_ADMIN_EMAIL=admin@example.com
CMS_ADMIN_PASSWORD=your-local-demo-password
If CMS_ADMIN_PASSWORD is empty during seeding, the seeder creates a random password for safety.
Recommended local .env values:
FILESYSTEM_DISK=public
SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync
Run tests and build:
composer validate
npm run build
php artisan testFor SQLite checks:
php artisan sqlite:healthFor upload/gallery storage checks:
php artisan storage:healthRead DEPLOYMENT.md before deploying.
Minimum production environment:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com
FILESYSTEM_DISK=public
DB_CONNECTION=sqlite
The web server document root must point to Laravel /public.
On HestiaCP, use:
Web -> Domain -> Edit -> Advanced Options
Enable Custom document root
Point to: your domain
Directory: public
Typical production commands:
composer install --no-dev --optimize-autoloader
npm ci
npm run build
php artisan migrate --force
php artisan storage:link
php artisan storage:health
php artisan sitemap:generate
php artisan optimizeIf gallery images return 404 under /storage/galleries/items/..., public/storage is not correctly serving storage/app/public. Run php artisan storage:health, then fix php artisan storage:link, symlink permissions, or hosting open_basedir rules.
Admin quick start after login:
- Site Settings
- Upload logo
- Create header/footer menus
- Create pages
- Upload media and create galleries
- Publish content
- Generate sitemap
SQLite is the default MVP database. It is appropriate for single-server CMS installs, low-to-medium traffic, read-heavy sites, low concurrent writes, and a small admin team.
PostgreSQL is the recommended future upgrade path for high-concurrency, multi-server, SaaS, multi-tenant, analytics-heavy, or write-heavy workloads.
SQLite production settings include WAL mode, foreign keys, busy_timeout, and a health check command.
- Deployment
- Browser installer
- Update strategy
- Backup and restore
- Production security checklist
- Post-deploy QA checklist
- Roadmap
- Contributing
- Security policy
- Code of conduct
GitHub Actions creates two ZIP types:
mini-cms-source-*: clean source package for developers. It excludesvendor/and requires Composer/Node for setup.mini-cms-installable-*: shared-hosting package withvendor/,public/build,install.php,public/install.php, and installer support files included.
On push to main:
- Temporary workflow artifacts are uploaded for source and installable packages.
- Artifact retention is 30 days.
On tag push matching v*:
- A GitHub Release is created.
- Source and installable ZIPs are attached to the release.
Create a release:
git tag v0.2.0-beta
git push origin v0.2.0-betaOr use:
.\scripts\release.ps1 -Version 0.2.0The release helper does not create or commit ZIP files locally. GitHub creates the release ZIP after the tag is pushed.
Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.
Before submitting:
composer validate
npm run build
php artisan testDo not include secrets, .env, SQLite database files, storage uploads, vendor, node_modules, public/storage, public/sitemap.xml, or ZIP artifacts.
laravel, filament, cms, sqlite, multilingual, tailwind, livewire
Mini CMS is open-sourced under the MIT license.