Zašto PWA nije mrtav: studija slučaja trefa.app

Blog · 17. svibnja 2026.

Zašto PWA nije mrtav: studija slučaja trefa.app

Hype oko Progressive Web App tehnologije završio je, ali tehnologija je u tišini sazrela. Što je trefa.app naučio tijekom godine u produkciji s tisućama korisnika na iOS-u i Androidu.

Između 2017. i 2020. godine PWA je bio u tehnološkom hype-ciklusu. Konferencije, blogovi, službena podrška Googlea i Microsofta. Zatim je uslijedilo razočaranje — iOS je držao ključne API-je zatvorenima, upiti za instalaciju pokazali su se zbunjujućima, a marketing nativnih aplikacija i dalje je bio jači. Zajednica se preselila na Flutter, React Native i Capacitor.

No, potiho se dogodilo nešto drugo. PWA tehnologija nastavila je sazrijevati. Apple je posljednjih godina dodao API-je koji su nedostajali, preglednici su poboljšali proces instalacije, a specifikacija service workera se stabilizirala. Za proizvodne timove bez velikog proračuna PWA je postao iznenađujuće moćno rješenje.

Ovaj je članak iskrena studija slučaja (honest case study) za trefa.app — aplikaciju za ligu prognoza tvrtke izgrađenu kao PWA — nakon godinu dana u produkciji. Što je funkcioniralo, što nije i kome bih danas preporučio PWA.

Kontext: što je trefa.app

Trefa.app je web aplikacija za ligu prognoza tvrtke. Korisnik se prijavljuje putem Googlea, osniva ligu za svoju tvrtku, poziva kolege putem poveznice ili QR koda i svi zajedno prognoziraju rezultate utakmica. Aplikacija sinkronizira podatke iz sportskih API-ja (NHL, Premier League, Svjetsko prvenstvo) i u stvarnom vremenu preračunava bodove.

Frontend je Next.js 16 + React 19 + Tailwind, udomaćen na Vercelu. Backend je Django 5 + DRF + Channels na Hetzneru. Između toga PostgreSQL na Supabaseu i Redis za komunikaciju u stvarnom vremenu.

Zgodan detalj: ne postoji nikakva nativna iOS niti Android aplikacija. PWA je jedini klijent. Korisnici na iPhoneu, Androidu, Windowsima i macOS-u koriste potpuno istu stvar.

Zašto smo odabrali PWA umjesto nativnih aplikacija

Odluka je većim dijelom bila ekonomska. Nativna aplikacija značila bi:

  • Razvoj dvaju paralelnih klijenata (iOS Swift + Android Kotlin) ili neki cross-platform okvir (Flutter, React Native).
  • Proces prijave na App Store + Google Play — naknada za prijavu, kašnjenja u recenziji, periodičko ponovno objavljivanje pri promjenama pozadinskog (backend) API-ja.
  • Push obavijesti putem APNs-a i FCM-a, dvije različite infrastrukture, dva različita postupka certificiranja.
  • Tijek ažuriranja kroz trgovine — korisnik mora aktivno ažurirati, a dio njih mjesecima ostaje na starijoj verziji.

Za proizvod s relativno malom ciljanom publikom (timovi u tvrtkama, ne masovno tržište), troškovi nativnog razvoja bili su znatno viši od koristi. PWA je uklonio sve spomenute stavke odjednom.

Tehničke prednosti koje korisnici neće primijetiti

Ovo je dio koji bih podcijenio prije puštanja u produkciju. Iz perspektive razvoja, PWA ima niz konkretnih prednosti koje štede tjedne rada godišnje:

Implementacija (deploy) je trenutačna. Push u main → Vercel je izgradi (builda) → za 2 minute nova verzija je kod svih korisnika. Bez prijava, bez čekanja, bez kompatibilnih verzija klijenta i backend-a. Ako napravim breaking change u API-ju, sljedeći dan je popravim i svi odmah imaju ispravak.

Jedan kôd za sve. iOS, Android, Windows, macOS, Linux — svugdje ista aplikacija. Bez bugova specifičnih za platformu ("ovo se kvari samo na iPhoneu 13 u tamnom načinu rada"), bez dvostruke implementacije.

Kratak put do korisnika. Pošalješ poveznicu, klikne, u aplikaciji je. Nema onoga "preuzmite našu aplikaciju iz App Storea, registrirajte se i zatim se prijavite". Za B2B proizvode s niskom učestalošću korištenja (liga prognoza radi samo tijekom sportskog turnira) ovo je ogroman konverzijski benefit.

Push obavijesti rade i bez instalacije. Service worker registrira push pretplatu. Kada korisnik klikne "Dopusti obavijesti", počinje primati upozorenja prije utakmica bez obzira na to je li dodao aplikaciju na početni zaslon ili ju je samo povremeno otvorio u Safariju.

Što PWA ne može (iskreni dio)

Ovdje je iskrenost važnija od marketinga. PWA ima stvarna ograničenja na koja smo naišli u produkciji.

iOS push obavijesti imaju svoje specifičnosti. Apple Web Push postoji od iOS 16.4, ali radi samo ako korisnik doda PWA na početni zaslon. Ako koristi aplikaciju putem kartica u Safariju, push pretplata se ne sprema. To je prepreka (friction) koju nativna aplikacija nema.

App Store nije dostupan. Za neke profile kupaca (HR odjele, IT menadžere u korporacijama) "nemam to u App Storeu" ekvivalentno je s "nije ozbiljno". Subjektivno, ali stvarno.

Neki OS API-ji su nedostupni. Bluetooth Low Energy, NFC, duboki pristup datotečnom sustavu (deep file system access) — za uobičajenu aplikaciju to nije problem, ali ako trebate ove značajke, PWA vas ograničava.

Izvanmrežni (offline) način rada je moguć, ali ne automatski. Service worker morate postaviti ručno, osmisliti strategije predmemoriranja (cache), implementirati redove za sinkronizaciju (sync queues). Za potpuno offline-first aplikaciju to je više posla nego što programeri zamišljaju.

Usporedba performansi (performance benchmark) u odnosu na nativne aplikacije: PWA je sporiji za ~15–25% pri prvom učitavanju (zbog raščlanjivanja JS paketa) i ~5–10% u uobičajenoj interakciji. Za većinu aplikacija to je neprimjetna razlika, ali za hardcore gaming ili video uređivanje to je dealbreaker.

Rezultati nakon godinu dana u produkciji

Konkretni podaci iz trefa.app nakon godinu dana rada:

  • Cross-platform stabilnost — razvojni tim od 1 osobe održava aplikaciju na svim operativnim sustavima bez specifičnih bugova. Isti ciklus testiranja za sve.
  • Učestalost implementacije (deploy frequency) — prosječno 3–5 implementacija tjedno putem Vercela. Nijedna od njih ne rješava kašnjenja s prijavom na App Store.
  • Push obavijesti — aktivno ~70% korisnika, stopa isporuke push obavijesti ~95% na Androidu, ~85% na iOS-u (zahvaljujući zahtjevu za instalaciju na početni zaslon).
  • Bez naknada za App Store — ušteđeno oko 70 USD godišnje na razvojnim računima + oko 30% provizije na transakcije (koja bi inače prijetila kod kupnji unutar aplikacije).

Glavna poslovna korist na kraju nije bila tehnička. Bila je to brzina iteracije. Ako bi kupac napisao "ova bi mi funkcija dobro došla", obično bih je počeo raditi isti dan i u roku od tjedan dana bila bi u produkciji. To kod nativne aplikacije jednostavno nije moguće.

Kome bih danas preporučio PWA

PWA je prikladan ako vrijede barem dvije od sljedećih točaka:

  • Imate ograničene resurse i ne možete si priuštiti dvije nativne aplikacije uz web verziju.
  • Vaši korisnici koriste aplikaciju povremeno (ne svaki dan), pa je niska prepreka (friction) pri prvom otvaranju važna.
  • Vaša aplikacija ne treba napredne OS API-je (Bluetooth, NFC, puni pristup datotečnom sustavu).
  • Želite implementaciju bez posrednika u obliku trgovina aplikacijama.
  • Vaša ciljana publika je mješovita — iOS i Android, mobilni uređaji i stolna računala.

S druge strane, PWA vjerojatno neće biti pravi izbor ako:

  • Vaša aplikacija radi svakodnevno, nekoliko sati dnevno, i korisnici je intenzivno koriste (društvene mreže, razmjena poruka).
  • Trebate napredne integracije s operativnim sustavom.
  • Vaši kupci očekuju prisutnost u App Storeu.
  • Performanse su kritične (gaming, video, AR).

Zaključak

Hype oko PWA-a je možda završio, ali tehnologija je potiho narasla do točke u kojoj je za mnoge proizvode bolji izbor od nativnog razvoja. Trefa.app se oslanja na PWA već godinu dana i ne vidim razloga da to mijenjam. Naprotiv — da danas krećem ispočetka, odlučio bih se za to još brže.

Ako za svoj projekt birate između PWA-a i nativne aplikacije, uzmite u obzir jednu stvar izvan tehničkih argumenata: PWA vas brže dovodi u produkciju. A u ranijoj fazi, brzina iteracije je vrjednija od bilo čega drugog.

Usput, trefa.app možete i sami isprobati — bez instalacije, samo kliknete i prognozirate.

Zašto PWA nije mrtav: studija slučaja trefa.app