PatoLab ships with a single-command dev launcher that orchestrates all the processes you need — the Laravel HTTP server, the database queue worker, the log watcher, and the Vite HMR server — so you can go from a fresh clone to a fully working local environment in a matter of minutes. This guide walks through every step, from installing dependencies to logging in with a seeded administrator account.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/lerichardv/patolab-platform/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you begin, make sure the following are available on your system:- PHP 8.3 or higher with the
gd,pdo_mysql,mbstring,bcmath,zip, andopcacheextensions - Composer (dependency manager for PHP)
- Node.js & npm (Node 20+ recommended)
- A database — MySQL, PostgreSQL, or SQLite (SQLite requires no additional setup)
- Chromium or Google Chrome — required for PDF generation via Spatie Browsershot
Setup Steps
Install npm packages
Install all frontend dependencies defined in
package.json:Note: The project’s.npmrcsetsignore-scripts=true, so npm lifecycle scripts will not run automatically. This is intentional and expected.
Configure your environment
Copy the example environment file and open it in your editor:For a SQLite setup (default, no server needed), no changes are required — the relevant block already reads:For a MySQL or PostgreSQL setup, uncomment and fill in the database keys:
.env
.env
Link storage
Create a symbolic link from
public/storage to storage/app/public so uploaded files are web-accessible:Generate Wayfinder JS routes
PatoLab uses Laravel Wayfinder to generate type-safe TypeScript route and form helpers from your Laravel routes. Run this once after setup (and again after any route changes):This writes the generated files to
resources/js/actions/, resources/js/routes/, and resources/js/wayfinder/. These directories are git-ignored and must be regenerated in each environment.Run migrations and seed the database
Create all database tables and populate them with roles, priorities, specimen types, referrers, and test users:
Start the development servers
Launch all development processes concurrently with a single command:This runs the following four processes in parallel via
Open http://localhost:8000 in your browser once all processes have started.
concurrently:| Process | Command | Purpose |
|---|---|---|
| server | php artisan serve | Laravel HTTP server on http://localhost:8000 |
| queue | php artisan queue:listen --tries=1 --timeout=0 | Processes queued jobs (invoice generation, notifications) |
| logs | php artisan pail --timeout=0 | Streams application logs to the terminal |
| vite | npm run dev | Vite HMR server for React/TypeScript hot-reloading |
Seeded Test Credentials
After runningphp artisan migrate:fresh --seed, the following accounts are available:
| Name | Password | Notes | |
|---|---|---|---|
| Ricardo Valladares | ricardo.valladares.triminio@gmail.com | 12345678 | Primary administrator |
| Ana Urbina | ana.urbina@patolab.org | 12345678 | Administrator |
| Pedro Castro | pedro.castro@patolab.org | 12345678 | Administrator |
| Rolando Urbina | davidursal23@gmail.com | 12345678 | Administrator |
Remember to re-run
php artisan wayfinder:generate --with-form any time you add, rename, or remove a Laravel route. The generated TypeScript helpers in resources/js/routes/ and resources/js/actions/ are derived entirely from your route definitions and will become stale otherwise, causing TypeScript type errors on the frontend.