The fastest way to run Unitru Academic is with Docker Compose, which starts both the Python/FastAPI backend and the Next.js frontend in isolated containers with a single command. The entire setup takes under five minutes on a decent connection — the only caveat is that the first build downloads Chromium and Tesseract (~500 MB), so subsequent builds are nearly instant thanks to Docker layer caching.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Andr21Da16/UNITRU-ACADEMIC/llms.txt
Use this file to discover all available pages before exploring further.
The first
docker compose up --build fetches the Playwright Chromium binary and installs Tesseract inside the backend image. This is approximately 500 MB of downloads. Subsequent builds reuse the cached layers and complete in seconds.Prerequisites
- Docker Desktop (includes Docker Compose) — version 24+ recommended
- Git
Running with Docker Compose
Build and start both services
From the repo root, build the images and start both containers:Docker Compose will:
- Build the backend image — installs Python dependencies, Chromium via
playwright install --with-deps chromium, and Tesseract OCR. - Build the frontend image — runs
npm ci, injectsNEXT_PUBLIC_BACKEND_WS_URLas a build argument, and produces a Next.js standalone bundle. - Start both containers. The backend listens on
:8000and the frontend on:3000.
Open the dashboard
Navigate to http://localhost:3000 in your browser. The Unitru Academic login screen will appear.
Enter your SUV credentials and wait for the dashboard
Type your UNT SUV username and password and submit the form. The frontend opens a WebSocket connection to the backend, which:
- Launches a headless Chromium browser.
- Navigates to the SUV login page.
- Downloads and OCR-solves the CAPTCHA (up to 3 retries).
- Logs in and selects the “Alumno” profile.
- Navigates through all academic modules — Profile → Academic Record → Enrollment → Attendance → Grades.
- Emits a
dashboard_readyevent with the complete structured payload.
Environment Variables
Both services ship with sensible defaults for local development. Override them indocker-compose.yml or as shell environment variables if needed.
Backend
| Variable | Default | Description |
|---|---|---|
ALLOWED_ORIGINS | http://localhost:3000 | Comma-separated list of allowed CORS origins |
PORT | 8000 | Server listen port (Railway injects this automatically in production) |
Frontend
| Variable | Default | Description |
|---|---|---|
NEXT_PUBLIC_BACKEND_WS_URL | ws://localhost:8000/ws | WebSocket URL the browser connects to — baked in at build time |
NEXT_PUBLIC_BACKEND_WS_URL is embedded into the JavaScript bundle during next build. Changing it after the image is built has no effect — you must rebuild the frontend image for a new value to take effect.