TU/e Study Hub documentation¶
This is the documentation front door for people and coding agents. The guides under Living
documentation describe the repository as it works today. Files under docs/superpowers are
decision history and implementation plans; use them for context, not as the current API contract.
Production is currently self-hosted at tuestudyhub.xyz on an OVH Ubuntu 24.04 VPS. A standalone Next.js container runs behind Caddy, while published course and plugin data persists in the VPS filesystem store. See VPS deployment for the authoritative hosting contract.
Published site¶
The living guides are published at
docs.tuestudyhub.xyz, built from this directory by MkDocs and served
from GitHub Pages. Study Hub links to it from Settings → Help &
docs. A merge to main that touches docs/ republishes the site; there is no separate content
store to keep in step.
mkdocs.yml owns the
configuration:
- A new living guide needs one
naventry. Nothing else registers it. exclude_docskeepssuperpowers/and VPS deployment off the public site. The runbook holds no secrets, but it maps ports, paths, deploy-key handling, and ops-dashboard authentication, so it stays repository-only.- Links that leave the published tree — into
src/, into repository-root files, intosuperpowers/— are rewritten to GitHub byscripts/docs/repo_links.py. Keep writing them as ordinary relative links. mkdocs build --strictruns on every pull request that touchesdocs/, so a broken cross-reference fails there rather than on the site. Preview locally withpip install -r scripts/docs/requirements.txt && mkdocs serve.site_urlis also the custom domain. Pages serves one only while the deployed site carries aCNAMEfile, soscripts/docs/write_cname.pyderives that file fromsite_urlduring the build. Moving the site is a one-line change here;docsis aCNAMEtohectoragofi.github.ioin the Spaceship DNS zone, not anArecord to the VPS like every other subdomain.
Find the right guide¶
| Goal | Primary guide | Then inspect |
|---|---|---|
| Add or change UI | Design system | src/app/globals.css, src/components/ui |
| Change page annotation or drawing | Drawing overlay | src/components/DrawingOverlay.tsx, src/course-os/services/drawings |
| Add a course | Adding a course | src/courses/fixture, src/courses/index.ts |
| Add course content | Learning block specification | src/course-os/registry/blockRegistry.ts |
| Add a new learning capability | Learning block specification | src/course-os/registry/blocks.ts, src/blocks |
| Understand agent expectations | Agent guide | root AGENTS.md |
| Understand the Course OS | Architecture design | src/course-os |
| Build or review Study Hub AI | AI foundation | src/ai, src/app/api/ai |
| Build or review Visual Explainer | Visual Explainer | src/ai/visual-explainer, services/visual-explainer-worker |
| Connect Claude, ChatGPT, or another MCP client | Remote MCP | src/mcp, src/app/mcp |
| Operate accounts or cross-device sync | Accounts and sync | src/auth, src/sync, supabase |
| Understand published course documents | Course documents | src/course-os/documents |
| Edit a published course | Direct course editing | src/course-os/ui/editor, src/course-os/editor |
| Build or debug an extension | Plugin SDK | src/plugins, public/plugin-runtime, public/plugin-fixtures |
| Package an extension | Developing a .tuesh extension |
src/course-os/plugins |
| Operate, budget, or recover the platform | Operations | src/course-os/operations |
| Deploy or update the VPS | VPS deployment | Dockerfile, compose.vps.yaml, scripts/vps |
| Understand the external ops dashboard boundary | VPS deployment | standalone ops repository |
| Audit 2IRR00 source coverage | Curriculum map | Coverage audit |
Living documentation¶
- Design system — product feel, typography, tokens, layout, components, motion, responsive behavior, and accessibility.
- Adding a course — the end-to-end authoring and validation workflow, with a minimal example and acceptance checklist.
- Learning block specification — the semantic content envelope and registered block catalog.
- Drawing overlay — the freehand layer over pages: how strokes stay pinned, how they are scoped and stored, and what it deliberately does not save.
- Plugin SDK — the manifest vocabulary, capability catalog,
studyHubAPI, error codes, and the limits the host enforces on every extension. - Developing a
.tueshextension — archive layout, integrity, limits, permission review, and owner installation workflow. - Agent guide — task routing, source-of-truth rules, invariants, and verification.
- Accounts and cross-device synchronization — optional Google login, local partitions, synchronized domains, transfer choices, conflicts, RLS, and deployment wiring.
- Remote Study Hub MCP — guarded OAuth access to course reads, canonical Tutor state, notes, progress, and source-grounded flashcards from compatible external clients.
- Visual Explainer — private grounded storyboard generation, constrained visual primitives, durable jobs, quality review, access limits, and the isolated renderer.
- Course documents — the immutable revision format, verified Blob read path, identity index, hashes, schema versions, and publication boundary.
- Direct course editing — owner access, modes, local drafts, publication, conflicts, and identity-preserving follow-up.
- Platform operations — budgets, live-store reporting, reviewable cleanup, recovery drills, dashboard evidence, and infrastructure migration boundaries.
- VPS deployment — the Docker/Caddy topology, filesystem publication store, secrets, deployment workflow, backups, and recovery checks.
- Minimal JSON example — a format-oriented example. TypeScript is the normal in-repository authoring format.
Documentation conventions¶
Each living guide follows the same pattern:
- State the contract in plain language.
- Link to the code that enforces it.
- Include a concrete workflow or example.
- End with verification criteria.
When code and prose disagree, the schemas, registries, and tests are authoritative. Update the guide in the same change that updates the contract.
Historical records¶
docs/superpowers/specs records why major designs were chosen. docs/superpowers/plans records how
those designs were implemented. They are useful for intent and tradeoffs, but may describe an
earlier repository state.
docs/superpowers/reports records measured evidence — baselines, budgets, and external-service
proofs — that later goals cite instead of re-deriving.
plugin-ideas.md is the extension ideas backlog. It is proposal material, not a contract;
ideas graduate into fixtures or packages through the guides above.