No description
The referral_commissions migration FK-referenced 'orders' and 'invoices' tables, but neither is ever created by any migration in the codebase. MariaDB silently accepted the FKs (checks disabled during migration), Postgres rejects strictly. Changed both columns to plain nullable unsignedBigInteger — same column shape, no FK constraint. Data still references orders/invoices by id via application logic. Proper FKs can be added in a follow-up migration once orders/invoices migrations land. Co-Authored-By: Virgil <virgil@lethean.io> |
||
|---|---|---|
| .forgejo/workflows | ||
| .gemini | ||
| .github | ||
| changelog/2026/jan | ||
| Concerns | ||
| Console | ||
| Contracts | ||
| Controllers | ||
| Data | ||
| database/migrations | ||
| docs | ||
| Events | ||
| Exceptions | ||
| Jobs | ||
| Lang/en_GB | ||
| Listeners | ||
| Mcp/Tools | ||
| Middleware | ||
| Migrations | ||
| Models | ||
| Notifications | ||
| routes | ||
| Service | ||
| Services | ||
| tests | ||
| View | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| Boot.php | ||
| CLAUDE.md | ||
| cliff.toml | ||
| composer.json | ||
| config.php | ||
| GEMINI.md | ||
| LICENSE | ||
| phpunit.xml | ||
| README.md | ||
| TODO.md | ||
Core PHP Framework Project
A modular monolith Laravel application built with Core PHP Framework.
Features
- Core Framework - Event-driven module system with lazy loading
- Admin Panel - Livewire-powered admin interface with Flux UI
- REST API - Scoped API keys, rate limiting, webhooks, OpenAPI docs
- MCP Tools - Model Context Protocol for AI agent integration
Requirements
- PHP 8.2+
- Composer 2.x
- SQLite (default) or MySQL/PostgreSQL
- Node.js 18+ (for frontend assets)
Installation
# Clone or create from template
git clone https://github.com/host-uk/core-template.git my-project
cd my-project
# Install dependencies
composer install
npm install
# Configure environment
cp .env.example .env
php artisan key:generate
# Set up database
touch database/database.sqlite
php artisan migrate
# Start development server
php artisan serve
Visit: http://localhost:8000
Project Structure
app/
├── Console/ # Artisan commands
├── Http/ # Controllers & Middleware
├── Models/ # Eloquent models
├── Mod/ # Your custom modules
└── Providers/ # Service providers
config/
└── core.php # Core framework configuration
routes/
├── web.php # Public web routes
├── api.php # REST API routes
└── console.php # Artisan commands
Creating Modules
# Create a new module with all features
php artisan make:mod Blog --all
# Create module with specific features
php artisan make:mod Shop --web --api --admin
Modules follow the event-driven pattern:
<?php
namespace App\Mod\Blog;
use Core\Events\WebRoutesRegistering;
use Core\Events\ApiRoutesRegistering;
use Core\Events\AdminPanelBooting;
class Boot
{
public static array $listens = [
WebRoutesRegistering::class => 'onWebRoutes',
ApiRoutesRegistering::class => 'onApiRoutes',
AdminPanelBooting::class => 'onAdminPanel',
];
public function onWebRoutes(WebRoutesRegistering $event): void
{
$event->routes(fn() => require __DIR__.'/Routes/web.php');
$event->views('blog', __DIR__.'/Views');
}
}
Core Packages
| Package | Description |
|---|---|
host-uk/core |
Core framework components |
host-uk/core-admin |
Admin panel & Livewire modals |
host-uk/core-api |
REST API with scopes & webhooks |
host-uk/core-mcp |
Model Context Protocol tools |
Flux Pro (Optional)
This template uses the free Flux UI components. If you have a Flux Pro license:
# Configure authentication
composer config http-basic.composer.fluxui.dev your-email your-license-key
# Add the repository
composer config repositories.flux-pro composer https://composer.fluxui.dev
# Install Flux Pro
composer require livewire/flux-pro
Documentation
License
EUPL-1.2 (European Union Public Licence)