Kvitt låter en grupp dela utlägg, se vem som är skyldig vem, och göra upp med så få betalningar som möjligt — istället för att alla ska hålla reda på det själva.
Problem
Att dela utlägg i grupp slutar ofta i ett virrvarr av småskulder korsvis mellan alla. Utan ett sätt att förenkla skulderna behöver varje person göra upp med varje annan person, även när nettoresultatet hade räckt med några få betalningar.
Lösning
Jag byggde en Laravel + Inertia + Vue-app med grupper, utlägg med jämn eller anpassad delning, och en girig skuldförenklingsalgoritm som matchar den största fordran mot den största skulden om och om igen tills hela gruppen är uppgjord.
Tekniska beslut
Skuldförenklingsalgoritmen räknar i heltalscent, inte flyttal, för att undvika avrundningsfel som annars smyger sig in vid upprepade delningar.Påminnelsers nedkylning kontrolleras med en atomär villkorad UPDATE (WHERE last_reminded_at IS NULL OR < cutoff) istället för läs-sedan-skriv, för att undvika dubbla notiser vid samtidiga förfrågningar.Inertia.js för SPA-känsla utan att bygga och underhålla ett separat API-lager.Laravel Wayfinder för typade routes delade mellan backend och frontend.Pest, Larastan och Pint i CI via GitHub Actions, pinnade till commit-SHA:n istället för flyttbara taggar.
Vad det visar
Projektet visar att jag kan lösa ett riktigt algoritmproblem (skuldförenkling) och hantera race conditions korrekt, inte bara bygga formulär och tabeller.