A specialized response coordination system for rescue and response teams (mountain rescue, avalanche rescue, and other SAR organizations). This application allows responders to view active missions, set their status (responding/standby), and provides admins with a live dashboard of responding resources.
Additionally, the system features automated CalTopo map generation, allowing dispatchers to instantly create and link shared mission maps based on initial incident coordinates.
- Frontend: React + Vite + TailwindCSS
- Backend: PocketBase (Go-based realtime backend)
- Integration: Automated CalTopo Mission Map creation
- Infrastructure: Docker Compose + Caddy Reverse Proxy
If you just want to run the system without cloning the entire repository, run this single command in your terminal:
mkdir sar-respond && cd sar-respond && \
curl -O https://raw.githubusercontent.com/clayauld/sar-respond/refs/heads/main/docker-compose.yml \
-O https://raw.githubusercontent.com/clayauld/sar-respond/refs/heads/main/Caddyfile \
-o .env https://raw.githubusercontent.com/clayauld/sar-respond/refs/heads/main/.env.example && \
docker compose up -dThis will download the necessary configuration files and start the latest production containers.
Important: You should edit the .env file after downloading to set your Organization Name and CalTopo credentials.
If you have cloned this repository, use the following steps to start the system using Docker.
-
Configure Environment:
Copy the example environment file:
cp .env.example .env
Edit
.envto configure:ORG_NAME: Your organization's name.CALTOPO_CRED_ID/SECRET: Credentials for CalTopo API integration.CALTOPO_TEAM_ID: The Team ID where maps should be created.
-
Start the system:
make docker-up
(This runs
docker compose up -d) -
Access the application:
- App: http://localhost:8090 (Proxied via Caddy)
- PocketBase Admin: http://localhost:8090/_/
To stop the system:
make docker-downFor developing the frontend code, you can run the components separately.
Install dependencies and download the PocketBase backend binary:
make install
make setup-localStart the PocketBase server. This utilizes the pb_migrations directory to automatically configure the database schema.
make serve-pbStart the CalTopo integration service.
# Install Python dependencies
pip install -r backend_scripts/requirements.txt
# Run the API
python3 backend_scripts/api.pyNote: The frontend allows proxying to this service, but defaults to the Docker hostname caltopo-api. You may need to adjust vite.config.js or your hosts file for local development.
In a new terminal window, start the React dev server:
make devThe system comes with pb_migrations which will automatically create the necessary Collections (missions, responses) and update the users collection when PocketBase starts for the first time.
- Go to http://localhost:8090/_/
- Create your first Admin account (email/password).
- Use this account to manage users (the "Roster") and Missions.
- Importing Members: You can import members using a CSV file.
- Username: Member ID (e.g.,
304) - Password: Member ID (by default) - Change this in production!
To build and push new Docker images for production:
- Bump Version: Update the version number in
package.json. - Release:
make docker-release
This will:
- Build the frontend (
npm run build). - Build new Docker images (
rescue-respondandcaltopo-api) tagged with the version andlatest. - Push them to the GitHub Container Registry.
Currently, the project utilizes ESLint for code quality checks.
make testsrc/: React application source code.backend_scripts/: Python API for CalTopo integration.pb_migrations/: Database schema definitions (JS migrations).docker-compose.yml: Production orchestration config.Caddyfile: Reverse proxy configuration.vite.config.js: Frontend build and proxy configuration.