Pwa offline readiness review
Skill Raishin/vanguard-frontier-agentic/skills/frontend/pwa-offline-readiness-review
Validates installability against W3C manifest criteria and tests real offline navigation behavior end to end, rejecting a manifest-schema-valid but practically non-installable or non-functional-offline PWA.From its SKILL.md
npx -y skills add Raishin/vanguard-frontier-agentic --skill pwa-offline-readiness-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 20 stars20 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.6 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
PWA Offline Readiness Review
Purpose
A manifest.json that passes JSON-schema validation, and a Lighthouse PWA badge that reads 100, both prove far less than they appear to. The W3C manifest spec, beforeinstallprompt behavior, and offline-fallback rendering are three separate systems that must each work — a pass on one says nothing about the other two. The common failure mode is "checklist theater": a team ships a schema-valid manifest and a registered service worker, calls the app a PWA, and only discovers in production that the install banner never fires (display: browser left at a framework default) or that a network drop shows the browser's stock offline error page instead of a designed fallback. This skill performs the end-to-end verification — install criteria against the live origin, service-worker activation state, and an actual offline-throttle navigation test — that a static manifest read cannot substitute for.
When to use
Use this skill when the user asks to:
- audit whether an app is a "real" installable PWA, not just manifest-schema-valid,
- debug why the install prompt /
beforeinstallpromptnever fires despite a Lighthouse PWA pass, - review offline-fallback behavior, or debug a network drop showing the browser's default error page instead of a designed offline page,
- validate manifest fields (
name, icons,start_url,scope,display) against W3C installability criteria before a release.
When not to use
- Caching-strategy correctness for an already-installable app (route classification,
CacheFirstvs.NetworkFirst, authenticated-response caching risk) — hand off toservice-worker-cache-strategy-review; that skill owns caching-strategy depth and this one does not duplicate it. - General HTTP
Cache-Control/CDN caching review with no manifest or service-worker installability question involved.
Context7 Documentation Protocol
Manifest-injection defaults, precache-manifest generation, and offline-fallback wiring differ by framework PWA plugin and by version — never assert a gap is "the app's fault" without checking the plugin's current documented default first.
- Call
ToolSearchwith query"context7"(or"select:mcp__Context7__resolve-library-id,mcp__Context7__query-docs") to load the Context7 tools if not already loaded in this session. - Always ground manifest-field and installability-criteria claims against the W3C manifest spec directly (
official_docs), not a vendor summary of it — vendor blog posts routinely lag or simplify the spec'sdisplay/purpose/icon-size language. - If the project uses
vite-plugin-pwa, resolve/websites/vite-pwa-org_netlify_appand query its manifest-generation,generateSW/injectManifest, and precacheglobPatterns/maximumFileSizeToCacheInBytesbehavior before asserting an asset or route is missing from precache "because the app didn't configure it" — the plugin has documented defaults and size ceilings that silently exclude assets. - If the project uses
next-pwa(@ducanh2912/next-pwa), resolve/ducanhgh/next-pwaand query itsfallbacksconfig (document/data/image/audio/video/font) and default-offline-page conventions (pages/_offline.tsx/app/~offline/page.tsx) before concluding a fallback route is absent — the plugin auto-wires a default path if the file exists at the conventional location. - If the underlying precaching/fallback mechanism is hand-rolled Workbox (not a framework plugin), resolve
/googlechrome/workboxand queryofflineFallback/setCatchHandler/precacheAndRoutesemantics — confirm whether the fallback handler checks the precache before anoffline-fallbackscache, since a bug in that check order is a common cause of the fallback silently failing. - Query for the exact behavior in question per review, not from memory of a prior session — plugin defaults and Workbox recipe internals change across major versions.
- If Context7 is unavailable or has no relevant match, fall back to
official_docs/ the bundled references, and mark the claimdocumentation-based (Context7 unavailable)rather than presenting it as freshly verified. - Never invent a manifest field, plugin config key, or Workbox API that no queried source confirms.
Lean operating rules
- Verify HTTPS on the actual target origin first — the W3C-implementing browsers refuse installability outright without it (localhost is the only common documented exception); if HTTPS is not confirmed, stop there, because every downstream installability check is moot until it is fixed.
- Treat
display: browseras a deliberate product choice to surface and confirm with the user, not a silent bug to "fix" — it is valid per spec, but it disqualifies the install-prompt flow by design, and teams frequently leave it at a framework default without realizing the consequence. - Do not declare an app "installable" from manifest JSON validity alone — confirm HTTPS, a service worker that reaches the
activatestate, and a qualifyingdisplayvalue together; each is independently necessary and none is sufficient alone. - Do not declare an app "offline-ready" from precache-manifest file lists or service-worker registration code alone — perform an actual DevTools offline-throttle navigation to a previously unvisited route and observe what renders; precaching and route-matching are separate concerns, and a precached fallback page with an unmatched route still fails offline.
- Confirm the offline-fallback page is itself guaranteed precached, including its own dependencies (fonts, inline API calls, images) — a fallback page that depends on an uncached asset fails to render exactly when it is needed.
- Treat the Lighthouse PWA category score as a secondary, corroborating signal only — it can pass on stale audit state and does not reproduce the live
beforeinstallpromptbrowser signal; require the manual browser-session listener test as the primary proof of installability. - Flag any
start_url, icon, or fallback-asset reference pointing to an HTTP origin or an unpinned third-party CDN — a mixed-content or unverifiable icon source undermines both installability and the fallback page's guarantee of availability. - Never recommend caching user-specific or authenticated content inside the offline-fallback route — it must render identically and safely for any unauthenticated network-offline visitor; if the app's fallback design leaks account state, that is a blocker, not a caching-strategy nuance for the sibling skill to solve.
- Label every claim as
live evidence,spec-cited,documentation-based, orinferenceso the reviewer knows what was actually tested versus reasoned about from file contents.
References
Load these only when needed:
- W3C manifest installability checklist — use when validating manifest field-by-field against W3C installability criteria (
name/short_name, icons,start_url/scope,display) and when diagnosing a missing install prompt. - Offline fallback precache patterns — use when reviewing how the offline-fallback route is registered and precached, across hand-rolled Workbox,
vite-plugin-pwa, andnext-pwaconventions. - Live installability and offline verification protocol — use for the step-by-step manual test procedure (HTTPS check, service-worker activation,
beforeinstallpromptlistener, DevTools offline-throttle navigation) and for interpreting Lighthouse-vs-live divergence.
Response minimum
Return, at minimum:
- pass/fail verdict per W3C installability field (HTTPS,
name/short_name, icons,start_url/scope,display), each labeled with its evidence level, - service-worker registration and activation status (not just "registered" — confirm
activatewas reached), - the actual (not inferred) offline-navigation test result for at least one previously unvisited route, and the offline-fallback page's precache/dependency-precache status,
- explicit note on whether
displaydisqualifies install prompts by design and whether that was confirmed as intentional with the user, - a handoff note to
service-worker-cache-strategy-reviewif the gap identified is a caching-strategy implementation detail rather than an installability/offline-navigation gap.
What ships with it: 4 files
19.2 KB alongside SKILL.md
references/
- metadata.json1.4 KB