Skip to main content
skill CX Codex

pwa-development · jwynia — Claude Code skill: PWA, service worker, offline

A skill for React and Svelte projects that walks the agent through service workers, offline support and installable apps. Useful when offline behaviour is planned, not patched in later.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add jwynia/agent-skills --skill pwa-development -a claude-code
Open on GitHub

What pwa-development does

The skill sorts a project into one of six states, from no PWA setup at all to production ready. At each step it points the agent at the next move: generate manifest.json, add <link rel="manifest"> to the HTML head, scaffold a minimal service worker. Later states cover caching, update flow, offline data and iOS quirks.

Four scripts ship with it: manifest-generator.ts, sw-scaffolder.ts, cache-strategy-advisor.ts and pwa-audit.ts. Reference data covers caching strategies, framework patterns and iOS behaviour. The strategy table is blunt about intent: cache first for static assets, network first for API data, stale while revalidate for semi-static content, network only for auth.

It is not meant for backend work, and not for projects where the offline architecture still needs designing. The author's warning is worth repeating: PWAs break when offline behaviour is an afterthought. So decide first which data has to survive without a network.

What it helps with

  • generate a manifest.json so the app can be installed
  • write a service worker with an offline fallback page
  • trace why the cache serves stale content
  • fix users getting stuck on an old version
  • handle iOS-specific PWA quirks

Example prompts for the agent

  • Turn this React app into a PWA with offline support
  • Add a service worker and set up caching for static assets
  • Users are stuck on an old version — fix the update flow

How to install pwa-development

1Skills CLI (Vercel)

npx skills add jwynia/agent-skills --skill pwa-development -a claude-code

2Manually: put the files in place

~/.claude/skills/pwa-development/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/pwa-development/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about pwa-development

How do I install pwa-development in Claude?

Run npx skills add jwynia/agent-skills --skill pwa-development -a claude-code. The skill lands in ~/.claude/skills/pwa-development/SKILL.md.

What does pwa-development do?

It guides the agent through adding a service worker, manifest, caching strategies and offline support to a React or Svelte app.

Which frameworks does the skill support?

React, Svelte and SvelteKit, Vite and Next.js. Each has its own package: vite-plugin-pwa, @vite-pwa/sveltekit, next-pwa.

Source text

SKILL.md · MIT
---
name: pwa-development
description: "Implement Progressive Web App features for React and Svelte projects. This skill should be used when the user asks to 'make a PWA', 'add offline support', 'create a service worker', 'fix caching issues', or wants installable web apps. Keywords: PWA, service worker, offline, manifest, caching, installable, Workbox, vite-pwa."
license: MIT
compatibility: Works with React, Svelte/SvelteKit, Vite, Next.js.
metadata:
  author: jwynia
  version: "1.0"
  type: utility
  mode: assistive
  domain: development
---

# PWA Development

Implement Progressive Web App features including service workers, caching strategies, offline support, and installation prompts for React and Svelte applications.

## When to Use This Skill

Use this skill when:
- Adding PWA capabilities to a web app
- Implementing offline support
- Creating service worker caching strategies
- Debugging PWA installation issues
- Handling iOS-specific PWA quirks

Do NOT use this skill when:
- Building backend APIs
- Working on requirements/design (use those skills first)
- Need complex offline-first architecture (design first)

## Core Principle

**PWAs fail when offline behavior is an afterthought.** A PWA is not "add service worker to existing app." It's a fundamental architectural decision about data flow, caching, and connectivity failure.

## Diagnostic States

### P0: No PWA Setup

**Symptoms:** No manifest.json, no service worker, online-only

**Interventions:**
- Run `scripts/manifest-generator.ts` to create manifest
- Add `<link rel="manifest">` to HTML head
- Generate minimal SW with `scripts/sw-scaffolder.ts`

### P1: Basic Manifest Only

**Symptoms:** Manifest exists but SW missing, breaks offline

**Key Questions:**
- What content MUST be available offline?
- What should always be fresh (network-first)?

**Interventions:**
- Use `scripts/cache-strategy-advisor.ts`
- Implement app shell pattern
- Add offline fallback page

### P2: Caching Issues

**Symptoms:** Stale content, unexpected caching behavior

**Interventions:**
- Audit with `scripts/pwa-audit.ts`
- Map resources to strategies using `data/caching-strategies.json`
- Add cache expiration and cleanup

### P3: Update Problems

**Symptoms:** Users stuck on old versions, multiple refreshes needed

**Interventions:**
- Implement skipWaiting/clients.claim appropriately
- Add update notification UI (`assets/update-prompt.tsx`)
- Handle "waiting" state properly

### P4: Offline Data Gaps

**Symptoms:** User actions lost offline, no sync indicator

**Interventions:**
- Implement IndexedDB for offline storage
- Add Background Sync API
- Create sync status UI

### P5: iOS Issues

**Symptoms:** Works on Android, breaks on iOS

**Interventions:**
- Review `data/ios-quirks.json`
- Add apple-mobile-web-app meta tags
- Handle storage eviction gracefully

### P6: Production Ready

**Indicators:** Lighthouse PWA 100, works offline, updates cleanly

## Caching Strategies

| Strategy | Use For | Behavior |
|----------|---------|----------|
| Cache First | Static assets, fonts | Serve from cache, update in background |
| Network First | API data, user content | Try network, fall back to cache |
| Stale While Revalidate | Semi-static content | Serve stale, update cache for next time |
| Network Only | Auth, real-time data | Always network, no caching |

## Available Scripts

| Script | Purpose |
|--------|---------|
| `manifest-generator.ts` | Generate manifest.json |
| `sw-scaffolder.ts` | Generate service worker |
| `cache-strategy-advisor.ts` | Recommend caching strategies |
| `pwa-audit.ts` | Validate PWA configuration |

## Anti-Patterns

### The Everything Cache
Precaching every asset - massive initial download.
**Fix:** Precache only critical app shell. Runtime cache content.

### The Immortal Cache
Never expiring caches - stale content forever.
**Fix:** Cache versioning, delete old on activate, set max age.

### The Silent Update
Forcing updates without notification.
**Fix:** Notify user, let them choose when to refresh.

### The iOS Afterthought
Building for Chrome, testing iOS last.
**Fix:** Test iOS early. Accept iOS limitations.

## Framework Quick Reference

### React + Vite
```bash
npm i -D vite-plugin-pwa
```

### SvelteKit
```bash
npm i -D @vite-pwa/sveltekit
```

### Next.js
```bash
npm i next-pwa
```

See `data/framework-patterns.json` for configuration.

## Debugging Checklist

1. **DevTools > Application > Manifest** - Valid?
2. **DevTools > Application > Service Workers** - Registered?
3. **DevTools > Application > Cache Storage** - What's cached?
4. **DevTools > Network > Offline** - Works offline?
5. **Lighthouse > PWA** - Score and failures?
6. **iOS Safari** - Test on actual device

## Related Skills

- **requirements-analysis** - Determine offline requirements
- **system-design** - PWA architecture decisions
- **react-pwa** - React-specific PWA implementation

© jwynia · MIT · jwynia/agent-skills

Similar skills

Everything for Frontend and UI →

pwa-development by other authors comes first.

From the same set77

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor