827eb63bab128b89bb5c7671186ffd76c833c49e
Backend: - migration 003: apply pixel→grid transform per-element (CASE WHEN > 50) instead of per-row, preventing double-conversion of mixed-scale rooms; skip empty arrays via json_array_length guard to avoid NULL assignment - attendance.rs: log layout JSON parse errors instead of silently swallowing them with .ok() - tutors.rs: check rows_affected() in set_tutor_active and return 404 for non-existent IDs; remap FK constraint errors on delete to 409 so concurrent inserts between conflict-check and DELETE don't surface as 500 Frontend: - live/[slotId]: expose polling failures to the tutor via error banner instead of only console.error - s/[code]: split checkin into two try/catch blocks so a successful POST followed by a failed reload doesn't report failure to the student; fix dead '409' string detection to match actual server error 'seat taken' - rooms/[roomId]: remove duplicate onMount fetch; add .catch() to $effect - tutors: expose loadTutors failures via error banner, not just console - rooms: fix bare catch in createRoom (captures error, shows message); add try/catch to onMount rooms load CI: - sync cargo audit --ignore RUSTSEC-2023-0071 with Makefile; the advisory is in rsa which sqlx-mysql retains in the lock file even when the mysql feature is disabled — aws_lc_rs correctly removes it from the active tree
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%