Am lansat acum o lună o mică aplicație de habit tracking, mai mult dintr-o frustrare personală că tot ce e pe piață e plin de reclame sau abonamente absurde. Am ajuns la 200 de useri activi fără niciun leu băgat în marketing, doar postări pe niște grupuri de nișă. Vreau să vă zic cum am construit-o și unde m-am lovit cu capul de pragul de sus.
De ce am ales Expo în 2024?
Lucrez cu React Native de prin 2017, de când trebuia să te rogi la zeii Gradle să-ți pornească build-ul. Acum, cu Expo Managed Workflow și noile development builds, experiența e altă viață. Am ales Expo pentru că voiam să fac ship repede, fără să-mi bat capul cu Xcode sau Android Studio în faza de MVP.
Stack-ul a fost simplu: Expo Router (v3), Supabase pentru backend și autentificare, plus TanStack Query pentru caching. Supabase e un fel de cheat code pentru proiectele astea mici. Ai autentificare gata în 10 minute și o bază de date Postgres pe care o poți interoga direct din client dacă ești leneș, deși am pus câteva Edge Functions pentru logică mai sensibilă.
Greșeala cu sincronizarea offline
Aici am pierdut vreo 3 seri înjurând. Am vrut să fiu deștept și am implementat o logică custom de offline-first cu SQLite local. M-am gândit că userii vor să bifeze obiceiurile și în metrou, nu? Problema e că m-am chinuit cu conflictele de sincronizare când userul intra de pe două device-uri simultan.
La 200 de useri, am avut vreo 15 crash-uri raportate în Sentry fix pe logica asta de reconciliere a datelor. Sincer, pentru un MVP, m-am complicat inutil. Trebuia să merg pe o soluție simplă de cache cu TanStack Query și un optimistic UI. Userul oricum nu vede diferența de 1-2 secunde până se urcă datele în cloud. Am economisit probabil 30% din timpul de dezvoltare dacă nu mă aruncam la full offline capability din prima zi.
Performanța și trade-off-urile
Aplicația se mișcă brici, dar am făcut un trade-off asumat la dimensiunea bundle-ului. Expo adaugă destul de mult overhead, deci APK-ul de Android are vreo 25MB pentru o aplicație care, în esență, e o listă cu bife. Pentru mine e ok, dar dacă targetam piețe cu net prost sau telefoane vechi, era o problemă reală.
Un alt aspect e Expo Router. E mult mai intuitiv decât React Navigation clasic, dar te forțează la o structură de foldere care poate deveni aglomerată. Am avut momente când căutam un fișier și mă pierdeam în (tabs)/index.tsx vs (tabs)/settings/_layout.tsx. E prețul plătit pentru file-based routing.
Ce aș schimba
Dacă aș lua-o de la capăt, aș tăia jumătate din feature-urile de personalizare a UI-ului. Am pierdut timp să fac teme custom (dark, light, sepia), când pe useri îi interesa de fapt să vadă un grafic simplu cu progresul lor săptămânal. Am învățat că e mai bine să lansezi ceva urât care funcționează, decât ceva frumos care dă crash la sync.
Costurile sunt momentan zero. Supabase Free Tier duce liniștit până la câteva mii de useri dacă nu faci query-uri idioate. Hosting-ul pentru landing page e pe Vercel, tot moca. Singura investiție reală a fost taxa de 99$ pentru Apple Developer.
Voi ce stack folosiți pentru ideile astea mici de weekend? Mai merită să te complici cu ceva custom sau mergem toți pe Expo și Firebase/Supabase?