Skip to content

What is Hanami?

Hanami is a code feedback and grading tool for courses running on the A+ LMS. Course staff use it to read student submissions, annotate code, assess work against per-exercise rubrics, and send the resulting points and feedback back to A+.

A+ remains the system of record for courses, submissions, and grades. Hanami stores course configuration, rubrics, grading assignments, in-progress assessments, feedback documents, preferences, template data, manual-grading state, and encrypted A+ tokens for active browser sessions.

A single docker-compose.yml runs the whole thing:

Service Directory Stack Port
frontend frontend/ SvelteKit (Bun) 3000
backend backend/ Ktor (Kotlin, fat JAR on JRE) 8088
db - Postgres (application data) 5432
docs docs/ This site (Starlight on nginx) 3001

See Deployment for the quick start and Architecture for how the pieces fit together.

Every request to A+ uses the signed-in user’s personal API token, so Hanami has only the access that A+ grants that user. Ktor encrypts the token in Postgres; the browser receives a random session identifier with no embedded credentials. Staff sign in either by pasting their token or automatically via an A+ course menu item (Sign-in and LTI).

  • Teachers define rubrics per exercise: categories with max points and preset phrases carrying point deltas, in each course language.
  • Grading happens in an exercise-first queue. Each entry groups a student or group with their submissions, submitted code, and autograder output. Graders can link annotations to rubric categories, select preset phrases, and override the calculated category points.
  • Assistants and teachers save drafts and mark assessments ready; only a teacher can send. Sending posts a new graded submission (points plus the composed feedback HTML) to A+.

The teacher and assistant guides cover the workflow in detail.