pwa-development · mindrally — скилл для Claude Code: что делает и как установить
Набор правил по разработке PWA: создание веб-манифеста, сервисных воркеров, стратегий кэширования и работы без сети.
npx skills add Mindrally/skills --skill pwa-development -a claude-codeЧто делает 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-code2Вручную: положить файлы
~/.claude/skills/pwa-development/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/pwa-development/
1Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill pwa-development -a codex2Вручную: положить файлы
.agents/skills/pwa-development/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill pwa-development -a cursor2Вручную: положить файлы
.cursor/skills/pwa-development/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install Mindrally/skills pwa-development2Вручную: положить файлы
.github/skills/pwa-development/SKILL.md1Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill pwa-development -a gemini-cli2Командой платформы
gemini skills install https://github.com/Mindrally/skills --path pwa-developmentВручную: положить файлы
.devin/skills/pwa-development/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill pwa-development -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в 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 от других авторов.