A serverless REST API on AWS that replaces Microsoft Forms + Excel for event registration, built for the getINNOtized x Azubi Africa Capstone.
# Event Registration and Ticketing System
A serverless REST API on AWS that replaces Microsoft Forms + Excel for event registration — built for the getINNOtized x Azubi Africa Capstone.
**Live frontends** (Vercel):
- Public portal —
public-portal-seven.vercel.… (runs on mock data; works standalone)
- Organizer console —
organizer-portal-five.verce… (needs a live API + Cognito to actually load data or sign in — see note below)
**Live API**: torn down between work sessions to stay inside the Free Tier and avoid idle cost — see Running it yourself to redeploy. `terraform apply` reprovisions the whole backend in one command; `terraform destroy` tears it back down.
## The problem
Manual event registration via forms and spreadsheets doesn't scale: no real-time capacity tracking, no automated confirmations, no audit trail, and no way to query registrations by event or by attendee without opening a spreadsheet. This system replaces that with a REST API backed by managed AWS services, so registration state, capacity, and confirmations are all handled automatically.
## Architecture
GitHub push triggers GitHub Actions, which runs the test suite then `terraform apply`s the whole stack. API Gateway fronts 16 Lambda functions, each with its own least-privilege IAM role; they read/write DynamoDB, authenticate organizers via Cognito, publish registration confirmations and CloudWatch alerts via SNS, and store event images in S3. CloudWatch tracks logs and per-function error-rate alarms; AWS Budgets watches spend. Editable source: `architecture.drawio` (open at app.diagrams.net).
Every function has its own IAM role scoped to only the table actions it actually performs (least privilege) — see `infrastructure/modules/lambda/main.tf`.
## Screenshots
Live captures from the deployed frontends (not mockups) — the public portal is running its built-in mock-data fallback since no live API is configured on this deployment right now (see the "Live API" note up …