Agoge trio

Educational products owned by Agoge Development LLC

What it is

"Agoge" is the educational arm of the SPS portfolio. Three products live under the Agoge Development LLC umbrella, all focused on higher-education and learner-facing software: Agoge Academic Advisor (AAA), UniversalGrader (a.k.a. Agoge Platform), and LedgerLearner. Marketing site at agogedev.com.

Entity rule (XDEC-121, locked 2026-05-10). Agoge = educational only. Anything that's not directly serving learners or instructors belongs to a different SPS entity. This reverses a 2026-04-22 attempt to push LedgerLearner to SPS-direct; LL stays under Agoge.

Topology

flowchart LR subgraph A[Agoge Academic Advisor] AAA_FE[React SPA] AAA_BE[aaa-backend :8006
FastAPI + SQLite] end subgraph U[UniversalGrader] UG[Course / grading tool
Azure App Service] end subgraph L[LedgerLearner] LL[Socratic accounting tutor
ledgerlearner.app] LL_SMOKE[ledgerlearner-smoke
eval harness] end USR((Advisor / instructor / student)) --> CF[CF Access
Google IdP] CF --> AAA_FE AAA_FE --> AAA_BE AAA_BE -->|enrolled?| MSU[MSU sources] USR --> UG UG --> AZURE[(Azure DB)] USR --> LL LL --> LL_API[Anthropic API]

Agoge Academic Advisor (AAA) live

Virtual academic advisor for MSU's Broad MSBDSA program. FERPA-by-architecture: handles student-identifying or grade-related data, but minimizes what it actually processes. Live at advisor.sandpointstudios.ltd.

Hosting

Code/opt/agoge-academic-advisor/ on vigil-server
BackendFastAPI + systemd unit aaa-backend, bound to 127.0.0.1:8006 (localhost only)
FrontendReact/Vite, served by the same backend or via CF Pages
DBSQLite at /opt/agoge-academic-advisor/data/aaa.db
Prod env/etc/agoge-academic-advisor/aaa.env
Public URLadvisor.sandpointstudios.ltd via the cloudflared tunnel

Auth posture (CLEAN 2026-05-11)

The auth chain is fully production-mode as of 2026-05-11:

  1. Door: Cloudflare Access OAuth (Google IdP) at the edge. User must be on the Access allowlist for app id 2788b8f6-51ce-457d-add9-244eae09839c.
  2. App: FastAPI reads the Cf-Access-Authenticated-User-Email header. Safe to trust because port 8006 binds localhost-only — only cloudflared can reach it.
  3. RBAC: app/services/rbac.py requires a row in the advisors table before identity is granted. No row → 403. No env-only fallback. No DEV_MODE branch.
Trust-the-header pattern is only safe when the upstream is unreachable from anywhere except cloudflared. If you ever expose port 8006 publicly, the header becomes spoofable. Same caveat applies to every other product using this pattern (see reference_oidc_sso_pattern.md).

Advisor roster (8 seeded)

EmailPerson
tdixon@msu.eduTeagan Dixon
richardsje@msu.eduJessica Richards
declercq@msu.eduCheri DeClercq
batesan4@msu.eduAndrea Bates
doming15@msu.eduVickie Lehtonen
delgadof@msu.eduJulie Delgado
grimes18@msu.eduCasey Grimes
fmd1074@gmail.comJulie Delgado (alt)

Display names in DB are still NetIDs (e.g. batesan4) pending a cosmetic SQL update. Vickie + Casey role decision (admin vs advisor) open. CF Access allowlist needs widening from "Teagan only" to all 8 emails.

Scope expansion

Per project_aaa_users_and_scope.md: Jessica + Cheri are the primary advisor users (NOT Richard, who uses the UniversalGrader suite). Scope is expanding beyond MSBDSA — Julie's Healthcare Management program is owed in a dedicated session with Julie present. Multi-program data model needs to be designed before that lands. Full automation owed before Teagan's summer-in-MX so she can stay out of the day-to-day.


UniversalGrader (Agoge Platform) live

Course and grading tool, Azure-hosted. The repo is named UniversalGrader; the product is marketed as "Agoge Platform" externally. Used by instructors (Richard among them) for autograded assignments. Live at app.agogedev.com.

HostingAzure App Service
FrontendCloudflare Pages
DBAzure DB
Ports (local dev)8002 backend / 3002 frontend
Repoteaganwins-dev/UniversalGrader
Local source~/dev/UniversalGrading/

Collaborators

Arthur (arthurSPS) was added with write permission 2026-05-17 as part of his Agoge learning trio access (invite pending acceptance).


LedgerLearner live

Socratic accounting tutor — guides students through accounting problems by asking probing questions rather than handing over answers. Sibling repo ledgerlearner-smoke holds an eval harness used to validate prompt + scoring changes against a known-answer set before they ship.

Hostingledgerlearner.app (apex)
Repoteaganwins-dev/ledgerlearner
Eval harnessteaganwins-dev/ledgerlearner-smoke — runs scored Q&A against the live model
Local source~/dev/LedgerLearner/

Arthur (arthurSPS) has write permission as of 2026-05-17.

Data

AAASQLite at /opt/agoge-academic-advisor/data/aaa.db — advisor accounts, advisor-student touchpoint logs, program metadata. FERPA-relevant per-user separation enforced by RBAC.
UniversalGraderAzure DB — courses, assignments, submissions, grades. FERPA-relevant.
LedgerLearnerQuestion library + per-session conversation logs. No PII unless students enter it.

Dependencies

Roadmap

Related