CS30 internal docs

These are the docs for the people who build and run CS30. If you are a student or an outside contributor, see the external docs instead.

What CS30 is

CS30 is a proctored online coding-lab platform for university CS courses. A student logs in with their SJSU Google account, opens a lab problem during its scheduled window, writes code in an editor, runs it against sample tests, and submits it for grading. Submitted code runs inside a locked-down Docker sandbox so untrusted student code cannot touch the host. During a lab the client also records proctoring activity (focus loss, clipboard use, fullscreen exit) to a log.

The codebase in one screen

CS30 is a single Gradle monorepo with five modules.

Module What it is Language / framework
backend/ REST API, Google OAuth, JPA persistence, and it also serves the web UI Kotlin, Spring Boot 3
frontend/ The student UI, built once and run in two places: browser (wasm) and desktop (JVM) Kotlin, Compose Multiplatform
cli/ Admin commands for courses and problems. Also the module that packages the shipping jar Kotlin, Picocli
data/ Serializable DTOs shared between frontend and backend Kotlin Multiplatform
kt-judge/ The judge service that compiles and runs submissions in a Docker sandbox Kotlin, Spring Boot 3

There is also a judge/ directory containing an older Python version of the judge. kt-judge is the one the CI pipeline builds and the one we treat as current.

A key thing to understand up front: backend, frontend, and cli are compiled into one fat jar. The CLI is the entry point. Running it with the serve argument starts the backend, which serves the compiled web frontend as static files. Any other argument runs an admin command instead.

How to navigate these docs

  • Architecture — the components, how a request flows through them, and the data model.
  • Deployment — how the jar gets onto the server and runs, plus an operational runbook.
  • CI/CD — what the GitHub Actions pipeline does.
  • Development — how to build and run everything locally.
  • Backend API reference — every HTTP endpoint the backend exposes.

A note on accuracy

These pages were written by reading the source, not by copying the older docs in the repo. Some of those older docs have drifted from the code. If a page here disagrees with the code, the code wins, and the page is a bug. Please fix it or open an issue.


Table of contents