- PHP
^8.2 - Laravel
^12.0 - Inertia Laravel
^2.0 - Vue
^3.5 - Vite
^7 - Tailwind CSS
^4 - Laravel MCP
^0.6 - Laravel Boost
^2.2(dev) - MySQL 8, Redis 7, Meilisearch, Mailhog (via Docker Compose)
app/
Http/
Models/
Providers/
Services/
bootstrap/
config/
database/
factories/
migrations/
seeders/
resources/
css/
js/
routes/
tests/
docker/
composer setupThis installs PHP and Node dependencies, creates .env if needed, generates app key, runs migrations, and builds frontend assets.
cp .env.example .env
docker compose up -d
docker compose exec app composer install
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate --seed --force
npm install
npm run devThis project includes Laravel Sail (vendor/bin/sail), but the Docker app service is named app (not laravel.test).
If you use Sail, set the service explicitly:
SAIL_SERVICE=app vendor/bin/sail artisan aboutOr use direct Docker commands:
docker compose exec -T app php artisan aboutcp .env.example .env
# Optional: set APP_URL=https://<lan-host-or-ip> and FORCE_HTTPS=true
# Optional: set TLS_CERT_CN and TLS_CERT_SAN for your LAN hostname/IP SAN entries
docker compose up -d --build nginx- If
docker/nginx/certs/tls.crtanddocker/nginx/certs/tls.keyexist, nginx uses them (works with official CA certs). - If they do not exist, nginx auto-generates a self-signed certificate at startup.
FORCE_HTTPS_REDIRECT=1redirects HTTP (:80) to HTTPS (:443); set0to keep HTTP available for devices that cannot trust your self-signed cert.
composer dev
composer test
composer lint
composer lint:fix
composer analysedocker compose exec app php artisan list
docker compose exec app php artisan test
docker compose exec app php artisan pailnpm run dev
npm run build
npm run lint
npm run lint:check
npm run format
npm run format:checkdocker compose exec app php artisan test
docker compose exec app php artisan test --testsuite=Feature
docker compose exec app php artisan test --testsuite=Unit
docker compose exec app php artisan test tests/Feature/Profile/ProfileManagementTest.phpdocker compose exec app php artisan data:import-legacy-csvThe importer reads:
Shop Drawing Request.csvDrawing Submittal Log.csvFabrication Drawing Log.csv
Admin users can create, restore, and download JSON backups from the Admin > Data Backup page.
phpunit.xml uses:
APP_ENV=testingDB_CONNECTION=sqliteDB_DATABASE=:memory:
From docker-compose.yml:
- App (nginx HTTP):
http://localhost(redirects to HTTPS) - App (nginx HTTPS):
https://localhost - Mailhog UI:
http://localhost:8025 - MySQL:
localhost:3306 - Redis:
localhost:6379 - Meilisearch:
localhost:7700
From database/seeders/DatabaseSeeder.php:
mark@drawingflow.local/passworddetailer@drawingflow.local/password
- Drawing request numbers are generated as
DR-YYYY-####. - Submittal numbers are generated as
SUB-YYYY-####. - Fab queue numbers are generated as
FAB-YYYY-####. - Main workflow pages are under
resources/js/Pages/. - Web routes are in
routes/web.php.
This app has first-party MCP support and Boost installed.
- Project MCP config:
.mcp.json - Boost config:
boost.json - Start Boost MCP (inside container):
docker compose exec -T -e APP_ENV=local -e APP_DEBUG=true app php artisan boost:mcpNote: Boost only registers in local/debug contexts. The command above overrides env vars only for that process.
- Health check MCP with Inspector:
docker compose exec -T app php artisan mcp:inspector- Admin backup/restore page is available at
admin.backups.indexfor JSON backups, restore upload, and backup download. - Backups are now integrity-protected with
schema_versionmetadata and HMAC signatures; restore rejects unsigned/tampered files. - Legacy CSV import command
php artisan data:import-legacy-csvimports shop drawing requests, submittals, and fabrication queue records from the provided legacy CSV files. - Fab Queue detail page now includes a built-in document viewer for submittal files and latest project attachments with inline PDF preview and download.
- Fab Queue and Submittals tables now match the richer Customers table UX with quick table filters and density controls.
- Phase 3 PDF workspace on submittals now supports viewer + markups (circle, arrow, text, highlight, stamp).
- Markup export endpoint provides a JSON export for saved markups.
- Revision comparison is available with side-by-side PDF viewing in the submittal workspace.
- Markup history is shown in the workspace with author and timestamp.
- Notification center now uses short-lived unread-count caching and visibility-aware polling to reduce repeated requests.
- Authentication endpoints now include login and registration rate limiting.
- Internal submittal notes are now available on submittal detail pages for team communication.
- Customer imports now include a downloadable CSV template directly on the Customers index page.
- State fields on customer/project create & edit forms are dropdowns (US abbreviations) with backend validation.
- Project attachments now support deletion from the project detail page.
- Boost admin workspace includes MCP activity indicator + live log viewer with reset action and event-log retention pruning.
- Drawing request, submittal, and fab queue numbers now retry generation on unique-collision conflicts.
- Dashboard/notification query indexes were added for queue and unread-count paths.
- Drawing request detail job number now links directly to the related project page.
- See
AGENTS.mdfor agent-oriented implementation notes and project conventions.