Gutz Intern
Internal club app for Gutzkowclub e.V.: member management, shift scheduling, credit system, messaging.
Gutz Intern (internally known as “RattenNetz”) is the internal administration platform for Gutzkowclub Dresden. It bundles member management, bar-shift scheduling, an internal credit/wallet system with QR vouchers, private messaging, documents, and cleaning-duty organization for a volunteer-run club with a rotating board.
Gallery
Case Study
Situation
A volunteer-run student club needs reliable shift scheduling, member management, and internal communication that doesn’t depend on word-of-mouth and spreadsheets under a rotating board. Gutz Intern replaces that with a central platform under continuous development since October 2025.
Challenge
The shift logic has to treat half shifts, recurring weekly duties, and one-off event shifts uniformly: assignments are weighted (1.0 or 0.5 per half shift) and drive both the staffing status and sign-up eligibility. Shift swapping is a multi-stage workflow — offer, acceptance by a second member, mandatory board approval, then the atomic transfer of the assignment. A real production incident involved UUID route keys: the separate admin app was writing rows without a UUID into the same database, which took the shift overview down completely; a further bug in a partial select wrongly overwrote real UUIDs, because it used an emptiness check instead of an existence check — every folder link ended up going nowhere as a result.
Approach
Laravel 12, PHP 8.4, MySQL/MariaDB, Blade templates with no SPA framework, Tailwind CSS 4 and Alpine.js via Vite 7, Laravel Octane with RoadRunner as the application server. Two-way sync with Google Calendar per shift type, push notifications, a QR-code workflow for bar duty.
Decisions
Deliberately kept simple instead of a full permission system — easier to reason about for a small club.
Prevents guessing or enumerating sequential IDs for publicly linked resources such as documents.
0.5 per half shift instead of rigid integer slots, so partial staffing works without special cases in the display logic.
Reduces dependency on mail infrastructure and reuses the messaging model that already exists.
Separates the complex admin interface from the lean member-facing stack — at the cost of a UUID consistency problem, caught by a self-healing mechanism.
My contribution
Complete shift-scheduling and swap-exchange logic, the messaging system, the bar-duty workflow, the credit/voucher system, Google Calendar sync, automated scheduler jobs, and the production fix for the UUID incident.
Results