4939838a7fb1be568f999baa5fde15d50efe3ad5
- Makefile: add SHELL := /bin/bash so test-env.sh pipefail works in CI - RoomCanvas: fix onElementClick firing on drag start (now fires on mouseup for click-in-place only); fix Props type to accept null; guard grid pattern against snapStep=0 (invalid SVG); remove unsafe null cast - live/[slotId]: fix studentNamesBySeat $derived wrapping a function instead of a value — reactivity was broken, map never updated - s/[code]: block clicks on occupied seats before hitting the backend; pass occupiedSeatIds to confirmed-view RoomCanvas; clear errorMsg on retry - rooms/+page: replace alert() in deleteRoom with inline errorMsg state - rooms/[roomId]: replace deprecated .substr with .slice - courses.rs: assign_tutor uses fetch_optional → 404 on unknown tutor_id instead of propagating RowNotFound as 500 - rooms.rs: delete_room returns 404 when room does not exist; replace fract() != 0.0 float check with epsilon-based validation - auth_routes.rs: refresh endpoint re-checks is_active so deactivated tutors cannot obtain new access tokens; fix test INSERT to include is_active - tutors.rs: wrap delete_tutor reference checks and DELETE in a transaction - attendance.rs: replace #[allow(clippy::type_complexity)] with type alias - migrations/003: document > 50 heuristic precondition Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TutorTool
Attendance tracker for tutoring sessions. Tutors manage courses, rooms, and slots; students check in via a public QR code link. Live at tutor.puchstein.dev.
Quickstart
make dev
# Backend: http://localhost:3000
# Frontend: http://localhost:5173
Demo credentials: admin@tutortool.com / admin
Stack
- Backend: Rust + Axum + SQLite (via SQLx), Secure httpOnly Cookie JWT auth
- Frontend: SvelteKit 5 (Svelte runes), TypeScript, adapter-static (SPA)
- Build: Vite + Cargo; 3-stage Docker build for production
Documentation
| Doc | Contents |
|---|---|
CLAUDE.md |
Agent guidance: commands, architecture, conventions |
GEMINI.md |
Same, with Gemini-specific context |
docs/testing.md |
E2E test pipeline (Playwright + test daemon) |
docs/specs/ |
Feature specs |
docs/plans/ |
Implementation plans |
docs/design_handoff/ |
UI design mocks |
Deployment
Kubernetes via deploy/ Helm chart on ITSH Cloud (tenant-5, Hetzner). CI via Gitea Actions at .gitea/workflows/ci.yml.
Description
Languages
Rust
46.5%
Svelte
41.9%
TypeScript
6.4%
CSS
2%
Makefile
1.2%
Other
2%