SES Activity is a web app for tracking volunteer attendance with as little friction as possible. Members check in and out at a kiosk, sessions are recorded with activity categories, and reports are available for coordinators.
Features:
- Fast check-in/out — designed for kiosk use
- Activity categories (training, rescue, combat roles, etc.)
- Detailed reporting
- Automatic member import from the SES headquarters API
- Runs on AWS Lambda + DynamoDB — scales to zero when idle
Stack: Rust (GraphQL API) · React + Relay (frontend) · AWS (Lambda, DynamoDB, SQS, CloudFront)
- Rust (stable, via rustup)
- Node.js >= 22
- AWS credentials configured (for DynamoDB)
Non-secret config lives in .env at the repo root (checked in). Create .env.secret for secrets (gitignored):
JWT_SECRET=...
SES_API_BASE_URL=...
SES_API_KEY=...
Copy the example env file and fill it in:
cp web/.env.local.example web/.env.local
| Variable | Description |
|---|---|
VITE_BEACON_URL |
Base URL for the Beacon system, used to link NITC event IDs. For deployed builds, set the BEACON_URL repo variable in GitHub Actions Settings → Variables. |
make dev
This starts the API server, Relay compiler (watch mode), and the Vite dev server together. Or run them individually:
cd api && RUST_LOG=info cargo run --bin poem -- --enable-mutations # API on port 8000
cd web && npm run relay -- --watch # Relay compiler
cd web && npm run dev # Web dev serverapi/ Rust GraphQL backend + all Lambda binaries
web/ React/Relay frontend
infra/ Terraform for AWS infrastructure
Note:
infra/is published as a reference for the canonical seslogin.com deployment — it hardcodes the production AWS account, DNS zone, and ACM records, soterraform applyfrom a fork will not work without adapting bucket names, domains, and IAM resources. Use it as a worked example, not a turnkey deploy.
See SCHEMA.md for the data model and MANUAL.md for operator documentation.
Contributions are welcome — bug fixes, improvements, or new features. See CONTRIBUTING.md for how to submit a PR and run the checks.