This quickstart walks you through spinning up a complete ORVIAN development environment on your local machine. By default ORVIAN uses SQLite, so you do not need a running MySQL server, a Docker daemon, or any external service to get the application up and running. All you need is PHP, Composer, and Node. Docker is listed as optional for teams that want MySQL or Redis parity with production from day one.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Elian-D/ORVIAN/llms.txt
Use this file to discover all available pages before exploring further.
Install Prerequisites
Make sure the following tools are available on your machine before proceeding:
Verify your PHP version:
| Tool | Minimum version | Notes |
|---|---|---|
| PHP | 8.2 | With pdo_sqlite, mbstring, xml, curl, gd extensions |
| Composer | 2.x | getcomposer.org |
| Node.js | 18 LTS | Required to build the Tailwind/Vite frontend |
| Git | Any recent | For cloning the repository |
| Docker (optional) | 24+ | Only needed if you want MySQL + Redis in dev |
Clone the Repository
composer.json scripts that drive the entire local workflow.Copy the Environment File
.env.example sets DB_CONNECTION=sqlite with the host/port/name fields commented out. This means Laravel will automatically use database/database.sqlite — no database server required.For production or MySQL-based local development, uncomment the
DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, and DB_PASSWORD lines and change DB_CONNECTION to mysql. You will also want to configure the third-party service variables at the bottom of the file (FACIAL_API_URL, CHATWOOT_*, EVOLUTION_API_*) before enabling those modules.Run composer setup
composer install— downloads all PHP dependencies fromvendor/php -r "file_exists('.env') || copy('.env.example', '.env');"— copies.env.exampleto.envif no.envfile exists yetphp artisan key:generate— writesAPP_KEYinto your.envphp artisan migrate --force— creates all database tables (SQLite file is created if missing)npm install— installs all Node packages including Vite, Tailwind, and Alpine.jsnpm run build— compiles and fingerprints all frontend assets intopublic/build/
Start the Development Stack
npx concurrently to launch four processes in parallel, each color-coded in the terminal:| Color | Process | Command |
|---|---|---|
| 🔵 Blue | Laravel HTTP server | php artisan serve |
| 🟣 Purple | Queue worker | php artisan queue:listen --tries=1 --timeout=0 |
| 🔴 Red | Log tail (Pail) | php artisan pail --timeout=0 |
| 🟠 Orange | Vite dev server (HMR) | npm run dev |
Ctrl+C) stops all of them (--kill-others flag). The queue worker is particularly important: Excel imports, WhatsApp alerts, and biometric encoding jobs all run asynchronously through the database queue.Complete the Owner Installation
Open your browser and navigate to:This is the Owner self-installation screen — it only appears once, on a fresh installation with no Owner account yet created. Fill in your name, email, and password to create the platform’s superadmin account.After registration you will be redirected to the Admin Hub at
/admin/hub, where you manage all schools on the platform.Configure Your First School
From the Admin Hub, click New School or navigate directly to:The School Setup Wizard walks you through five steps:
- Plan selection — choose the feature tier for this school
- School details — name, MINERD code, province, municipality, shift (tanda)
- Academic structure — select active levels and grades; the wizard auto-generates sections
- Academic year — start and end dates (calculated from the current month by default)
- Director account — creates the school’s principal user and fires the
SchoolConfiguredevent, which bootstraps the full academic structure asynchronously
http://localhost:8000 and access the school panel at /app/dashboard.Running Tests
ORVIAN’s test suite is built with Pest v4. Tests use an in-memory SQLite database by default, so they run without any database server.composer test is equivalent to:
Demo Data
For development and UI testing, ORVIAN ships with a master demo seeder command that generates realistic attendance history for a school.Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
--school_id | integer | (required) | The database ID of the school to seed. Find it in /admin/schools. |
--students | integer | 75 | Number of students to create and distribute across active sections. Maximum 150. |
--days | integer | 30 | Number of calendar days of attendance history to generate, counting back from today. Weekends are automatically skipped. |
--fresh | flag | false | Destructive. Deletes all existing attendance records for the school before seeding. Never use on a school with real data. |
What the seeder generates
The command runs in five sequential phases:- Students — creates up to 150 students (Dominican Spanish names) distributed evenly across active sections. QR codes are generated automatically by
StudentObserver. - Teachers — creates three demo teachers: María González, Carlos Reyes, and Ana Castillo (uses
firstOrCreate, safe to re-run). - Subjects & Assignments — creates or reuses Lengua Española, Matemáticas, and Ciencias Sociales. Generates a
TeacherSubjectSectionrecord for every teacher × section × academic year combination. - Attendance Records — for each business day in the range, generates
DailyAttendanceSession,PlantelAttendanceRecord, andClassroomAttendanceRecordrows in bulk chunks of 200. Plantel distribution: 80% present, 10% late, 5% absent, 5% excused. Classroom distribution for present students: 75% present, 10% late, 10% absent (triggers pasilleo detection), 5% excused. - Excuses — creates 3 approved
AttendanceExcuserecords on random students.
The
--fresh flag prints an explicit console warning before deleting records. It is intended only for development reset workflows. Never run it against a school with real attendance data.What’s Next
Architecture
Learn how ORVIAN’s modular monolith is structured — directory layout, Livewire patterns, the service layer, and how multi-tenancy is enforced at the Eloquent level.
Multi-Tenancy
Deep dive into how each school is isolated as a tenant: global scopes,
IdentifyTenant middleware, and how Spatie Permission’s teams mode is used with school_id.Attendance Module
Understand the dual-domain attendance model (Plantel + Aula), cross-validation rules, the three capture methods, and how the daily session lifecycle works.
Academic Module
Explore student and teacher management, the SIGERD Excel importer, biometric enrollment, and how subjects are assigned to teachers by section and academic year.