-
Notifications
You must be signed in to change notification settings - Fork 0
Home
The ACM @ UIUC Core Platform is a comprehensive management system that supports the operations of ACM @ UIUC. This wiki provides a high-level overview of the system architecture, key components, and functionality.
Core's primary development goal is to make it easier to develop ACM @ UIUC internal functionality without having to go through the scaffolding and work of writing a brand new API. We aim to abstract away as much of the implementation details (hosting, authentication/authorization) from individual developers as possible so they can focus on the business logic.
The Core Platform follows a modern serverless architecture leveraging multiple AWS services:
- Backend API: Node.js serverless API built with Fastify
- Frontend UI: React Vite application with Mantine component library
- Data Storage: DynamoDB for persistence
- Infrastructure: AWS CloudFormation for infrastructure as code, CloudFront CDN to optimize performance
The platform utilizes several AWS services that work together:
- Lambda: Hosts the core API and background processing functions
- API Gateway: Routes HTTP requests to Lambda functions
- DynamoDB: Stores data for events, memberships, user roles, etc.
- SQS: Handles asynchronous processing (ticket purchase notifications, membership provisioning)
- CloudFront: Serves frontend assets and provides caching for static files and events
- S3: Stores static frontend files
- Secrets Manager: Secures API keys and credentials
The platform provides several key features:
- Event Management: Create, update, and list ACM events
- IAM (Identity and Access Management): Manage users, groups, and roles
- Ticketing and Merchandise: Process event tickets and merchandise sales
- Membership Management: Track ACM memberships and generate passes
- Stripe Integration: Handle payments and invoice generation
As of March 2025, we are also working on integrating the purchasing and fulfillment of event tickets and merchandise sales into this API.
core/
├── cloudformation/ # AWS CloudFormation templates for infrastructure
│ ├── custom-domain.yml # Custom domain configuration
│ ├── iam.yml # IAM roles and policies
│ ├── logs.yml # CloudWatch logs configuration
│ ├── main.yml # Main stack template
│ ├── phony-swagger.yml # API Gateway configuration
│ └── sqs.yml # SQS queues configuration
│
├── src/ # Source code directory
│ ├── api/ # Backend API code
│ │ ├── functions/ # Core business logic organized by domain
│ │ ├── plugins/ # Fastify plugins for auth, validation, etc.
│ │ ├── routes/ # API route definitions and handlers
│ │ ├── sqs/ # SQS message handlers for async processing
│ │ ├── resources/ # Static resources used by the API
│ │ └── lambda.ts # Lambda entry point
│ │
│ ├── common/ # Shared code between frontend and backend
│ │ ├── errors/ # Error definitions and handling
│ │ ├── types/ # Shared TypeScript type definitions
│ │ ├── config.ts # Configuration constants
│ │ ├── orgs.ts # Organization definitions
│ │ ├── roles.ts # Role definitions
│ │ └── utils.ts # Shared utility functions
│ │
│ └── ui/ # Frontend React application
│ ├── components/ # Reusable React components
│ │ ├── AppShell/ # Layout components
│ │ ├── AuthContext/ # Authentication context and hooks
│ │ ├── AuthGuard/ # Permission enforcement components
│ │ └── ... # Other shared components
│ │
│ ├── pages/ # React page components organized by feature
│ │ ├── events/ # Event management pages
│ │ ├── iam/ # Identity management pages
│ │ ├── profile/ # User profile management
│ │ ├── stripe/ # Payment handling pages
│ │ └── tickets/ # Ticketing and merch pages
│ │
│ ├── util/ # Frontend utility functions
│ └── Router.tsx # Frontend routing configuration
│
├── tests/ # Test suites for the application
│ ├── unit/ # Unit tests for individual functions
│ │ ├── common/ # Testing the common utils
│ │ └── data/ # Test data
│ │
│ ├── live/ # Tests run in the QA environment
│ ├── e2e/ # End-to-end testing (UI and API)
│
├── Makefile # Build and deployment commands