Wróć do projektów
Aplikacja Chicken catchers na telefonie

Chicken catchers

Ruby on RailsRubyTailwind CSSExpoAndroid

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.