# Architecture
Estimated time: 10 minutes
Difficulty: Intermediate
LaraCoreKit is built on a modular architecture where each feature is isolated into a module with clear boundaries.
Architectural Goals
- Separation of concerns - Features are isolated.
- Scalability - Add new modules without touching core.
- Maintainability - Smaller, focused code areas.
- Reusability - Modules can be reused across projects.
- Testability - Module-level testing is straightforward.
High-Level Design
Application Core
├── Module Loader
├── Global Middleware
├── Shared Layouts
└── Cross-cutting Services
Feature Modules
├── Auth
├── User
├── Blog
├── Media
└── Settings
Core is intentionally minimal. Most business logic belongs in modules.
Request Lifecycle (Simplified)
- Request enters Laravel HTTP kernel.
- Global middleware runs.
- Routes resolve (core + module routes).
- Controller/Livewire from module executes.
- View or JSON response is returned.
Layering Strategy
Core Layer
- Boots module system
- Provides shared helpers/layouts
- Coordinates application-level concerns
Module Layer
Each module owns:
- Domain models
- Routes/controllers/livewire
- Admin resources
- Migrations/seeders
- Views/translations
Infrastructure Layer
- Database, cache, queue, mail
- Filesystem/media
- External services
Why This Works Well
- Teams can work in parallel by module.
- New features are additive, not invasive.
- Refactoring one feature has minimal side effects.
- Optional modules can be distributed as packages.
Design Principles
- Keep
app/small and framework-centric. - Keep feature code inside
modules/{Feature}. - Prefer explicit module contracts over hidden coupling.
- Avoid cross-module direct DB assumptions when possible.
- Use events/services for looser integration.
Typical Data Flow
Example: creating a blog post
- Authenticated user submits form.
- Blog module validates request.
- Blog model persists translated fields.
- Permission checks use shared RBAC system.
- Optional media attachments via Media module.
- Response returns to frontend/admin.
Trade-offs
Benefits
- Better structure for medium/large apps.
- Faster feature onboarding.
- Cleaner ownership boundaries.
Costs
- Slightly more setup for new modules.
- Requires consistent conventions.
- Developers must understand module boot process.
Next Steps
Next: Module System →