Browse all series
TechniquesIntermediate20 episodes

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 47s

Learn 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 14s

Learn 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 2s

Make 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 43s

Learn service worker basics and make your app work offline with a network-first caching strategy for reliable page loads.

Dynamic Precache, Part 1

30m 20s

Learn dynamic precaching in Laravel: generate a backend pre-cache manifest and update your service worker for smarter caching.

Dynamic Precache, Part 2

13m 38s

Learn dynamic precaching in Laravel: pull asset URLs from the Vite manifest, optimize the app shell, and handle local dev issues.

Debugging Vite Caching

11m 6s

Debug Vite caching issues in your service worker, trace asset failures, and fix offline page loading with clear, practical steps.

A Cache-First Strategy

8m 6s

Learn a cache-first strategy for rarely changing assets, refactor your fetch handler, and deliver faster, near-instant responses.

Offline Placeholders

11m 22s

Learn how to fine-tune service worker caching with offline placeholders so your app stays fast, useful, and reliable without connectivity.

Offline Notifications

12m 46s

Learn how to add an offline banner to your PWA with Alpine stores and navigator.onLine for clearer, smarter user feedback.

Improving Offline UX

8m 58s

Learn 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 32s

Learn how to request browser notification permission in Laravel using Alpine with a clean NotificationBanner component.

Subscribing To Notifications

32m 11s

Learn how to subscribe browsers to push notifications with VAPID keys and database storage so your app can send real alerts.

Sending Notifications

16m 51s

Learn 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 19s

Learn 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 52s

Learn to send mass push notifications in Laravel using queued jobs and a PushNotification service, triggered by practical meter reading updates.

Unsubbing From Notifications

10m 17s

Learn how to unsubscribe push notifications for the current device using Alpine, remove the endpoint, and keep subscriptions in sync.

Storing Requests In Indexeddb

19m 35s

Learn how to store offline form requests in IndexedDB, intercept submissions, and prepare your app for seamless background sync.

Handling The Sync Event

18m 17s

Learn 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 39s

Learn how to sync offline data with Sanctum, IndexedDB, and service workers so queued changes securely update once you're back online.

Continue learning

Thumbnail for Multitenancy in Practice
Multitenancy in Practice

With Kevin McKee

  • 10 episodes
  • Intermediate
  • Techniques
Thumbnail for Whip Monstrous Code Into Shape
Whip Monstrous Code Into Shape

With Jeffrey Way

  • 20 episodes
  • Advanced
  • Techniques
Thumbnail for BaseCode Reloaded
BaseCode Reloaded

With Jason McCreary

  • 16 episodes
  • Intermediate
  • Techniques
Thumbnail for Developer Practice
Developer Practice

With Jeffrey Way

  • 1 episodes
  • Intermediate
  • Techniques
Thumbnail for Build a Forum With Laravel
Build a Forum With Laravel

With Luke Downing

  • 51 episodes
  • Advanced
  • Techniques

Would you like to hear from Laracasts by email occasionally?