Skip to content
Documentation

Local development

Install Node 24.15.0, Docker with Compose, and Bash. The workspace uses pnpm 12.8.1 through the repository commands. Host PHP is optional: bootstrap installs Composer dependencies through a PHP 8.5 container.

bin/bootstrap
npm run dev

Sail starts Laravel, PostgreSQL, Redis, Soketi, Mailpit, and the docs site. The root dev command also starts the web app, Filament asset server, browser session broker, and queue worker.

Service Address
Web app http://localhost:3000
Docs http://localhost:3001
Backend http://localhost:8000
Platform administration http://localhost:8000/admin/login
Department administration http://localhost:8000/manage/login
Mailpit inbox http://localhost:8025
Soketi http://localhost:6001
Filament assets http://localhost:5173

Press Ctrl+C once to stop the foreground development processes. Run bin/down to stop Sail, including docs, Mailpit, and Soketi. Database volumes are preserved.

Database and local administrator

bin/sail artisan migrate
bin/sail artisan db:seed

With APP_ENV=local, seeding creates the passwordless super administrator [email protected]. Seeding again reuses that account. Other environments skip the local administrator, even when the seeding command uses --force.

Seeding also creates the local-test department with a directory, role examples, General/Training/Officers rooms, messages, events and participation rules. Use [email protected], [email protected] or [email protected] to test department access. The platform administrator is separate from the department roster. [email protected] has a pending membership. The directory entry [email protected] has no account and can be used to test automatic admission.

Open /admin/login, enter [email protected], and request an email code. Open Mailpit to retrieve the code or magic link. Laravel's local mail settings are:

MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025

Bootstrap preserves existing .env values. After changing them, run bin/sail artisan config:clear and restart any long-running queue worker.

PostgreSQL is available to host tools on port 54320. Automated database tests use the separate firehall_test database. Inside Sail, use the service names pgsql, redis, soketi, and mailpit rather than localhost.

Development commands

npm run dev -- --preview     # explicit fictional UI data
bin/dev docs                # start the Sail docs service
bin/sail logs -f docs        # documentation server logs
bin/dev ui                  # Storybook on port 6006
bin/lint
bin/typecheck
bin/test
bin/build web
bin/build backend
bin/build docs

Mobile development

Android requires JDK 21, the Android SDK, accepted SDK licenses, and a device or emulator. Set JAVA_HOME and ANDROID_HOME to those installations. iOS requires macOS and Xcode.

bin/build mobile            # installable Android debug APK
bin/dev mobile --preview    # native app with explicit preview data
bin/build mobile --ios      # iOS simulator build

A physical phone needs a reachable HTTPS backend. Its localhost address refers to the phone, not your development computer. Use a trusted HTTPS hostname or tunnel.

Non-emergency communication only. Not for dispatch or emergency response.