System Overview
The WIN Student Goal Tracker is a containerized web application designed to allow teachers and program staff to track student progress, goals, benchmarks, and events. The system follows a modern multi-tier architecture separating the frontend interface, backend services, and database layer.
System Architecture
The system architecture is organized into four main components:
Browser │ ▼ Angular Frontend │ ▼ Traefik Reverse Proxy │ ▼ .NET Core API │ ▼ MySQL Database
Technology Stack
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | Angular 20 | User interface and client-side logic |
| Backend | .NET Core 9.0 (C#) | Business logic and REST APIs |
| ORM | Dapper | Lightweight database access |
| Authentication | JWT + Refresh Tokens | Secure user authentication |
| Database | MySQL | Persistent data storage |
| Infrastructure | Docker Containers | Application deployment |
| Reverse Proxy | Traefik | Routing and SSL certificate management |
Authentication
The application uses JSON Web Tokens (JWT) for authentication. After login, the server generates a JWT token which is used to authenticate subsequent API requests.
- Access Tokens authenticate API requests
- Refresh Tokens extend user sessions
- Program-scoped tokens restrict access to authorized programs
Database Design
The MySQL database stores the application data for students and progress tracking.
- Users
- Programs
- Students
- Goals
- Benchmarks
- Progress Events
The backend uses Dapper ORM to execute SQL queries and map results to application objects.
Infrastructure
The system is deployed using Docker containers on a Virtual Private Server (VPS). Each component runs in its own container to maintain separation and scalability.
| Container | Function |
|---|---|
| Angular | Frontend application |
| .NET Core API | Backend services |
| MySQL | Database server |
| Traefik | Reverse proxy and SSL manager |
Deployment
The application is deployed using Docker containers orchestrated on a VPS. Traefik automatically handles HTTPS certificates and routes traffic to the appropriate container.
User Browser
│
▼
Traefik Reverse Proxy
│
├── Angular Container
│
└── .NET Core API Container
│
▼
MySQL Container