Studium przypadku 03 · Rails mobile · Agenci kodujący
Od osobnej aplikacji Flutter do dwóch aplikacji beta w Hotwire Native.
Przez sześć miesięcy Claude Code i Cursor pisały kod Swift, Kotlin oraz testy dwóch aplikacji mobilnych. Ja projektowałem kontekst, architekturę, zadania i pętlę walidacji, dzięki którym ten kod stał się użyteczny.

Klient miał już dojrzały produkt Rails i osobną aplikację Flutter. Celem nie było ponowne napisanie każdego ekranu w kolejnym odizolowanym kliencie. Chodziło o sprawdzenie architektury web-first, w której Rails nadal odpowiada za zachowanie produktu, a iOS i Android zapewniają natywną nawigację oraz wybrane możliwości urządzeń.
Uwaga o poufności: klient i produkt zostały zanonimizowane. Architektura, proces pracy i zakres dostarczonych bet pochodzą z rzeczywistego projektu; szczegóły identyfikujące oraz prywatne materiały zostały usunięte.
2 aplikacje beta
Osobne natywne klienty iOS i Android
1 ekspert
Odpowiedzialność za kontekst, architekturę, walidację i rezultat
6 miesięcy
Od odtworzenia wiedzy o produkcie do przekazania bet
Osobna implementacja mobilna tworzy drugą ścieżkę rozwoju produktu
Klient wieloplatformowy może być właściwym wyborem, ale w tym produkcie oznaczał, że zachowanie istniejące już w Rails trzeba było zrozumieć i odtworzyć w osobnej aplikacji. Logowanie, nawigacja i zmiany produktu zyskiwały kolejną powierzchnię implementacji.
Migracja sprawdzała inną granicę: zachować w Rails te elementy produktu, które dobrze działają w webie, a kod natywny dodawać tam, gdzie wymagało go doświadczenie mobilne.
Dlaczego Hotwire Native pasował do produktu Rails
Hotwire Native wyświetla HTML dostarczany przez serwer w natywnej powłoce i zmienia nawigację linkami w przejścia ekranów właściwe dla platformy. Bridge Components łączą kontrolery Stimulus w Rails z odpowiednikami w Swift lub Kotlinie.
Dzięki temu migracja mogła być stopniowa: ekran pozostawał web-first, zyskiwał natywne sterowanie przez bridge albo stawał się w pełni natywny, gdy wymagała tego jakość interakcji lub API urządzenia.
Warstwa produktu
Widoki Rails, zachowanie produktu i kontrolery Stimulus
Wspólny kontrakt
Zdarzenia i dane wymieniane z natywnymi odpowiednikami
Swift · iOS
Natywna nawigacja, integracje urządzenia i zachowanie platformy
Kotlin · Android
Natywna nawigacja, integracje urządzenia i zachowanie platformy
Agenci pisali kod; kontekst sprawił, że ten kod mógł działać
Claude Code i Cursor analizowały zachowanie aplikacji Flutter, implementowały klientów Swift i Kotlin oraz pisały testy. Dostarczałem im model produktu: starą aplikację, zachowanie Rails, materiały z Figmy klienta, ograniczenia techniczne, zamknięte zadania i kryteria akceptacji.
Następnie budowałem każdą wersję, testowałem ją, porównywałem interfejs z Figmą i przekazywałem konkretne obserwacje do kolejnej iteracji. Użyteczną jednostką nie był prompt, lecz kontrolowana pętla od dowodów przez implementację do walidacji.
01 · Odtwórz
Przeanalizuj aplikację Flutter, zachowanie Rails i zaakceptowane ekrany Figmy.
02 · Zbuduj kontekst
Zamień wnioski w trwałą wiedzę o produkcie i ograniczenia.
03 · Wyznacz zakres
Zdefiniuj zamknięte zadanie i jawne kryteria akceptacji.
04 · Implementuj
Claude Code i Cursor piszą kod aplikacji oraz testy.
05 · Waliduj
Zbuduj, uruchom, porównaj i przetestuj na docelowej platformie.
06 · Iteruj
Przekaż zaobserwowane błędy i feedback do kolejnego cyklu.
Od onboardingu do uwierzytelniania, nawigacji i powiadomień
Aplikacje rosły pionowymi fragmentami obejmującymi całą drogę od pierwszego uruchomienia i logowania po codzienną nawigację, powiadomienia oraz wybrane interakcje natywne. Praca musiała zachować znane użytkownikom zachowanie produktu, a jednocześnie przenosić odpowiedzialność w stronę Rails tam, gdzie taka granica miała sens.
Zespół Rails dostarczał webową część Bridge Components, a ja kierowałem budową i walidacją ich natywnych odpowiedników na iOS oraz Androidzie. Dzięki temu decyzje produktowe pozostawały blisko Rails, ale aplikacje mobilne nie stawały się jedynie generycznymi kontenerami webowymi.
Budowa w czasie, gdy ekosystem nadal szybko się zmieniał
Projekt powstawał, gdy Hotwire Native i ekosystem Bridge Components szybko się rozwijały. Tym ważniejsze były małe eksperymenty, research w kodzie źródłowym, jawne kontrakty między webem i warstwą natywną oraz bezpośrednia weryfikacja na obu platformach.
Przykłady z frameworka były punktem wyjścia, a nie dowodem, że integracja specyficzna dla produktu działa poprawnie.
Wygenerowany kod był akceptowany dopiero, gdy działał
Obie aplikacje miały testy automatyczne, a ja osobiście budowałem i sprawdzałem przepływy na iOS oraz Androidzie. Zachowanie wizualne porównywałem z ekranami Figmy dostarczonymi przez klienta, a osoby z zespołu klienta testowały również przepływy produktu.
Logowanie, nawigacja, sesja, WebView i powiadomienia były poprawiane na podstawie obserwowanego działania. Wynik agenta pozostawał kandydatem na implementację, dopóki nie potwierdziły go buildy, testy, porównanie z projektem i feedback produktowy.
Dwie wiarygodne bety, bez dopisywania wygodnego zakończenia
Oba natywne klienty osiągnęły etap beta. Aplikacja iOS była dystrybuowana przez TestFlight, przeszła szerokie testy i była blisko gotowości do wydania; Android pozostał w becie.
Decyzja o publikacji należała do klienta i nie otrzymałem ostatecznego powodu, dla którego żadna aplikacja nie została wydana. Rezultatem opisywanym tutaj jest dostarczona możliwość mobilna i powtarzalny proces pracy, a nie wdrożenie produkcyjne.
Co może zastosować CTO produktu Rails
Kontekst przed kodem
Przekaż agentom zachowanie produktu, ograniczenia, przykłady i kryteria akceptacji przed implementacją.
Wąskie kontrakty Bridge
Utrzymuj granicę Rails-native na tyle jawną i małą, aby dało się ją testować na obu platformach.
Walidacja na urządzeniach
Traktuj wygenerowany kod jako tymczasowy, dopóki nie zbuduje się i nie zadziała w rzeczywistym środowisku.
Porównanie z dowodami
Używaj istniejącego zachowania i zaakceptowanych projektów jako podstawy akceptacji, nie samej pamięci.
Odpowiedzialność człowieka
Agenci mogą pisać kod i testy; architektura, akceptacja i rezultat nadal potrzebują właściciela.
Dostarczanie agentowe
Chcesz, aby agenci kodujący dostarczali działające oprogramowanie, a nie oderwany kod?
Pomagam zespołom budować kontekst, granice zadań, pętle walidacji i model odpowiedzialności potrzebny do niezawodnej pracy agentowej.