- 
                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.
View the API documentation here. The OpenAPI specification file can be found here.
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
- 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
- Kinesis Firehose: Allows us to archive expiring data from DynamoDB.
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