
Chicken catchers
Aplikacja do koordynowania jednorazowych zleceń w zespole. Organizator publikuje wydarzenie, pracownicy zapisują się jednym kliknięciem, a system sam pilnuje limitu miejsc, listy rezerwowej i pierwszeństwa zapisów - koniec z chaosem na grupowych czatach. Działa w przeglądarce jako PWA, a wersja mobilna zbudowana w Expo przechodzi testy w Google Play.
Jakie problemy rozwiązuje?
- Koniec z kombinowaniem na grupowych czatach kto się zapisał, a kto nie
- Aplikacja sama informuje, gdy zwolni się miejsce - bez przeklikiwania
- Do wyboru: PWA w przeglądarce albo aplikacja mobilna z Google Play (na razie w wersji testowej)
- Logowanie kodem z maila zamiast wymyślania hasła
- Najwyższe rangi dostają godzinowe pierwszeństwo, zanim slot pójdzie dalej
Technologie
- Ruby on Rails 8.1 - backend
- Hotwire (Turbo, Stimulus) - interaktywny frontend bez frameworka JavaScript
- Tailwind CSS v4 - wygląd
- SQLite z Solid Queue / Cache / Cable - baza, kolejka zadań, cache, websockety
- Web Push API - powiadomienia push na telefonie
- PWA z service workerem - instalowalna aplikacja, działa offline
- Expo (React Native) - wersja mobilna, w Google Play jako zamknięta wersja testowa
- Kamal - deploy na własny serwer
Jak wyglądała praca nad projektem?
Projekt zaczął się od konkretnego problemu - koordynacja jednorazowych zleceń w grupie ludzi, gdzie liczy się szybkość zapisu i sprawiedliwy podział miejsc. Cały interfejs zaprojektowałem pod telefon, bo realnie wszyscy używają tego z komórki w drodze.
Jednym z większych wyzwań było logowanie. Pierwsza wersja używała magic-linków z maila, ale kliknięty link otwierał systemową przeglądarkę zamiast zainstalowanej aplikacji - przez co użytkownik logował się „nie tam, gdzie trzeba” i sesja się gubiła. Wymieniłem to na 5-cyfrowy kod, który użytkownik wpisuje ręcznie w aplikacji - sesja zostaje tam, gdzie powinna.
Drugim ciekawym kawałkiem była logika zapisów. Liczba miejsc musi się zgadzać nawet wtedy, gdy kilka osób kliknie „zapisz” w tej samej sekundzie. Rozwiązałem to blokadami w bazie danych, a system priorytetowych zaproszeń dla wyższych rang ma godzinny deadline - jeśli ktoś nie odpowie, slot wraca do puli i mogą go zająć inni.
Równolegle z wersją webową powstała aplikacja mobilna w Expo (React Native), korzystająca z tego samego backendu. Jest już w Google Play jako zamknięta wersja testowa i przechodzi testy z prawdziwymi użytkownikami przed publicznym wydaniem.
