Mission-critical tools built specifically to meet the unique needs of police, fire, EMS, military, and public safety agencies. Optimize your agency's communications, streamline data management, and improve overall efficiency with PERSCOM.io.
PERSCOM.io is a fully functioning, powerful, and robust personnel management software built for para-military organizations. The goal of PERSCOM.io is to enhance and provide common functionalities needed for organizations to run in a manner that is efficient, intuitive, and powerful.
Head on over to https://perscom.io/register to start a 7-day free trial.
Want to host PERSCOM yourself? Deploy your own instance to Railway with one click:
For detailed deployment instructions, see the Railway Deployment Guide.
Visit our documentation here to get started.
This section is intended for developers working on the PERSCOM codebase.
- PHP 8.4
- Docker Desktop or Laravel Herd
- Composer
The application configuration is set with sensible defaults to get you started. When running composer setup, a series of commands will be run that will build and configure the application for local development. Most settings can be configured in your .env file. This will be copied from the .env.example when running composer setup for the first time.
-
Clone the repository:
git clone https://github.com/deschutesdesigngroupllc/perscom-app cd perscom-app -
Start the application using either Laravel Herd or Docker Compose:
Option A — Laravel Herd (macOS, recommended):
Install Laravel Herd and park the cloned project in a Herd-managed directory. From the project root, run the wizard to provision PHP, services, and domain aliases from the bundled
herd.yml:herd init
This installs PHP 8.4, MySQL, and Redis (Herd Pro), and serves the site at
http://perscom.testwith theapp.perscom.testalias used by tenant subdomain routing.Then bootstrap the application:
composer setup
composer setupinstalls dependencies, copies.env.exampleto.env, generates application/JWT/Passport keys, builds frontend assets, and runsphp artisan perscom:installto migrate, seed, and bootstrap the first tenant. When run interactively, the install command will prompt you to choose which type of organization to seed (Military, Fire Service, or Law Enforcement).Option B — Docker Compose (cross-platform):
Install Docker Desktop and bring up the stack defined in
compose.yaml(app, MySQL, Redis, Horizon, scheduler):docker compose up -d --build
On first start, the app container automatically runs
composer setupinside the container if it detects a missing.env, missingvendor/, or unsetAPP_KEY. No additional command is required.The app is served at
http://localhost:8080. Run subsequentcomposer/artisan/npmcommands inside the container withdocker compose exec perscom <command>.Note:
.env.exampledefaults to Herd-style URLs (http://app.perscom.test,http://auth.perscom.test, etc.). After the container generates your.env, updateAPP_URL,AUTH_URL,API_URL,WIDGET_URL, and any other URL values to usehttp://localhost:8080(or your chosenAPP_PORT) so links, redirects, and OAuth callbacks resolve correctly. Service hosts likeDB_HOSTandREDIS_HOSTare already overridden at runtime by the compose env vars and do not need to be edited.
The perscom:install command can be run on its own to (re)install the application:
# Interactive — you'll be prompted for the organization type
php artisan perscom:install
# Force a reinstall over an existing install (RESETS all data)
php artisan perscom:install --force
# Skip seeding entirely
php artisan perscom:install --no-seed
# Pick the organization template non-interactively
php artisan perscom:install --seeder=military
php artisan perscom:install --seeder=fire
php artisan perscom:install --seeder=law
# Demo environment only — also runs the DemoSeeder
php artisan perscom:install --demoEach organization seeder ships with realistic ranks, qualifications, awards, forms, and other reference data so you have a working dataset to explore immediately.
See CLAUDE.md for a complete list of available development commands including testing, code quality tools, and database management.
The application supports optional premium Filament plugins that enhance functionality. The application works fully without them.
Adds advanced table filtering, preset views, and a favorites bar.
-
Purchase a license at filamentphp.com
-
Authenticate with the private Composer repository:
composer config http-basic.filament-filter-sets.composer.sh your-email@example.com your-license-key
-
Install the package:
composer require archilex/filament-filter-sets "^4.0.18" -
Rebuild frontend assets:
npm run build
Adds custom report building capabilities with scheduling and exports.
-
Purchase a license at filamentphp.com
-
Authenticate with the private Composer repository:
composer config http-basic.data-lens.composer.sh your-email@example.com your-license-key
-
Install the package:
composer require padmission/data-lens "^2.2.5" -
Rebuild frontend assets:
npm run build
Please see here for more details about contributing.
