EmicraftEngineering Firm

Appearance

Start a project
Timilehin AliyuAugust 20, 2026 (updated on August 22, 2026)
PWA, OFFLINE FIRST, SERVICE WORKER, INDEXEDDB, FRONTEND, REACT

Progressive Web Apps: Transforming Traditional ERP Systems into Offline-Capable Frontends

How we re-architected enterprise operations for low-bandwidth warehouse environments using Service Workers, IndexedDB, and background sync.

Traditional enterprise ERP systems are notoriously brittle in field operations. When workers in manufacturing plants, automotive showrooms, or distribution centers lose connectivity for even thirty seconds, typical web interfaces lock up with infinite spinners or drop unsaved inventory logs. We re-engineered this model by treating the local browser as an autonomous, offline-capable database first, with cloud synchronization running strictly in the background.

Service Worker Background Sync & IndexedDB Mutation Queuetypescript
// Source Code✓ Type-Safe
// Offline-First Mutation Dispatcher
import { openDB } from "idb";

export async function queueOfflineMutation(endpoint: string, payload: unknown) {
  const db = await openDB("erp-offline-store", 1, {
    upgrade(db) {
      db.createObjectStore("mutations", { keyPath: "id", autoIncrement: true });
    },
  });

  // 1. Write immediately to local IndexedDB
  await db.add("mutations", {
    endpoint,
    payload,
    timestamp: Date.now(),
    status: "pending",
  });

  // 2. Register background sync with the Service Worker
  if ("serviceWorker" in navigator && "SyncManager" in window) {
    const registration = await navigator.serviceWorker.ready;
    await registration.sync.register("sync-erp-mutations");
  }
}
Interactive PreviewLive State

Click the button below to test headless modal composition:

Rendered at 60 FPSZero Latency

The Service Worker & IndexedDB Foundation

Instead of firing direct HTTP requests on every user action, all operational records — barcode scans, order line updates, inspection sign-offs — write synchronously to an IndexedDB object store.

A registered Service Worker intercepts network requests and handles the cache-first routing for static app bundles, guaranteeing sub-100ms UI response times regardless of 3G/4G connectivity states.

A web application in 2026 should never show a network error screen for standard operations. Persist locally, confirm instantly, sync in the background.

Handling Conflict Resolution with Vector Clocks

When two warehouse managers update the same pallet quantity while offline, standard Last-Write-Wins (LWW) rules can silently overwrite valid data.

We attach lightweight vector clocks and idempotency hashes to every queued mutation. When the client reconnects, the server processes commutative changes automatically and flags actual logical conflicts for human review with an interactive diff modal.

sync-worker.ts
self.addEventListener("sync", (event: SyncEvent) => {
  if (event.tag === "sync-erp-mutations") {
    event.waitUntil(drainMutationQueue());
  }
});

async function drainMutationQueue() {
  const db = await openDB("erp-offline-store", 1);
  const pending = await db.getAll("mutations");

  for (const item of pending) {
    try {
      await fetch(item.endpoint, {
        method: "POST",
        headers: { "Content-Type": "application/json", "X-Idempotency-Key": item.id },
        body: JSON.stringify(item.payload),
      });
      await db.delete("mutations", item.id);
    } catch (err) {
      console.warn("Retrying sync on next connection window", err);
      break;
    }
  }
}
Key Engineering Takeaway: Always wrap queued requests with deterministic idempotency keys to ensure retried network requests never double-execute.

Technical Summary

Building offline-capable PWAs bridges the gap between web agility and native app reliability. By embracing local-first persistence, enterprise teams maintain 100% operational uptime.

Sign up to receive a weekly recap from Emicraft

Deep-dives on software architecture, design systems, and scaling senior engineering squads. No marketing fluff — only production insights.

✓ Delivered every Tuesday✓ Unsubscribe anytime
TA

Timilehin Aliyu

Software Engineer

Software engineer building resilient web frontends, offline-capable PWAs, AI compilers, and financial transaction engines at Emicraft.