Agent skill

React Pwa

by jwynia in jwynia/agent-skills

Build Progressive Web Apps with React and Vite. An agent skill from jwynia/agent-skills.

MITAuto-check passedMobile

Install React Pwa

skills CLI
$ npx skills add jwynia/agent-skills --skill react-pwa -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jwynia/agent-skills react-pwa --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jwynia/agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/tech/frontend/pwa/react-pwa .claude/skills/react-pwa && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
react-pwa
GitHub stars
166
Token cost
~4.4k tokens
SKILL.md length
739 words
Files
10 (incl. scripts, references, assets)
Skills in repo
112
Repo updated
First seen
Licence
MIT

At a glance

Build Progressive Web Apps with React and Vite. An agent skill from jwynia/agent-skills.

  • Works in 10 steps: Install Dependencies → Configure Vite → Generate Icons → …
  • Asks to create a PWA
  • SKILL.md covers When to Use This Skill, Prerequisites, Quick Start and Instructions, plus 4 more sections
  • Runs TypeScript scripts from its folder; calls npm and deno

What it does

React Pwa is an agent skill from jwynia/agent-skills. Build Progressive Web Apps with React and Vite. This skill should be used when the user asks to "create a PWA", "add offline support", "make app installable", "generate service worker", "configure workbox", "add push notifications", or mentions PWA, progressive web app, or offline-first development. Keywords: PWA, progressive web app, service worker, manifest, offline, installable, workbox, vite-plugin-pwa, React.

Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including scripts, reference files and assets (for example `assets/manifest-template.json`, `assets/sw-template.ts` and `references/caching-strategies.md`). Compatibility notes: Requires Deno for scripts. Works with React 18+ and Vite 5+.

It sits in Mobile. It works with React and Vite. The licence is MIT.

When your agent uses it

  • Asks to create a PWA
  • Add offline support
  • Make app installable
  • Generate service worker

Example prompts

  • “create a PWA”
  • “add offline support”
  • “make app installable”
  • “/react-pwa”

Requirements

  • Node.js
  • Compatibility (from SKILL.md): Requires Deno for scripts. Works with React 18+ and Vite 5+.

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Install Dependencies
  2. Configure Vite
  3. Generate Icons
  4. Add Update Prompt (Optional)
  5. Project Setup
  6. Manifest Configuration
  7. Service Worker Strategies
  8. Offline Support
  9. Install Prompt
  10. Push Notifications

What it can do on your machine

Read from SKILL.md and the folder at commit e02ec7e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 4 files in scripts/ (TypeScript), which the agent can run.

    Shell commands in SKILL.md call:

    • npm
    • deno

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires Deno for scripts. Works with React 18+ and Vite 5+.

    From compatibility in the SKILL.md frontmatter.

Context cost

React Pwa loads about 4.4k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 107 tokens; SKILL.md has 739 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~107
When it runs · the whole SKILL.md, loaded when a task matches
~4.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~11k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from jwynia/agent-skills at commit e02ec7e, republished under its MIT licence (© jwynia). 739 words, ~4,372 tokens.

Download SKILL.mdSave it as .claude/skills/react-pwa/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.
name
react-pwa
description
Build Progressive Web Apps with React and Vite. This skill should be used when the user asks to "create a PWA", "add offline support", "make app installable", "generate service worker", "configure workbox", "add push notifications", or mentions PWA, progressive web app, or offline-first development. Keywords: PWA, progressive web app, service worker, manifest, offline, installable, workbox, vite-plugin-pwa, React.
compatibility
Requires Deno for scripts. Works with React 18+ and Vite 5+.
license
MIT
metadata
author: agent-skills version: "1.0" type: utility mode: assistive domain: development

React PWA

Build Progressive Web Apps with React and Vite using vite-plugin-pwa. This skill covers the complete PWA lifecycle: manifest configuration, service worker strategies, offline support, installability, and push notifications.

When to Use This Skill

Use when:

  • Creating a new PWA from scratch with React + Vite
  • Converting an existing React app to a PWA
  • Adding offline capabilities to a web application
  • Implementing install prompts and app-like experiences
  • Setting up push notifications
  • Optimizing caching strategies for performance

Don't use when:

  • Building server-rendered apps without client-side caching needs
  • Working with Next.js (use next-pwa instead)
  • Simple static sites without offline requirements

Prerequisites

  • Node.js 18+ and npm/pnpm/yarn
  • Vite 5+ with React template
  • Deno runtime (for skill scripts)
  • Source icon: 512x512 PNG or SVG for icon generation

Quick Start

1. Install Dependencies
bash
npm install -D vite-plugin-pwa workbox-window
2. Configure Vite
typescript
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa'

export default defineConfig({
  plugins: [
    react(),
    VitePWA({
      registerType: 'autoUpdate',
      includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'mask-icon.svg'],
      manifest: {
        name: 'My React PWA',
        short_name: 'ReactPWA',
        description: 'A Progressive Web App built with React',
        theme_color: '#ffffff',
        background_color: '#ffffff',
        display: 'standalone',
        icons: [
          { src: 'pwa-192x192.png', sizes: '192x192', type: 'image/png' },
          { src: 'pwa-512x512.png', sizes: '512x512', type: 'image/png' },
          { src: 'pwa-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' }
        ]
      }
    })
  ]
})
3. Generate Icons
bash
deno run --allow-read --allow-write scripts/generate-icons.ts --input logo.png --output public/
4. Add Update Prompt (Optional)
tsx
// src/components/PWAUpdatePrompt.tsx
import { useRegisterSW } from 'virtual:pwa-register/react'

export function PWAUpdatePrompt() {
  const {
    needRefresh: [needRefresh, setNeedRefresh],
    updateServiceWorker
  } = useRegisterSW()

  if (!needRefresh) return null

  return (
    <div className="pwa-toast">
      <span>New content available!</span>
      <button onClick={() => updateServiceWorker(true)}>Reload</button>
      <button onClick={() => setNeedRefresh(false)}>Close</button>
    </div>
  )
}

Instructions

Phase 1: Project Setup
1a. Create New Vite React Project
bash
npm create vite@latest my-pwa -- --template react-ts
cd my-pwa
npm install
npm install -D vite-plugin-pwa workbox-window
1b. Add to Existing Project
bash
npm install -D vite-plugin-pwa workbox-window

Add TypeScript types for virtual modules:

typescript
// src/vite-env.d.ts (add to existing file)
/// <reference types="vite-plugin-pwa/client" />

Phase 2: Manifest Configuration

The web app manifest defines how the PWA appears when installed.

Required Fields
json
{
  "name": "Full Application Name",
  "short_name": "ShortName",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#3b82f6",
  "icons": []
}
Display Modes
ModeDescriptionUse Case
fullscreenNo browser UI, fills entire screenGames, immersive experiences
standaloneApp-like, with system UI onlyMost PWAs
minimal-uiMinimal browser controlsApps needing navigation
browserStandard browser tabFallback only
Generate Manifest
bash
deno run --allow-read --allow-write scripts/generate-manifest.ts \
  --name "My App" \
  --short-name "App" \
  --theme "#3b82f6" \
  --output public/manifest.webmanifest

Phase 3: Service Worker Strategies

vite-plugin-pwa uses Workbox under the hood. Choose a strategy based on your needs.

Strategy Options
StrategyBehaviorBest For
generateSWAuto-generates SW from configMost projects
injectManifestInjects precache into custom SWCustom caching logic
Caching Strategies

CacheFirst - Serve from cache, fall back to network:

typescript
runtimeCaching: [
  {
    urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
    handler: 'CacheFirst',
    options: {
      cacheName: 'google-fonts-cache',
      expiration: { maxEntries: 10, maxAgeSeconds: 60 * 60 * 24 * 365 }
    }
  }
]

NetworkFirst - Try network, fall back to cache:

typescript
{
  urlPattern: /^https:\/\/api\.example\.com\/.*/i,
  handler: 'NetworkFirst',
  options: {
    cacheName: 'api-cache',
    expiration: { maxEntries: 50, maxAgeSeconds: 60 * 60 * 24 }
  }
}

StaleWhileRevalidate - Serve cache immediately, update in background:

typescript
{
  urlPattern: /\.(?:png|jpg|jpeg|svg|gif)$/,
  handler: 'StaleWhileRevalidate',
  options: {
    cacheName: 'images-cache',
    expiration: { maxEntries: 100, maxAgeSeconds: 60 * 60 * 24 * 30 }
  }
}
Complete Vite Config with Caching
typescript
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa'

export default defineConfig({
  plugins: [
    react(),
    VitePWA({
      registerType: 'autoUpdate',
      workbox: {
        globPatterns: ['**/*.{js,css,html,ico,png,svg,woff2}'],
        runtimeCaching: [
          {
            urlPattern: /^https:\/\/api\..*/i,
            handler: 'NetworkFirst',
            options: {
              cacheName: 'api-cache',
              expiration: { maxEntries: 100, maxAgeSeconds: 60 * 60 * 24 }
            }
          },
          {
            urlPattern: /\.(?:png|jpg|jpeg|svg|gif|webp)$/,
            handler: 'CacheFirst',
            options: {
              cacheName: 'images',
              expiration: { maxEntries: 100, maxAgeSeconds: 60 * 60 * 24 * 30 }
            }
          }
        ]
      },
      manifest: {
        name: 'My React PWA',
        short_name: 'ReactPWA',
        theme_color: '#3b82f6',
        background_color: '#ffffff',
        display: 'standalone',
        icons: [
          { src: 'pwa-192x192.png', sizes: '192x192', type: 'image/png' },
          { src: 'pwa-512x512.png', sizes: '512x512', type: 'image/png' },
          { src: 'pwa-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' }
        ]
      }
    })
  ]
})

Phase 4: Offline Support
4a. Offline Fallback Page

Create an offline page that displays when network and cache both fail:

typescript
// vite.config.ts - add to VitePWA options
workbox: {
  navigateFallback: '/offline.html',
  navigateFallbackDenylist: [/^\/api/]
}

Create public/offline.html:

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Offline</title>
  <style>
    body { font-family: system-ui; display: flex; align-items: center;
           justify-content: center; min-height: 100vh; margin: 0; }
    .offline { text-align: center; }
  </style>
</head>
<body>
  <div class="offline">
    <h1>You're offline</h1>
    <p>Please check your internet connection and try again.</p>
    <button onclick="window.location.reload()">Retry</button>
  </div>
</body>
</html>
4b. Offline Detection Hook
tsx
// src/hooks/useOnlineStatus.ts
import { useSyncExternalStore } from 'react'

function subscribe(callback: () => void) {
  window.addEventListener('online', callback)
  window.addEventListener('offline', callback)
  return () => {
    window.removeEventListener('online', callback)
    window.removeEventListener('offline', callback)
  }
}

export function useOnlineStatus() {
  return useSyncExternalStore(
    subscribe,
    () => navigator.onLine,
    () => true // SSR fallback
  )
}

Usage:

tsx
function App() {
  const isOnline = useOnlineStatus()

  return (
    <div>
      {!isOnline && <Banner>You are offline. Some features may be limited.</Banner>}
      {/* ... */}
    </div>
  )
}

Phase 5: Install Prompt
5a. Install Button Component
tsx
// src/components/InstallButton.tsx
import { useState, useEffect } from 'react'

interface BeforeInstallPromptEvent extends Event {
  prompt: () => Promise<void>
  userChoice: Promise<{ outcome: 'accepted' | 'dismissed' }>
}

export function InstallButton() {
  const [deferredPrompt, setDeferredPrompt] = useState<BeforeInstallPromptEvent | null>(null)
  const [isInstalled, setIsInstalled] = useState(false)

  useEffect(() => {
    // Check if already installed
    if (window.matchMedia('(display-mode: standalone)').matches) {
      setIsInstalled(true)
      return
    }

    const handler = (e: Event) => {
      e.preventDefault()
      setDeferredPrompt(e as BeforeInstallPromptEvent)
    }

    window.addEventListener('beforeinstallprompt', handler)
    window.addEventListener('appinstalled', () => setIsInstalled(true))

    return () => window.removeEventListener('beforeinstallprompt', handler)
  }, [])

  const handleInstall = async () => {
    if (!deferredPrompt) return

    deferredPrompt.prompt()
    const { outcome } = await deferredPrompt.userChoice

    if (outcome === 'accepted') {
      setDeferredPrompt(null)
    }
  }

  if (isInstalled || !deferredPrompt) return null

  return (
    <button onClick={handleInstall} className="install-btn">
      Install App
    </button>
  )
}

Phase 6: Push Notifications
6a. Request Permission
typescript
async function requestNotificationPermission(): Promise<boolean> {
  if (!('Notification' in window)) {
    console.warn('Notifications not supported')
    return false
  }

  if (Notification.permission === 'granted') return true
  if (Notification.permission === 'denied') return false

  const permission = await Notification.requestPermission()
  return permission === 'granted'
}
6b. Subscribe to Push
typescript
async function subscribeToPush(vapidPublicKey: string): Promise<PushSubscription | null> {
  const registration = await navigator.serviceWorker.ready

  const subscription = await registration.pushManager.subscribe({
    userVisibleOnly: true,
    applicationServerKey: urlBase64ToUint8Array(vapidPublicKey)
  })

  // Send subscription to your backend
  await fetch('/api/push/subscribe', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(subscription)
  })

  return subscription
}

function urlBase64ToUint8Array(base64String: string): Uint8Array {
  const padding = '='.repeat((4 - base64String.length % 4) % 4)
  const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/')
  const rawData = window.atob(base64)
  return Uint8Array.from([...rawData].map(char => char.charCodeAt(0)))
}
6c. Handle Push in Service Worker (injectManifest mode)
typescript
// src/sw.ts
import { precacheAndRoute } from 'workbox-precaching'

declare const self: ServiceWorkerGlobalScope

precacheAndRoute(self.__WB_MANIFEST)

self.addEventListener('push', (event) => {
  const data = event.data?.json() ?? { title: 'Notification', body: 'New update available' }

  event.waitUntil(
    self.registration.showNotification(data.title, {
      body: data.body,
      icon: '/pwa-192x192.png',
      badge: '/badge-72x72.png'
    })
  )
})

self.addEventListener('notificationclick', (event) => {
  event.notification.close()
  event.waitUntil(
    self.clients.openWindow('/')
  )
})

Examples

Example 1: Basic PWA Setup

Scenario: Convert a Vite React app to an installable PWA with offline support.

Steps:

  1. Install dependencies: npm install -D vite-plugin-pwa
  2. Add VitePWA plugin to vite.config.ts
  3. Generate icons from source image
  4. Build and test: npm run build && npm run preview
  5. Verify in Chrome DevTools > Application > Manifest

Verification:

  • Lighthouse PWA audit passes
  • App is installable (install icon in address bar)
  • Works offline after first load
Example 2: API-Heavy App with Smart Caching

Scenario: E-commerce app with product API calls that should work offline after browsing.

typescript
VitePWA({
  workbox: {
    runtimeCaching: [
      // Cache product images aggressively
      {
        urlPattern: /\/products\/images\/.*/,
        handler: 'CacheFirst',
        options: {
          cacheName: 'product-images',
          expiration: { maxEntries: 200, maxAgeSeconds: 60 * 60 * 24 * 7 }
        }
      },
      // Cache API responses with network-first
      {
        urlPattern: /\/api\/products\/.*/,
        handler: 'NetworkFirst',
        options: {
          cacheName: 'product-api',
          expiration: { maxEntries: 100, maxAgeSeconds: 60 * 60 },
          networkTimeoutSeconds: 3
        }
      }
    ]
  }
})
Example 3: Periodic Background Sync

Scenario: News app that syncs content in background.

typescript
// Register periodic sync
const registration = await navigator.serviceWorker.ready
await registration.periodicSync.register('sync-articles', {
  minInterval: 60 * 60 * 1000 // 1 hour
})

// Handle in service worker
self.addEventListener('periodicsync', (event) => {
  if (event.tag === 'sync-articles') {
    event.waitUntil(syncArticles())
  }
})

Show full SKILL.md (293 more words)Show less

Script Reference

ScriptPurposePermissions
generate-manifest.tsCreate manifest.webmanifest--allow-read --allow-write
generate-icons.tsGenerate icon set from source--allow-read --allow-write --allow-run
generate-sw-config.tsCreate service worker config--allow-read --allow-write
audit-pwa.tsValidate PWA compliance--allow-read --allow-net
Generate Manifest
bash
deno run --allow-read --allow-write scripts/generate-manifest.ts \
  --name "My Application" \
  --short-name "MyApp" \
  --description "A great PWA" \
  --theme "#3b82f6" \
  --background "#ffffff" \
  --display standalone \
  --output public/manifest.webmanifest
Generate Icons
bash
deno run --allow-read --allow-write --allow-run scripts/generate-icons.ts \
  --input logo.svg \
  --output public/ \
  --sizes 192,512 \
  --maskable
Audit PWA
bash
deno run --allow-read --allow-net scripts/audit-pwa.ts \
  --url http://localhost:5173 \
  --format summary

Common Issues

Issue: Service Worker Not Updating

Symptoms: Old content served after deployment.

Solution:

  1. Ensure registerType: 'autoUpdate' is set
  2. Add update prompt component to notify users
  3. For immediate updates in development: Chrome DevTools > Application > Service Workers > Update on reload
Issue: App Not Installable

Symptoms: No install prompt, Lighthouse fails installability.

Solution:

  1. Verify manifest has all required fields (name, short_name, icons, start_url, display)
  2. Ensure icons are at least 192x192 and 512x512
  3. Serve over HTTPS (or localhost for development)
  4. Check for service worker registration errors in console
Issue: Caching API Responses Causes Stale Data

Symptoms: Users see outdated data.

Solution:

  1. Use NetworkFirst strategy for dynamic API endpoints
  2. Add networkTimeoutSeconds for faster fallback
  3. Implement cache versioning with expiration
Issue: Push Notifications Not Working

Symptoms: Subscription succeeds but notifications don't arrive.

Solution:

  1. Verify VAPID keys match between frontend and backend
  2. Check service worker is active (not waiting)
  3. Ensure userVisibleOnly: true in subscription
  4. Test push delivery with web-push CLI tool

Additional Resources

Reference Files
  • references/caching-strategies.md - Deep dive into Workbox caching patterns
  • references/push-notifications.md - Complete push notification backend setup
  • references/testing-pwas.md - Testing strategies for PWA features
Assets
  • assets/manifest-template.json - Complete manifest with all optional fields
  • assets/sw-template.ts - Custom service worker template for injectManifest

Limitations

  • Push notifications require a backend server with web-push
  • Background sync has limited browser support (Chrome/Edge)
  • iOS Safari has PWA limitations (no push notifications, limited storage)
  • Service worker debugging can be complex
  • frontend-design - Design systems and component styling
  • web-search - Research PWA best practices and browser support

© jwynia, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 9 other files (scripts, references, assets) in skills/tech/frontend/pwa/react-pwa of jwynia/agent-skills.

  • SKILL.md
  • assets/manifest-template.json
  • assets/sw-template.ts
  • references/caching-strategies.md
  • references/push-notifications.md
  • references/testing-pwas.md
  • scripts/audit-pwa.ts
  • scripts/generate-icons.ts
  • scripts/generate-manifest.ts
  • scripts/generate-sw-config.ts

Open the folder on GitHubat commit e02ec7e

Compare with similar skills

React Pwa next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

React Pwa compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
React Pwa this skilljwynia/agent-skills166—~4.4kAutomated safety check: PassMIT
Cloudbase Sites RuntimeTencentCloudBase/CloudBase-AI-Toolkit1.1k—~5kAutomated safety check: NotesMIT
Expo Web To Nativeexpo/skills2.7k—~2.6kAutomated safety check: PassMIT
Reactericrisco/rsc-harness167—~3.2kAutomated safety check: PassMIT
LangBot Core Developmentlangbot-app/LangBot18k—~1.4kAutomated safety check: NotesApache-2.0
Pinmeglitternetwork/pinme3.7k—~3.8kAutomated safety check: NotesMIT

Similar skills

  • Cloudbase Sites Runtime

    TencentCloudBase/CloudBase-AI-Toolkit

    A skill your agent uses when the user wants to develop, run, preview, save, deploy, or roll back a CloudBase Web app in this conversation as a Lovable/Codex-Sites-like vibe- coding session — i.e.

    1.1k GitHub stars~5k tokensUpdated yesterday
    MobileAuto-check: notes
  • Official

    Migrate an existing web React app to a native iOS/Android app with Expo.

    2.7k GitHub stars~2.6k tokensUpdated yesterday
    MobileAuto-check passed
  • React

    ericrisco/rsc-harness

    A skill your agent uses when building or reviewing a client-side React SPA bundled by Vite (React 19.2): components, where state lives, hooks, server data fetching, client routing, re-render and…

    167 GitHub stars~3.2k tokensUpdated today
    MobileAuto-check passed
  • LangBot Core Development

    langbot-app/LangBot

    Covers developing the LangBot core backend and web UI: dev setup, repo layout, API auth types, adding endpoints, migrations and keeping the MCP server in step.

    18k GitHub stars~1.4k tokensUpdated yesterday
    DevelopmentAuto-check: notes
  • Pinme

    glitternetwork/pinme

    A skill your agent uses when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or full-stack services (including frontend pages, backend APIs…

    3.7k GitHub stars~3.8k tokensUpdated 26 days ago
    Frontend & DesignAuto-check: notes
  • South Admin CRUD Generator

    southliu/south-admin-react

    Generates a full CRUD page - page component, data model and API client - from the south-admin-react project's own VS Code snippet templates.

    580 GitHub stars~1.7k tokensUpdated 18 days ago
    Frontend & DesignAuto-check passed

More from jwynia/agent-skills

All 112 skills in this repo
  • Devcontainer

    jwynia/agent-skills

    Diagnose devcontainer configuration problems and guide development environment setup.

    166 GitHub stars~1.2k tokensUpdated 7 mo ago
    Auto-check: notes
  • Frontend Design

    jwynia/agent-skills

    Create distinctive, production-grade frontend interfaces with high design quality.

    166 GitHub stars~3.2k tokensUpdated 7 mo ago
    Auto-check passed
  • Gitea Workflow

    jwynia/agent-skills

    Orchestrate agile development workflows for Gitea repositories using the tea CLI.

    166 GitHub stars~3.8k tokensUpdated 7 mo ago
    Auto-check passed
  • Godot Asset Generator

    jwynia/agent-skills

    Generate game assets using AI image generation APIs (DALL-E, Replicate, fal.ai) and prepare them for Godot.

    166 GitHub stars~3.8k tokensUpdated 7 mo ago
    Auto-check passed
  • Mastra Hono

    jwynia/agent-skills

    Develop AI agents, tools, and workflows with Mastra v1 Beta and Hono servers.

    166 GitHub stars~2.9k tokensUpdated 7 mo ago
    Auto-check passed
  • PPTX Generator

    jwynia/agent-skills

    Create and manipulate PowerPoint PPTX files programmatically.

    166 GitHub stars~3.1k tokensUpdated 7 mo ago
    Auto-check passed

Works with

Questions about React Pwa

What does React Pwa do?

Build Progressive Web Apps with React and Vite. An agent skill from jwynia/agent-skills. React Pwa is an agent skill from jwynia/agent-skills. Build Progressive Web Apps with React and Vite.

When should I use React Pwa?

React Pwa fits situations like: asks to create a PWA; add offline support; make app installable; generate service worker.

How do I install React Pwa in Claude Code?

Run `npx skills add jwynia/agent-skills --skill react-pwa -a claude-code`. Or copy the skill folder (skills/tech/frontend/pwa/react-pwa in jwynia/agent-skills) into .claude/skills/react-pwa in your project. Claude Code loads it when a task matches its description.

How do I install React Pwa in Codex?

Run `npx skills add jwynia/agent-skills --skill react-pwa -a codex`. Or copy the skill folder (skills/tech/frontend/pwa/react-pwa in jwynia/agent-skills) into .agents/skills/react-pwa in your project. Codex loads it when a task matches its description.

Can I use React Pwa in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jwynia/agent-skills --skill react-pwa -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/react-pwa, .gemini/skills/react-pwa, .github/skills/react-pwa and .opencode/skills/react-pwa in your project.

What does React Pwa need to run?

Going by SKILL.md and its folder, React Pwa needs TypeScript for the scripts in its folder and the command-line tools its instructions call (npm and deno). Our summary lists: Node.js. Compatibility (from SKILL.md): Requires Deno for scripts. Works with React 18+ and Vite 5+..

Does React Pwa access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is React Pwa safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does React Pwa use?

React Pwa is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does React Pwa use?

About 4.4k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.3k tokens, read only when the agent opens those files.

What are the alternatives to React Pwa?

Skills that share tags, products or a category with React Pwa: Cloudbase Sites Runtime (TencentCloudBase/CloudBase-AI-Toolkit, 1.1k stars), Expo Web To Native (expo/skills, 2.7k stars), React (ericrisco/rsc-harness, 167 stars) and LangBot Core Development (langbot-app/LangBot, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains React Pwa?

jwynia (a GitHub user) maintains it in jwynia/agent-skills, which has 166 GitHub stars. The repository holds 112 skills in this directory. The repository was last updated on February 24, 2026.

Source: jwynia/agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.