К основному содержанию
скилл CX Codex

pwa-development · mindrally — скилл для Claude Code: что делает и как установить

Набор правил по разработке PWA: создание веб-манифеста, сервисных воркеров, стратегий кэширования и работы без сети.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Mindrally/skills --skill pwa-development -a claude-code
Открыть на GitHub

Что делает pwa-development

Скилл добавляет в контекст ассистента практические инструкции по созданию Progressive Web Apps. Внутри собраны готовые шаблоны для файла sw.js: перехват событий install, activate и маршрутизация сетевых запросов через fetch с отдачей запасной страницы offline.html.

Модель учится настраивать стратегии кэширования под конкретные типы данных. Для статики применяется Cache First, а для API — Network First. Также в правилах описан подход Stale While Revalidate, заготовки фоновой синхронизации sync и отслеживание статуса сети через события online и offline.

Для работы веб-пушей в коде потребуется указать действующий PUBLIC_VAPID_KEY. Проверку манифеста и поведения кэша автор рекомендует выполнять через аудит Lighthouse.

Какие задачи решает

  • составить веб-манифест приложения с иконками и режимом standalone
  • написать сервисный воркер с очисткой устаревших версий кэша
  • настроить стратегии Cache First и Network First для разных URL
  • добавить фоновую синхронизацию данных через background sync

Примеры запросов агенту

  • Напиши сервисный воркер sw.js с кэшированием статических файлов при установке
  • Сделай стратегию Network First для запросов к API с сохранением ответов в кэш
  • Добавь функцию подписки на push-уведомления с ключом VAPID

Как установить pwa-development

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill pwa-development -a claude-code

2Вручную: положить файлы

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

Папка скилла целиком; для одного проекта — .claude/skills/pwa-development/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о pwa-development

Как установить pwa-development в Claude Code?

Выполните команду npx skills add Mindrally/skills --skill pwa-development -a claude-code. Инструкция сохранится по пути ~/.claude/skills/pwa-development/SKILL.md.

Что делает скилл pwa-development?

Он даёт ИИ-ассистенту готовые шаблоны для PWA: регистрацию воркеров, манифест, офлайн-режим и типовые сценарии кэширования.

Какие стратегии кэширования содержит скилл?

В инструкции описаны Cache First для статических ресурсов, Network First для динамических данных и Stale While Revalidate.

Исходный текст

SKILL.md · Apache-2.0
---
name: pwa-development
description: Progressive Web App development guidelines covering service workers, caching strategies, offline functionality, and installability
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# Progressive Web App Development Guidelines

You are an expert in building Progressive Web Applications with offline-first capabilities.

## Core Principles

- Design for offline-first experience
- Implement proper caching strategies
- Ensure fast loading and smooth performance
- Follow web app manifest best practices
- Provide native-like experience

## Web App Manifest

```json
{
  "name": "My Progressive Web App",
  "short_name": "MyPWA",
  "description": "A description of your app",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#000000",
  "icons": [
    {
      "src": "/icons/icon-192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}
```

## Service Worker Registration

```javascript
// Register service worker
if ('serviceWorker' in navigator) {
  window.addEventListener('load', async () => {
    try {
      const registration = await navigator.serviceWorker.register('/sw.js');
      console.log('SW registered:', registration.scope);
    } catch (error) {
      console.error('SW registration failed:', error);
    }
  });
}
```

## Service Worker Implementation

```javascript
// sw.js
const CACHE_NAME = 'v1';
const STATIC_ASSETS = [
  '/',
  '/index.html',
  '/styles.css',
  '/app.js',
  '/offline.html'
];

// Install event - cache static assets
self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open(CACHE_NAME).then((cache) => {
      return cache.addAll(STATIC_ASSETS);
    })
  );
  self.skipWaiting();
});

// Activate event - cleanup old caches
self.addEventListener('activate', (event) => {
  event.waitUntil(
    caches.keys().then((cacheNames) => {
      return Promise.all(
        cacheNames
          .filter((name) => name !== CACHE_NAME)
          .map((name) => caches.delete(name))
      );
    })
  );
  self.clients.claim();
});

// Fetch event - serve from cache or network
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then((response) => {
      return response || fetch(event.request);
    }).catch(() => {
      return caches.match('/offline.html');
    })
  );
});
```

## Caching Strategies

### Cache First (Static Assets)
```javascript
async function cacheFirst(request) {
  const cached = await caches.match(request);
  return cached || fetch(request);
}
```

### Network First (Dynamic Content)
```javascript
async function networkFirst(request) {
  try {
    const response = await fetch(request);
    const cache = await caches.open(CACHE_NAME);
    cache.put(request, response.clone());
    return response;
  } catch {
    return caches.match(request);
  }
}
```

### Stale While Revalidate
```javascript
async function staleWhileRevalidate(request) {
  const cache = await caches.open(CACHE_NAME);
  const cached = await cache.match(request);

  const fetchPromise = fetch(request).then((response) => {
    cache.put(request, response.clone());
    return response;
  });

  return cached || fetchPromise;
}
```

## Background Sync

```javascript
// Register sync in main app
async function registerSync() {
  const registration = await navigator.serviceWorker.ready;
  await registration.sync.register('sync-data');
}

// Handle sync in service worker
self.addEventListener('sync', (event) => {
  if (event.tag === 'sync-data') {
    event.waitUntil(syncData());
  }
});

async function syncData() {
  const data = await getQueuedData();
  await fetch('/api/sync', {
    method: 'POST',
    body: JSON.stringify(data)
  });
}
```

## Push Notifications

```javascript
// Request permission
async function requestNotificationPermission() {
  const permission = await Notification.requestPermission();
  if (permission === 'granted') {
    const registration = await navigator.serviceWorker.ready;
    const subscription = await registration.pushManager.subscribe({
      userVisibleOnly: true,
      applicationServerKey: PUBLIC_VAPID_KEY
    });
    // Send subscription to server
  }
}

// Handle push in service worker
self.addEventListener('push', (event) => {
  const data = event.data.json();
  event.waitUntil(
    self.registration.showNotification(data.title, {
      body: data.body,
      icon: '/icons/icon-192.png'
    })
  );
});
```

## Offline Detection

```javascript
// Check online status
window.addEventListener('online', () => {
  console.log('Back online');
  syncPendingData();
});

window.addEventListener('offline', () => {
  console.log('Offline mode');
  showOfflineIndicator();
});
```

## Performance Optimization

- Implement app shell architecture
- Use lazy loading for routes and components
- Optimize images with responsive formats
- Minimize JavaScript bundle size
- Use code splitting

## Testing

- Test offline functionality
- Verify caching behavior
- Test on various network conditions
- Validate manifest and icons
- Use Lighthouse for PWA audits

## Best Practices

- Serve over HTTPS
- Provide meaningful offline experience
- Handle service worker updates gracefully
- Implement proper error handling
- Add loading states and skeletons

© Mindrally · Apache-2.0 · Mindrally/skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →

Сначала — pwa-development от других авторов.

pwa-development alinaqi Скилл для сборки Progressive Web App: манифест, service worker, стратегии кэширования и офлайн-режим. Пригодится, когда приложение должно ставиться на телефон и открываться без сети. CX Codex +1 4 100установок pwa-development jwynia Скилл для React и Svelte: помогает добавить service worker, офлайн-режим и установку приложения. Пригодится, когда PWA нужен, а не прикручен в конце. CX Codex +1 437установок frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. 1 025 790установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. 986 201установок hyperframes heygen-com Скилл задаёт агенту правила рендера HTML-кода в видео через HyperFrames. Помогает собирать проморолики, эксплейнеры и титры прямо в коде проекта. CX Codex +1 1 200 000установок hyperframes-cli heygen-com Управляет проектами HyperFrames через терминал: собирает таймлайн, проверяет контраст кадров, запускает предпросмотр и рендерит видео локально или в облаке. CX Codex +1 1 300 000установок webapp-testing официальный anthropics Скилл запускает проверки локальных веб-приложений через Playwright: помогает отлаживать UI, делать скриншоты и смотреть логи браузера. 186 758установок

Из того же набора214

cpp Набор инструкций по современному C++17 и C++20. Помогает ассистенту писать безопасный код без сырых указателей, утечек памяти и архаичных C-конструкций. CX Codex +1 775установок aspnet-core Задаёт агенту правила разработки на ASP.NET Core: контроллеры, middleware, кэш, JWT и валидация. Пригодится, когда API пишется с нуля или переписывается. CX Codex +1 776установок observability-guidelines Скилл учит агента внедрять OpenTelemetry, трассировку и структурированные логи в распределённые сервисы. Пригодится при настройке мониторинга и метрик. CX Codex +1 773установок gsap Задаёт агенту правила анимаций на GSAP: трансформы вместо left/top, stagger, таймлайны, ScrollTrigger. Пригодится, когда интерфейс дёргается на слабом железе. CX Codex +1 769установок styled-components-best-practices Задаёт правила архитектуры CSS-in-JS в React: изоляцию стилей, структуру файлов, типизацию темы в TypeScript и работу с ThemeProvider. Пригодится при вёрстке дизайн-систем. CX Codex +1 762установок c-sharp Задаёт агенту стиль кода на C#: именование, async, DI, тесты, Blazor и Unity. Пригодится, когда проект на .NET и не хочется каждый раз объяснять конвенции. CX Codex +1 760установок data-analyst Скилл задаёт агенту правила работы с pandas, numpy, matplotlib и seaborn: воспроизводимые пайплайны, проверка качества данных, аккуратные графики. CX Codex +1 759установок deno-typescript Скилл с правилами разработки на Deno и TypeScript: архитектура проекта, встроенные инструменты, модель разрешений и работа с Deno KV или Hono. CX Codex +1 757установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой