Skip to content

Introduction

Overview

Sutomo School Management is a multi-tenant school administration platform built on a modular monolith architecture. All code lives in a single repository but is organized by domain (Academic, Recruitment, Financial, etc.) to keep concerns separated and prepare for potential future extraction into microservices.

Technology Stack

LayerTechnologyPurpose
ServerFrankenPHP (Caddy + PHP 8.4)HTTP server + Laravel Octane
BackendLaravel 13 + OctaneApplication framework, API, business logic
Frontend (Public)Inertia.js v3 + Svelte 5 + Tailwind v4Public-facing pages (school profile, admission, careers)
Admin PanelFilament v5Admin CRUD, resources, relation managers
DocumentationVitepressInternal developer handbooks
DatabasePostgreSQLPrimary data store
Cache / QueueRedis + Laravel HorizonSessions, cache, job queue
MonitoringPrometheus + Loki + GrafanaMetrics, logs, dashboards
QueueLaravel HorizonJob management dashboard

Folder Structure

sutomo-school-management/
├── app/                          # Laravel application code
│   ├── Enums/                    # PHP enums by domain
│   ├── Filament/                 # Filament panel configuration
│   ├── Http/
│   │   ├── Controllers/          # Controllers organized by domain
│   │   │   ├── Api/              # API controllers
│   │   │   ├── Landing/          # Public landing page controllers
│   │   │   └── ...
│   │   └── Middleware/            # Global + feature middleware
│   ├── Models/                   # Eloquent models by domain
│   ├── Observers/                # Model observers
│   ├── Providers/                # Service providers + Filament panels
│   ├── Services/                 # Business logic services
│   ├── Traits/                   # Shared traits (HasLocalization, HasContact, HasLog, HasAsset)
│   └── Console/Commands/         # Artisan commands
├── bootstrap/
│   └── app.php                   # Middleware registration
├── config/                       # Laravel configuration files
├── database/
│   ├── migrations/               # Versioned migration directories
│   │   ├── v1_0_0/
│   │   ├── v1_1_0/
│   │   └── ...
│   └── seeders/                  # Database seeders by domain
├── docs/                         # Vitepress documentation source
├── handbooks/                    # Published handbook build output
├── lang/                         # Localization files (en.json, id.json)
├── resources/
│   ├── js/                       # Frontend source
│   │   ├── components/           # Atomic design components
│   │   ├── Layouts/              # Page layouts
│   │   ├── lib/                  # Utilities (i18n, styles, format)
│   │   ├── modules/              # Feature modules (stores, services, api)
│   │   └── pages/                # Inertia page components
│   ├── css/                      # Global styles
│   └── views/                    # Blade views (auth emails, etc.)
├── routes/                       # Route definitions
│   ├── api/                      # API routes
│   ├── web/                      # Web routes (Inertia + Blade)
│   └── filament.php              # Filament admin routes
├── tests/                        # Tests
│   ├── Unit/                     # Unit tests
│   ├── Feature/                  # Feature tests
│   └── e2e/                      # Playwright E2E tests
└── docker/                       # Docker configuration

Domain Organization

All models are organized by domain under app/Models/ and app/Filament/Resources/:

Academic/       Recruitment/    Financial/      Geographic/
Institution/    Platform/       News/           Organization/
Support/        Assistant/      ContractManagement/

Each domain model follows this pattern:

Domain/
├── ModelName.php
├── Concerns/
│   ├── HasAttributes.php
│   ├── HasRelations.php
│   └── HasScopes.php
└── Scopes/

Key Files

FilePurpose
bootstrap/app.phpMiddleware registration, service container config
composer.jsonPHP dependencies and autoload configuration
docker-compose.ymlDev environment services (PostgreSQL, Redis, MinIO)
vite.config.tsVite build configuration with Inertia + Wayfinder
tailwind.config.tsTailwind CSS v4 configuration
phpunit.xmlPHPUnit configuration (SQLite for local tests)
playwright.config.tsE2E test configuration