Every SaaS field-sales tool vendor eventually faces the same question: go native (React Native, Flutter) or stick with web? React Native trades one codebase for two platforms — and adds a build pipeline, App Store gatekeeping, and version fragmentation headaches. Velocity X chose differently: Progressive Web App. Install to home screen, camera access, GPS, push notifications, background sync — and zero App Store submission. The rep launches from their home screen. The browser's security sandbox handles permissions. The only "build" is a JSON manifest and a Service Worker. It sounds too simple to work. It actually does.
What PWA Means (and Why It Stopped Being Hype in 2026)
A Progressive Web App is a web app that, when installed to a device's home screen, behaves like a native app. It runs full-screen. It gets a splash screen. It persists offline. Push notifications wake the app. Your browser's manifest file tells iOS and Android how to render the install prompt — no App Store involved.
The "progressive" part means it degrades gracefully: on a desktop browser, Velocity X loads as a normal responsive site. On mobile, the browser prompts "Add to Home Screen". Once installed, the app runs in its own window, hides the address bar, and feels native. iOS added full PWA support (background sync, push) in 2024. Android has had it since 2019. In 2026, ignoring PWA for mobile-first SaaS is leaving money on the table.
The Setup: Manifest + Service Worker
Velocity X's PWA setup is two files. The manifest (usually `public/manifest.json`) declares the app's identity — name, icons, start URL, display mode (fullscreen), theme colour, and orientation. Browsers read this and show an install banner. The Service Worker (a single JavaScript file registered on page load) intercepts requests and caches responses, enabling offline mode and push notifications.
That's it. No Xcode. No Gradle. No dependency on the Google Play Store approving your update. Push a new version to your server, the Service Worker updates automatically on next visit, and 100% of users get the update within 24 hours. Compare that to React Native: you build locally, submit to stores, wait for approval, and users get prompted to update — adoption lags weeks behind release.
Camera, GPS, Notifications — All from Web APIs
Velocity X field reps need to take photos (damage assessment), record GPS coordinates (dispatch validation), and receive push notifications (new leads assigned). These used to be "native only" — PWA now handles all three without leaving the web stack.
The Camera API (`navigator.mediaDevices.getUserMedia()`) prompts for permission once. Your rep snaps a photo, which gets queued for upload when syncing. GPS (`navigator.geolocation.watchPosition()`) tracks the route in real time — the browser asks permission once and remembers it. Push notifications are sent via Web Push API — the server sends a signed payload, the browser stores it, and when a new lead arrives, the notification pops even if the app isn't open.
Crucially: the browser's permission model is simpler than native. No manifest declarations, no Info.plist lists — the app asks, the user grants or denies, the browser remembers. The security model is transparent: permissions are visible in settings, revocable at any time, and auditable in browser dev tools.
The Trade-offs: Where PWA Wins (and Where It Doesn't)
PWA isn't a universal solution. It excels at field sales: reps need camera, GPS, offline mode, and push — all PWA handles natively. It's weaker at low-level hardware access (Bluetooth sensors, NFC chips, accelerometer-heavy features). For 95% of field-sales use cases, PWA is simpler, faster, and cheaper to ship than React Native. The question isn't "Is PWA perfect?" — it's "Does PWA solve the problem?" For Velocity X, yes.
Frequently Asked Questions
Do reps have to install the app?
No. On mobile, the browser shows an install banner. Reps can ignore it and use the web version — it works identically. Installation is a quality-of-life upgrade (home-screen icon, no address bar, offline mode). Adoption is typically 60–70% of field reps within the first month.
What happens when a rep updates iOS?
The PWA persists across OS updates. Service Workers and cached data survive. The app continues working. Push notifications are preserved. No re-download needed.
Can reps use Velocity X on a computer?
Yes. PWA is responsive. Install to desktop via Chrome's menu ("Install app"). You get the same full-screen, no-address-bar experience. Useful for office staff managing routes or supervisors reviewing field data.
What if the rep's phone has no service at all?
The app loads cached data from the last sync (today's route, assigned leads, task list). Push notifications won't deliver until connection returns. See our detailed post on [offline field mode](/blog/offline-field-mode-pwa-sync) for sync strategy.
Does this work on both iOS and Android equally?
Nearly. Android PWA support is mature and feature-complete (background sync, push, camera, GPS all work seamlessly). iOS added parity in 2024, but background sync behaves slightly differently — it's more conservative with power consumption. For both platforms, the web app is identical; behaviour differences are minimal.
How much bandwidth does a PWA use compared to a web app?
After first load, PWA uses the same amount as a non-installed web app. The Service Worker caches smartly: static assets cache on first visit, API responses cache per endpoint, old caches get pruned automatically. If anything, PWA uses less bandwidth because the browser can serve cached assets without hitting the server.
The Bottom Line
React Native promised "write once, deploy everywhere" — reality is two codebases, two build pipelines, and twice the testing overhead. Velocity X's PWA skips the fiction. One codebase, one deploy, universal compatibility, and instant updates. Your field reps install to home screen and get an experience that feels native without the native headaches. For field sales in 2026, PWA isn't a fallback. It's the standard.
Pricing scales from starter field teams to enterprise dispatch networks. See [what Velocity X pricing looks like](/pricing).