In 2026, the American Radio Relay League is celebrating the
semiquincentennial (250th anniversary) of the United States by holding the
America250 Worked All States award program! During the weeks
of May 27th through June 2nd and September 2nd through 8th, the Colorado section will be operating
as W1AW/0. We need a way of scheduling operators to cover shifts.
Before running the development server, you need to build the shared module:
cd shared
npm install
npm run build
cd ../web
npm install
ng serveNavigate to http://localhost:4200/. The application will automatically reload if you change any of
the source files.
This monorepo contains:
shared/- Shared constants and types used by both web and functionsweb/- Angular frontend applicationfunctions/- Firebase Cloud Functions (Node.js backend)firestore/- Firestore security rules and indexes
The shared module must be built before building web or functions. See shared/README.md for more details.
This project uses several Firebase products (free tier) to handle functionality. It uses Firebase Authentication, Firestore and the Firebase extension firebase/firestore-send-email. (I happened to use SendGrid as an SMTP provider, also free tier). Those wishing to run their own instance and/or develop new features will need to configure their own Firebase project, SMTP providers, and API keys.
To enable Discord account linking, you need to configure Discord OAuth credentials:
- Create a Discord application at https://discord.com/developers/applications
- Add a redirect URI:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/discordOAuthCallback - Set the following Firebase environment variables:
firebase functions:config:set discord.client_id="YOUR_DISCORD_CLIENT_ID" firebase functions:config:set discord.client_secret="YOUR_DISCORD_CLIENT_SECRET" firebase functions:config:set discord.redirect_uri="https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/discordOAuthCallback"
- Deploy the functions:
npm run deploy --prefix functions
For local development, download the config:
firebase functions:config:get > functions/.runtimeconfig.jsonThe application is automatically deployed to Firebase Hosting using GitHub Actions with Workload Identity Federation for secure, keyless authentication. See DEPLOYMENT.md for detailed setup instructions.
Pull requests are automatically deployed to Firebase Hosting preview channels for testing before merging. When you open a PR:
- A unique preview channel is created (e.g.,
pr-123) - The web application is built and deployed to the preview URL
- A comment is automatically added to the PR with the preview URL
- Preview channels expire after 7 days
- Preview channels are automatically deleted when the PR is closed
Note: Preview deployments only include the web application, not Firestore rules or Cloud Functions.
