Progressive Web App (PWA) Development

Our company is engaged in the development, support and maintenance of sites of any complexity. From simple one-page sites to large-scale cluster systems built on micro services. Experience of developers is confirmed by certificates from vendors.
Development and maintenance of all types of websites:
Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Showing 9 of 9 servicesAll 2065 services
Complex
from 1 week to 3 months
Medium
~2-3 business days
Medium
from 1 business day to 3 business days
Medium
~2-3 business days
Simple
from 4 hours to 2 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    822
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    847
  • image_website-sbh_0.png
    Website development for SBH Partners
    999
  • image_website-_0.png
    Website development for Red Pear
    451

Progressive Web App: Service Worker, Offline, Web Push, Add to Home Screen

A PWA isn't a separate technology, it's a set of browser APIs that together make a web application closer to native. You can implement all three components (Service Worker, Web App Manifest, HTTPS) but get a poor PWA. You can do just offline caching and Web Push — and that already delivers tangible value for users.

Service Worker: How It Really Works

Service Worker is a JavaScript proxy between the browser and the network. Runs in a separate thread, no DOM access, lives independently from the page. Main task — intercept network requests and decide where to serve them from: cache, network, or a combination.

Caching strategies for different resources:

Cache First — cache first, then network. For static assets with content hash in the name (scripts, styles, fonts): a file with a hash never changes, can cache forever.

Network First — network first, on error — cache. For API requests that should return current data, but offline it's better to show stale than nothing.

Stale While Revalidate — serve from cache immediately, simultaneously update cache from network. For content where a small delay in freshness is acceptable: article pages, product catalog.

Workbox from Google handles routine logic: cache versioning, cleaning old entries, strategies. Without Workbox, writing a correct Service Worker with proper cache invalidation — 300+ lines of code with non-trivial edge cases.

Vite + vite-plugin-pwa generates Service Worker automatically from config, including precaching all static assets after build.

Offline Mode: What It Really Means

"Works offline" means different things for different products.

Offline reading: news sites, documentation, blogs. Service Worker caches pages on first visit. Stale While Revalidate strategy + Background Sync for syncing when connection recovers.

Offline editing: tasks, notes, forms. IndexedDB stores unsaved data locally. Background Sync API queues the operation — browser syncs itself when connection appears, even if the tab is closed. Limitation: Background Sync only supported in Chromium, not in Safari.

Offline form: user filled out a form offline, pressed submit. Without PWA — error, data lost. With Background Sync — form queued, sent automatically. For medical and insurance forms this is critically important.

Problem often forgotten: sync conflicts. User A edited a record offline, user B changed it online. On sync — conflict. Need a conflict resolution strategy: last-write-wins (risky), three-way merge (complex), or show conflict to user (honest).

Web Push: Notification Delivery

Web Push works through browser + Push Service (separate for each browser: FCM for Chrome/Edge, APNs for Safari). User grants permission → browser subscribes to Push Service → you get endpoint + keys → you send message to Push Service → it delivers to browser.

Implementation: web-push library (Node.js) or equivalent for your backend. VAPID keys generated once. Subscription stored in database — this is your "device token".

Platform limitations in 2024:

  • iOS 16.4+ supports Web Push, but only for installed PWA (added to home screen)
  • Chrome, Firefox, Edge — full browser support without installation
  • Safari macOS — support since macOS Ventura

Notification frequency and relevance directly impact subscriber churn. Users revoke permission if notifications aren't relevant. A/B testing send time and wording — standard practice.

Add to Home Screen and Installation

Web App Manifest — JSON file with application metadata: name, short_name, icons (minimum 192x192 and 512x512 PNG), start_url, display: standalone, theme_color, background_color.

display: standalone hides browser UI — application looks native. display: minimal-ui keeps minimal browser navigation.

Browser shows Install Prompt (beforeinstallprompt) when conditions are met: HTTPS, valid manifest, Service Worker. Prompt can be deferred and shown at the right moment (not immediately on load):

let deferredPrompt;
window.addEventListener('beforeinstallprompt', (e) => {
  e.preventDefault();
  deferredPrompt = e;
});

// Later, on user action:
installButton.addEventListener('click', async () => {
  deferredPrompt.prompt();
  const { outcome } = await deferredPrompt.userChoice;
});

After installation track via appinstalled event and display-mode: standalone media query.

Performance and PWA

App Shell architecture: minimal HTML/CSS/JS needed to render application shell, cached by Service Worker and loaded instantly. Content loads on top. Difference in perceived speed — noticeable even on slow connections.

Precaching critical resources when installing Service Worker: on first visit cache everything needed for offline work. Precache bundle size affects first install time — don't put everything in there.

Process

Audit current application (Lighthouse PWA score), identify valuable offline scenarios, configure Service Worker through Workbox, implement Web Push if needed, test on real devices. Lighthouse PWA section and Chrome DevTools Application tab — main debugging tools.

Timeline

Basic PWA (manifest + Service Worker + offline static cache): 1–2 weeks on top of a ready app. Web Push integration: 1–2 weeks. Offline editing with IndexedDB + Background Sync: 3–6 weeks depending on data complexity.