Skip to content
Dev Singh edited this page Mar 22, 2025 · 2 revisions

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.

System Architecture

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

AWS Services Used

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

Core Functionality

The platform provides several key features:

  1. Event Management: Create, update, and list ACM events
  2. IAM (Identity and Access Management): Manage users, groups, and roles
  3. Ticketing and Merchandise: Process event tickets and merchandise sales
  4. Membership Management: Track ACM memberships and generate passes
  5. 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.

Repository Structure

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
Clone this wiki locally