Skip to content

k0swe/w1aw-schedule

Repository files navigation

Colorado Worked All States 250 logo ARRL Colorado Section's W1AW/0 Scheduler

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.

Screenshot of W1AW/0 Colorado Scheduler

Development server

Before running the development server, you need to build the shared module:

cd shared
npm install
npm run build
cd ../web
npm install
ng serve

Navigate to http://localhost:4200/. The application will automatically reload if you change any of the source files.

Project Structure

This monorepo contains:

  • shared/ - Shared constants and types used by both web and functions
  • web/ - Angular frontend application
  • functions/ - 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.

Firebase

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.

Discord OAuth Configuration

To enable Discord account linking, you need to configure Discord OAuth credentials:

  1. Create a Discord application at https://discord.com/developers/applications
  2. Add a redirect URI: https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/discordOAuthCallback
  3. 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"
  4. Deploy the functions: npm run deploy --prefix functions

For local development, download the config:

firebase functions:config:get > functions/.runtimeconfig.json

Deployment

The 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.

Preview Channels

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.

About

A scheduling tool for W1AW's USA250 WAS event

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors