Practical Progressive Web Apps
In this series, we'll turn a Laravel app into a practical progressive web app for people working in the field, where unreliable connectivity is just part of the job. We'll cover the core PWA pieces like the manifest and a root-level service worker, then build real offline support with dynamic manifests, smart caching strategies, placeholder fallbacks, and clear UI feedback around network status.
We'll also add push notifications from end to end and move beyond "read-only offline" by building a true offline workflow for form submissions using IndexedDB, background sync, and a dedicated Sanctum token. By the end, you'll have a Laravel app that feels installable, resilient, and dependable in the real world.
Series episodes
Getting Started
5m 47sLearn how to add a web app manifest to your Laravel app for offline support and a more native, field-ready user experience.
Building the Manifest
12m 14sLearn how to build a PWA manifest in Laravel, enable app installation, and verify it in the browser with this practical Laracasts lesson.
Making the Manifest Dynamic
13m 2sMake your Laravel web app manifest dynamic: move settings to config, serve manifest.json via a controller, and prep for service workers.
Service Worker Basics
24m 43sLearn service worker basics and make your app work offline with a network-first caching strategy for reliable page loads.
Dynamic Precache, Part 1
30m 20sLearn dynamic precaching in Laravel: generate a backend pre-cache manifest and update your service worker for smarter caching.
Dynamic Precache, Part 2
13m 38sLearn dynamic precaching in Laravel: pull asset URLs from the Vite manifest, optimize the app shell, and handle local dev issues.
Debugging Vite Caching
11m 6sDebug Vite caching issues in your service worker, trace asset failures, and fix offline page loading with clear, practical steps.
A Cache-First Strategy
8m 6sLearn a cache-first strategy for rarely changing assets, refactor your fetch handler, and deliver faster, near-instant responses.
Offline Placeholders
11m 22sLearn how to fine-tune service worker caching with offline placeholders so your app stays fast, useful, and reliable without connectivity.
Offline Notifications
12m 46sLearn how to add an offline banner to your PWA with Alpine stores and navigator.onLine for clearer, smarter user feedback.
Improving Offline UX
8m 58sLearn how to improve PWA offline UX by adding a health endpoint and probe to detect network or server issues before users do.
Asking Permission For Notifications
17m 32sLearn how to request browser notification permission in Laravel using Alpine with a clean NotificationBanner component.
Subscribing To Notifications
32m 11sLearn how to subscribe browsers to push notifications with VAPID keys and database storage so your app can send real alerts.
Sending Notifications
16m 51sLearn to send web push notifications in Laravel: wire up the service worker, show browser alerts, and send test payloads to subscribers.
Interacting With Notifications
10m 19sLearn to handle push notification clicks in Laravel by focusing an open tab or opening the right page with a service worker.
Sending Mass Notifications
6m 52sLearn to send mass push notifications in Laravel using queued jobs and a PushNotification service, triggered by practical meter reading updates.
Unsubbing From Notifications
10m 17sLearn how to unsubscribe push notifications for the current device using Alpine, remove the endpoint, and keep subscriptions in sync.
Storing Requests In Indexeddb
19m 35sLearn how to store offline form requests in IndexedDB, intercept submissions, and prepare your app for seamless background sync.
Handling The Sync Event
18m 17sLearn how to handle the sync event in a service worker, process the outbox safely, and prepare your app for going back online.
Syncing Offline Data
18m 39sLearn how to sync offline data with Sanctum, IndexedDB, and service workers so queued changes securely update once you're back online.




