Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ariellukezz/admision-web/llms.txt

Use this file to discover all available pages before exploring further.

Sistema de Admisión Web is built as a monolithic full-stack application that uses Laravel 11 as the backend and Vue 3 as the frontend, stitched together by Inertia.js. There is no separate API consumed by the frontend — Inertia acts as the bridge, letting Laravel controllers return Vue page components directly instead of JSON responses. The browser only ever loads a single root Blade template (resources/views/app.blade.php), and every subsequent navigation is an Inertia visit that swaps the active Vue component without a full page reload, giving applicants and administrators an SPA experience with none of the complexity of a decoupled frontend.

Backend Stack

The server-side is a standard Laravel 11 application requiring PHP 8.2 or higher.
LayerTechnologyPurpose
FrameworkLaravel 11HTTP routing, middleware, Eloquent ORM, queues, events
LanguagePHP 8.2+Application runtime
DatabaseMySQLPrimary relational data store (users, preinscripciones, procesos, documentos, etc.)
Cache / QueueRedis (predis/predis ^3.4)Session cache, queue backend for background jobs
AuthLaravel Breeze + Sanctum + SocialiteEmail/password auth, API tokens, Google OAuth
PermissionsSpatie Laravel Permission ^6.0 + custom id_rol middlewareDual-layer role and permission control

PDF Generation

The platform uses three different PDF libraries depending on the document type:
// dompdf (barryvdh/laravel-dompdf ^2.0)
// → Used for simpler HTML-to-PDF conversions (solicitud forms, biometric reports)

// mPDF (mpdf/mpdf ^8.2 via carlos-meneses/laravel-mpdf ^2.1)
// → Used for documents requiring advanced Unicode/RTL or complex layouts

// TCPDF (tecnickcom/tcpdf ^6.6)
// → Used for certificates and documents requiring barcode/QR embedding
Additionally, setasign/fpdi and setasign/fpdf are available for overlaying data on existing PDF templates, and milon/barcode ^11.0 handles barcode generation within PDF documents.

Excel Export

Excel exports across the admin panel (applicant lists, inscriptions, reports) use maatwebsite/excel ^3.1, which wraps PhpSpreadsheet and integrates cleanly with Laravel’s collection pipeline.

Push Notifications

Real-time notifications (applicant document status changes, reviewer alerts) are delivered via Firebase Cloud Messaging (FCM) using the kreait/firebase-php ^7.24 SDK on the server side and the firebase ^12.14.0 JavaScript SDK on the client. FCM tokens are stored in the fcm_tokens table and associated with each User record through the fcmTokens() relationship.

Frontend Stack

The frontend lives entirely inside resources/js/ and is bundled by Vite.
LayerTechnologyVersion
FrameworkVue 3 (Composition API)^3.2.41
SPA bridgeInertia.js (@inertiajs/vue3)^1.0.0
UI componentsAnt Design Vue^4.2.6
Utility CSSTailwind CSS(via tailwind.config.js)
BundlerVite(via vite.config.js)
Chartsvue-chartjs + Chart.js^5.2.0 / ^4.3.0
Date helpersday.js, date-fns^1.11.7 / ^2.30.0
PDF viewerpdfjs-dist^5.4.530
Utilities@vueuse/core, Ziggy^10.5.0 / ^1.8.2
Ziggy (tightenco/ziggy) exposes all named Laravel routes to the Vue layer so components can call route('revisor') or route('admin-dashboard') without hardcoding URLs.

Route Structure

Rather than one monolithic web.php, routes are split across multiple files, each loaded at the bottom of routes/web.php:
require __DIR__.'/auth.php';     // Login, register, password reset (Laravel Breeze)
require __DIR__.'/revisor.php';  // /revisor/* — document review module
require __DIR__.'/segundas.php'; // /segundas/* — segundas admissions module
require __DIR__.'/adminv2.php';  // /admin/v2/* — next-gen admin pages
// web.php itself also defines inline route groups:
//   Route::prefix('admin')->middleware('auth','admin')->group(...)       → /admin/*
//   Route::prefix('postulante')->middleware('auth')->group(...)          → /postulante/*
//   Route::prefix('simulacro')->middleware('auth','simulacro')->group(…) → /simulacro/*
//   Route::prefix('calificacion')->middleware('auth','calificador')      → /calificacion/*
Each route group is protected by its corresponding role middleware (see Roles & Permissions).

Shared Props: HandleInertiaRequests

Every Inertia page response automatically receives a set of shared props injected by App\Http\Middleware\HandleInertiaRequests. These props are available in every Vue component via usePage().props:
// Available globally via Inertia's usePage()
{
  auth: {
    user: { ...userAttributes },  // null when unauthenticated
    permissions: ['view.read', 'documento.upload', ...] // RBAC permission codes
  },
  proceso_actual: {
    id: 12,
    nombre: "Admisión Ordinaria 2025-I",
    anio: 2025
  },
  flash: {
    success: "Operación completada"  // session flash message
  },
  notificacionesNoLeidas: 3  // only non-zero for Revisores (id_rol == 2)
}

Request Lifecycle

The following table traces what happens when a user navigates to an admin page:
StepActorWhat happens
1BrowserSends GET /admin/dashboard with Inertia headers (X-Inertia: true)
2Laravel RouterMatches the admin prefix group; runs auth then Admin middleware
3Admin middlewareChecks auth()->user()->id_rol == 1; aborts 403 if false
4HandleInertiaRequestsMerges shared props (user, permissions, proceso_actual, flash) into the response
5ControllerReturns Inertia::render('Admin/Dashboard/Index', [...])
6Inertia (server)Serialises the component name + props as JSON; wraps in app.blade.php on first visit
7Vue 3 (client)Resolves the component via dynamic import(), hydrates props, renders the page
8Subsequent navInertia intercepts link clicks, replaces only the active component — no full reload

Third-Party Service Integrations

ServiceIntegration pointPurpose
Google OAuthlaravel/socialite + GoogleControllerApplicants sign in with Google; new users are assigned id_rol = 8
RENIECReniecController (internal HTTP call)Identity validation against the national ID registry
Banco de la NaciónPagoBancoControllerPayment verification for admission fees
Firebase FCMkreait/firebase-php + firebase JS SDKPush notifications to reviewers and applicants
SMTP (multi-account)SmtpAccountControllerConfigurable outbound email accounts per process

Build docs developers (and LLMs) love