https://my.digitalrcc.com (Vercel project drcc-web, repo
tcecure/drcc-lab-companion) is the student and staff portal that will replace
distributed PDF guides in later cohorts. It reads lab data; it never controls the
lab.
| View | Source |
|---|---|
/student and /student/training |
Per-pod progress from the training tracker |
/admin card + /admin/lab-status |
Proxmox health and utilization (Lab Health Monitoring) |
| Public home page | Student-facing known-issues list (Current Cohort Lab Notices) |
TRACKER_REACHABLE_FROM_VERCEL=yes — verified from a throwaway Vercel function
in iad1 (HTTP 200, ~3.8 s), and the tracker has a valid public Let's Encrypt
certificate, so no push poller is needed.
GET https://training.status.tcecure.com/api/v1/pods/<NN>/progress
Authorization: Bearer <token>
| Behaviour | Result |
|---|---|
| Valid token, existing pod | 200 with the normalized payload |
| Missing/incorrect token | 401 |
| Unknown pod (e.g. 99) | 404 |
| Any method other than GET | 405 |
| Tracker/verifier unreadable | 200 with status: "unavailable" — never a false 0% |
Payload (live Pod01 example, trimmed):
{
"podName": "Pod01",
"studentNumber": "01",
"checkedAt": "2026-08-19T10:56:11Z",
"overallPercentage": 25,
"completedModules": 1,
"totalModules": 6,
"currentModule": "IA",
"status": "in_progress",
"modules": [
{"id": "AC", "title": "Access Control", "status": "completed", "percentage": 100},
{"id": "IA", "title": "Identification & Authentication", "status": "in_progress", "percentage": 17}
],
"trackerUrl": "https://training.status.tcecure.com/pod/01"
}
Modules are the six lab families (AC, IA, SI, SC, MP, PE). Valid statuses are
not_started, in_progress, completed, unavailable; percentages are
integers 0–100. The route is GET-only, scoped by the pod in the path, and returns
no student email, credentials, or other pods' data.
Deployed on the tracker host crc-ai-ide-01 (192.168.1.61, reachable as
pve1 → devin-adm@192.168.1.61) — note the public hostname terminates on the
nginx proxy at 192.168.1.55, but the app itself runs on .61. Source:
ebarlowjr2/tcecure_cyberlab, docs/pod-progress-api.md.
| Side | Variable | Purpose |
|---|---|---|
| Tracker host | POD_PROGRESS_API_TOKEN |
Accepted bearer token |
Vercel (drcc-web) |
TRAINING_TRACKER_BASE_URL |
Tracker origin |
Vercel (drcc-web) |
TRAINING_TRACKER_API_TOKEN |
Same token, stored sensitive |
Rotate by setting POD_PROGRESS_API_TOKEN on the tracker host first, then the
Vercel value. The portal fetches server-side only, so the token never reaches a
browser — which also means no CORS or CSP change is required (an iframe embed
would need frame-src).
A missing token, HTTP error, timeout (8 s) or malformed payload renders an
explicit "unavailable" state. Validation rejects a payload whose studentNumber
does not match the requested pod, whose status is outside the four allowed
values, or whose percentages are not integers 0–100. Portal mapping comes from
student_cohort_assignments.pod_name.
Bulk student upload and the invite queue are built, but email delivery is
deliberately in mock mode: the Supabase project has no custom SMTP,
rate_limit_email_sent is 2/hour, and Supabase's built-in email only delivers to
project team members. Inviting a full cohort would fail after two messages.
Decide custom SMTP vs. owned SES sending before importing the 9/6 cohort.
The staff support console lives on the same application, but is served from
https://labops.drcc.digitalrcc.com on drcc-labops-01 rather than Vercel:
| Route | Purpose |
|---|---|
/labops |
Support requests, investigation history, audit |
/admin/labops/approvals |
Held agent actions awaiting Allow/Refuse |
/admin/labops/chat |
Direct Chat — ask the assistant a question with no support ticket |
Owner-only for this release and enforced server-side on every route; every write
capability (AWX, GitHub, Wiki.js, support notes) is switched off. Full detail on
DigitalRCC LabOps AI.
| Page | Purpose |
|---|---|
| DigitalRCC LabOps AI | Support-triage assistant and Direct Chat |
| Training Tracker | Tracker dashboard and AWX data flow |
| Lab Health Monitoring | Proxmox health feed |
| Current Cohort Lab Notices | Source of the public known-issues list |