De ce PWA nu a murit: studiu de caz trefa.app

Blog · 17 mai 2026

De ce PWA nu a murit: studiu de caz trefa.app

Hype-ul Progressive Web App a apus, dar tehnologia s-a maturizat în tăcere. Ce a învățat trefa.app într-un an de producție cu mii de utilizatori pe iOS și Android.

Între 2017 și 2020, PWA a trecut printr-un adevărat hype-cycle tehnologic. Conferințe, articole pe blog, suport oficial din partea Google și Microsoft. Apoi a venit dezamăgirea — iOS a ținut închise API-urile cheie, prompturile de instalare s-au dovedit confuze, iar marketingul aplicațiilor native a rămas mult mai puternic. Comunitatea s-a reorientat spre Flutter, React Native și Capacitor.

În liniște, însă, s-a mai întâmplat ceva. Tehnologia PWA a continuat să se maturizeze. În ultimii ani, Apple a adăugat API-urile lipsă, browserele au îmbunătățit fluxul de instalare, iar specificațiile pentru service workers s-au stabilizat. Astfel, pentru echipele de produs fără bugete uriașe, PWA a devenit o soluție surprinzător de solidă.

Acest articol este un studiu de caz onest despre trefa.app — o aplicație pentru un concurs de pronosticuri corporate, construită ca PWA — după un an în producție. Ce a funcționat, ce nu a funcționat și cui i-aș recomanda PWA astăzi.

Context: ce este trefa.app

trefa.app este o aplicație web pentru un concurs de pronosticuri dedicat companiilor. Utilizatorul se autentifică prin Google, creează un concurs pentru firma sa, își invită colegii printr-un link sau cod QR, și toți fac împreună pronosticuri pe rezultatele meciurilor. Aplicația sincronizează datele din API-uri sportive (NHL, Premier League, campionate mondiale) în loturi, de câteva ori pe zi, și recalculează punctele după încheierea meciurilor.

Frontend-ul folosește Next.js 16 + React 19 + Tailwind și este găzduit pe Vercel. Backend-ul este scris în Django 5 + DRF + Channels și rulează pe Hetzner. La mijloc se află PostgreSQL pe Supabase și Redis pentru comunicarea în timp real.

Un detaliu interesant: nu există nicio aplicație nativă de iOS sau Android. PWA-ul este singurul client. Utilizatorii de pe iPhone, Android, Windows și macOS folosesc exact același lucru.

De ce am ales PWA în locul aplicațiilor native

Decizia a fost în mare parte de natură economică. O aplicație nativă ar fi presupus:

  • Dezvoltarea a doi clienți în paralel (iOS Swift + Android Kotlin) sau folosirea unui framework cross-platform (Flutter, React Native).
  • Procesul de publicare în App Store și Google Play — taxe de înscriere, întârzieri la review, republicare periodică la fiecare modificare a API-ului de backend.
  • Notificări push prin APNs și FCM, adică două infrastructuri separate și două procese de certificare diferite.
  • Fluxul de actualizare prin magazinele de aplicații — utilizatorul trebuie să-și facă update activ, iar o parte din ei rămân blocați pe o versiune mai veche luni de zile.

Pentru un produs cu un public-țintă relativ restrâns (echipe din companii, nu mass-market), costurile dezvoltării native ar fi depășit cu mult beneficiile. PWA a eliminat dintr-un foc toate problemele menționate mai sus.

Avantaje tehnice pe care utilizatorii nu le observă

Aceasta este partea pe care probabil aș fi subestimat-o înainte de lansarea în producție. Din perspectiva dezvoltării, PWA aduce o serie de avantaje concrete care ne economisesc săptămâni de muncă în fiecare an:

Deploy-ul este instant. Dai push în main → Vercel face build → în 2 minute, noua versiune ajunge la toți utilizatorii. Fără submisie în store-uri, fără timp de așteptare, fără jonglerii cu versiuni de client compatibile cu backend-ul. Dacă fac o schimbare majoră (breaking change) în API, a doua zi o pot repara, iar toată lumea primește fix-ul imediat.

Un singur cod pentru tot. iOS, Android, Windows, macOS, Linux — e aceeași aplicație peste tot. Fără bug-uri specifice unei anumite platforme („asta se strică doar pe iPhone 13 în dark mode”), fără implementări duplicate.

Drum scurt către utilizator. Trimiți un link, dă click, e în aplicație. Fără „descarcă aplicația noastră din App Store, înregistrează-te și abia apoi autentifică-te”. Pentru produsele B2B cu o frecvență de utilizare redusă (un concurs de pronosticuri e activ doar pe durata unui turneu sportiv), acesta este un beneficiu uriaș pentru rata de conversie.

Notificările push funcționează chiar și fără instalare. Service worker-ul înregistrează abonamentul push. Când utilizatorul dă click pe „Permite notificările”, începe să primească alerte înainte de meciuri, indiferent dacă a adăugat sau nu aplicația pe ecranul principal (home screen) sau dacă doar a deschis-o ocazional în Safari.

Ce nu poate face PWA (secțiunea onestă)

Aici, sinceritatea este mai importantă decât marketingul. PWA are limite reale, de care ne-am lovit direct în producție.

Notificările push pe iOS au particularități. Apple Web Push există începând cu iOS 16.4, dar funcționează doar dacă utilizatorul adaugă PWA-ul pe ecranul principal. Dacă folosește aplicația direct din tab-urile din Safari, abonamentul push nu se salvează. Este un obstacol pe care aplicațiile native nu îl au.

App Store-ul nu este accesibil. Pentru anumite profiluri de clienți (departamente de HR, manageri IT din corporații), „nu e în App Store” echivalează cu „nu e o aplicație serioasă”. E o percepție subiectivă, dar cât se poate de reală.

Anumite API-uri ale sistemului de operare sunt indisponibile. Bluetooth Low Energy, NFC, acces profund la sistemul de fișiere — pentru o aplicație obișnuită nu contează, dar dacă ai nevoie de aceste funcționalități, PWA te va limita.

Modul offline este posibil, dar nu automat. Service worker-ul trebuie configurat manual, strategiile de cache trebuie gândite de la zero, iar cozile de sincronizare implementate. Pentru o aplicație complet offline-first, implică mult mai multă muncă decât își imaginează majoritatea dezvoltatorilor.

Performanța comparativ cu aplicațiile native: PWA este mai lentă cu ~15–25% la prima încărcare (din cauza parsării bundle-ului JS) și cu ~5–10% în interacțiunile obișnuite. Pentru majoritatea aplicațiilor, diferența este imperceptibilă; totuși, pentru gaming hardcore sau editare video, este un dealbreaker.

Rezultate după un an în producție

Date concrete de la trefa.app după un an de funcționare:

  • Stabilitate cross-platform — o echipă formată dintr-un singur dezvoltator întreține aplicația pe toate sistemele de operare, fără bug-uri specifice platformei. Același ciclu de testare se aplică peste tot.
  • Frecvența deploy-urilor — în medie 3–5 deploy-uri pe săptămână prin Vercel. Niciunul dintre ele nu este afectat de întârzierile de aprobare din App Store.
  • Notificări push — activate de ~70% dintre utilizatori, cu o rată de livrare de ~95% pe Android și ~85% pe iOS (din cauza cerinței de a instala aplicația pe ecranul principal).
  • Fără taxe de App Store — o economie de aproximativ 70 USD pe an pentru conturile de dezvoltator, plus comisionul de circa 30% din tranzacții (care altfel ar fi fost aplicat achizițiilor in-app).

Până la urmă, principalul beneficiu de business nu a fost cel tehnic. A fost viteza de iterație. Dacă un client îmi scria „mi-ar fi utilă funcția asta”, de obicei mă apucam de ea în aceeași zi, iar într-o săptămână era deja în producție. Așa ceva pur și simplu nu este posibil la o aplicație nativă.

Cui i-aș recomanda azi PWA

PWA este o alegere potrivită dacă se aplică cel puțin două dintre următoarele afirmații:

  • Ai resurse limitate și nu îți permiți să dezvolți două aplicații native plus o versiune web.
  • Utilizatorii tăi folosesc aplicația ocazional (nu zilnic), deci este important să existe o fricțiune minimă la prima deschidere.
  • Aplicația ta nu are nevoie de API-uri avansate ale sistemului de operare (Bluetooth, NFC, acces complet la sistemul de fișiere).
  • Vrei să faci deploy fără să treci de barierele magazinelor de aplicații.
  • Publicul tău țintă este mixt — iOS și Android, mobil și desktop.

Pe de altă parte, PWA probabil nu este alegerea potrivită dacă:

  • Aplicația ta rulează zilnic, câteva ore pe zi, iar utilizatorii o folosesc intens (rețele sociale, aplicații de mesagerie).
  • Ai nevoie de integrări avansate cu sistemul de operare.
  • Clienții tăi se așteaptă să fii prezent în App Store.
  • Performanța este critică (gaming, editare video, AR).

Concluzie

Poate că hype-ul din jurul PWA s-a stins, dar tehnologia a evoluat în tăcere până în punctul în care, pentru multe produse, este o alegere mai bună decât dezvoltarea nativă. trefa.app rulează ca PWA de un an și nu văd niciun motiv să schimb asta. Dimpotrivă — dacă aș lua-o de la capăt astăzi, aș alege această cale mult mai repede.

Dacă oscilezi între PWA și o aplicație nativă pentru proiectul tău, ia în calcul un aspect care depășește argumentele tehnice: PWA te va duce mai repede în producție. Iar în fazele incipiente, viteza de iterație este mai valoroasă decât orice altceva.

Apropo, poți încerca și tu trefa.app — fără nicio instalare, dai doar un click și începi să faci pronosticuri.