08cb668bab72847ab5533441bf674f743abecd04
All checks were successful
Release / release (push) Successful in 7m12s
The admin layout guard rendered only a "Redirecting to login..." placeholder for the /admin/login child route, trapping every unauthenticated visitor. Exempt the login route from the auth gate so the form renders correctly. Also wire the new POST /api/auth/refresh endpoint (from the dual-token migration) into both auth.init() and the api request() 401 handler, so sessions survive the 15-minute access-token lifetime without a hard logout. Adds a Playwright regression test asserting the login form is visible in a clean (no-cookie) browser context.
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
44.2%
Svelte
43.6%
TypeScript
6.8%
CSS
2.1%
Makefile
1.2%
Other
2.1%