commit f5026d08a68532ad9e9869f327ec534dd63e0c03 Author: Zhongwei Li Date: Sat Nov 29 18:46:33 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..f2e3253 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "performance-budget-enforcer", + "description": "Monitors Lighthouse scores and JavaScript bundle sizes across deployments with automated alerts when performance thresholds are exceeded. This skill should be used when setting up performance monitoring, enforcing bundle size limits, tracking Lighthouse metrics, or adding performance regression detection. Use for performance budgets, bundle size, Lighthouse CI, performance monitoring, regression detection, or web vitals tracking.", + "version": "1.0.0", + "author": { + "name": "Hope Overture", + "email": "support@worldbuilding-app-skills.dev" + }, + "skills": [ + "./skills" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..dfef255 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# performance-budget-enforcer + +Monitors Lighthouse scores and JavaScript bundle sizes across deployments with automated alerts when performance thresholds are exceeded. This skill should be used when setting up performance monitoring, enforcing bundle size limits, tracking Lighthouse metrics, or adding performance regression detection. Use for performance budgets, bundle size, Lighthouse CI, performance monitoring, regression detection, or web vitals tracking. diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..1abbb36 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:hopeoverture/worldbuilding-app-skills:plugins/performance-budget-enforcer", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "b1b6ea1ef58b46f10eebe42b5b9b0751366934ab", + "treeHash": "0517a011ad462bcda7ae6d125b3c12eb3a142a3264381d2de0206dc647e3efa0", + "generatedAt": "2025-11-28T10:17:33.310150Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "performance-budget-enforcer", + "description": "Monitors Lighthouse scores and JavaScript bundle sizes across deployments with automated alerts when performance thresholds are exceeded. This skill should be used when setting up performance monitoring, enforcing bundle size limits, tracking Lighthouse metrics, or adding performance regression detection. Use for performance budgets, bundle size, Lighthouse CI, performance monitoring, regression detection, or web vitals tracking.", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "6d4889ca811816e43a8361bd1e2562cab9c083a0f8830d27ea7ce7b986e6680b" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "dd6c2dc0d8f9ce89c19c9afe116688791ee57866547942bc8f47be5e81663c3a" + }, + { + "path": "skills/performance-budget-enforcer/SKILL.md", + "sha256": "91249e560f7ebaf6d6187a562365f3cacdee8085aa4e4456b56aa4783219fd89" + } + ], + "dirSha256": "0517a011ad462bcda7ae6d125b3c12eb3a142a3264381d2de0206dc647e3efa0" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file diff --git a/skills/performance-budget-enforcer/SKILL.md b/skills/performance-budget-enforcer/SKILL.md new file mode 100644 index 0000000..9e1b1e3 --- /dev/null +++ b/skills/performance-budget-enforcer/SKILL.md @@ -0,0 +1,456 @@ +--- +name: performance-budget-enforcer +description: Monitors Lighthouse scores and JavaScript bundle sizes across deployments with automated alerts when performance thresholds are exceeded. This skill should be used when setting up performance monitoring, enforcing bundle size limits, tracking Lighthouse metrics, or adding performance regression detection. Use for performance budgets, bundle size, Lighthouse CI, performance monitoring, regression detection, or web vitals tracking. +--- + +# Performance Budget Enforcer + +Implement automated performance monitoring and budget enforcement to prevent performance regressions in worldbuilding applications. + +## Overview + +To enforce performance budgets: + +1. Define performance budgets for key metrics (bundle size, Lighthouse scores, Web Vitals) +2. Set up automated monitoring in CI/CD pipeline +3. Configure alerts for threshold violations +4. Generate performance reports and trends +5. Block deployments that exceed budgets + +## Performance Metrics + +### JavaScript Bundle Size + +To monitor bundle sizes: + +- **Initial Bundle**: First-load JS (target: <200KB) +- **Route Bundles**: Per-page JS (target: <50KB per route) +- **Total Bundle**: All JS combined (target: <500KB) +- **Vendor Bundle**: Third-party libraries (target: <150KB) + +### Lighthouse Scores + +To track Lighthouse metrics: + +- **Performance**: Overall performance score (target: >90) +- **Accessibility**: A11y compliance (target: >90) +- **Best Practices**: Web standards compliance (target: >90) +- **SEO**: Search engine optimization (target: >90) + +### Core Web Vitals + +To measure user experience: + +- **LCP** (Largest Contentful Paint): <2.5s +- **FID** (First Input Delay): <100ms +- **CLS** (Cumulative Layout Shift): <0.1 +- **TTFB** (Time to First Byte): <600ms +- **FCP** (First Contentful Paint): <1.8s + +Consult `references/performance-targets.md` for detailed target definitions and industry benchmarks. + +## Budget Configuration + +### Define Budgets + +Create `performance-budget.json`: + +```json +{ + "bundles": { + "maxInitialBundle": 204800, + "maxRouteBundle": 51200, + "maxTotalBundle": 512000, + "maxVendorBundle": 153600 + }, + "lighthouse": { + "performance": 90, + "accessibility": 90, + "bestPractices": 90, + "seo": 90 + }, + "webVitals": { + "lcp": 2500, + "fid": 100, + "cls": 0.1, + "ttfb": 600, + "fcp": 1800 + }, + "assets": { + "maxImageSize": 102400, + "maxFontSize": 51200, + "maxCssSize": 51200 + } +} +``` + +Use `scripts/generate_budget.py` to create initial budget configuration based on current metrics. + +### Budget Levels + +Define severity levels: + +- **Error**: Block deployment (>20% over budget) +- **Warning**: Alert but allow (10-20% over budget) +- **Info**: Track but continue (<10% over budget) + +## CI/CD Integration + +### GitHub Actions Setup + +To add performance checks to CI: + +```yaml +name: Performance Budget + +on: + pull_request: + branches: [main, master] + +jobs: + performance: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm ci + + - name: Build application + run: npm run build + + - name: Analyze bundle size + run: npx @next/bundle-analyzer + + - name: Run Lighthouse CI + run: | + npm install -g @lhci/cli + lhci autorun + + - name: Check performance budgets + run: python scripts/check_budgets.py + + - name: Comment results on PR + uses: actions/github-script@v7 + with: + script: | + const results = require('./performance-results.json'); + // Comment logic here +``` + +Use `assets/github-workflow.yml` for complete workflow template. + +### Lighthouse CI Configuration + +Create `lighthouserc.json`: + +```json +{ + "ci": { + "collect": { + "startServerCommand": "npm run start", + "url": ["http://localhost:3000", "http://localhost:3000/entities"], + "numberOfRuns": 3 + }, + "assert": { + "preset": "lighthouse:recommended", + "assertions": { + "categories:performance": ["error", { "minScore": 0.9 }], + "categories:accessibility": ["error", { "minScore": 0.9 }], + "first-contentful-paint": ["error", { "maxNumericValue": 1800 }], + "largest-contentful-paint": ["error", { "maxNumericValue": 2500 }], + "cumulative-layout-shift": ["error", { "maxNumericValue": 0.1 }] + } + }, + "upload": { + "target": "temporary-public-storage" + } + } +} +``` + +Reference `assets/lighthouserc.json` for complete configuration. + +## Bundle Analysis + +### Next.js Bundle Analyzer + +To analyze bundle composition: + +```bash +# Install analyzer +npm install --save-dev @next/bundle-analyzer + +# Add to next.config.js +const withBundleAnalyzer = require('@next/bundle-analyzer')({ + enabled: process.env.ANALYZE === 'true', +}); + +module.exports = withBundleAnalyzer({ + // Next.js config +}); + +# Run analysis +ANALYZE=true npm run build +``` + +### Size Tracking + +Use `scripts/track_bundle_size.py` to track bundle size over time: + +```bash +python scripts/track_bundle_size.py --record +``` + +Store results in `performance-history/bundle-sizes.json` for trend analysis. + +## Automated Alerts + +### Threshold Violations + +To configure alerts: + +```typescript +// scripts/check_budgets.ts +interface BudgetCheck { + metric: string; + current: number; + budget: number; + status: 'pass' | 'warning' | 'error'; + percentOver: number; +} + +function checkBudget(current: number, budget: number): BudgetCheck['status'] { + const percentOver = ((current - budget) / budget) * 100; + + if (percentOver > 20) return 'error'; + if (percentOver > 10) return 'warning'; + return 'pass'; +} +``` + +### Notification Channels + +To send alerts: + +- **GitHub PR Comments**: Automated comments with performance report +- **Slack**: Webhook notifications for violations +- **Email**: Digest of performance trends +- **Build Status**: Fail builds on error-level violations + +Use `scripts/send_alerts.py` to integrate notification channels. + +## Performance Monitoring + +### Real User Monitoring (RUM) + +To track real user metrics: + +```typescript +// lib/web-vitals.ts +import { onCLS, onFID, onLCP, onFCP, onTTFB } from 'web-vitals'; + +export function reportWebVitals() { + onCLS((metric) => sendToAnalytics(metric)); + onFID((metric) => sendToAnalytics(metric)); + onLCP((metric) => sendToAnalytics(metric)); + onFCP((metric) => sendToAnalytics(metric)); + onTTFB((metric) => sendToAnalytics(metric)); +} + +function sendToAnalytics(metric: Metric) { + // Send to analytics service + fetch('/api/analytics', { + method: 'POST', + body: JSON.stringify(metric), + }); +} +``` + +Enable in `app/layout.tsx`: + +```typescript +import { reportWebVitals } from '@/lib/web-vitals'; + +export default function RootLayout({ children }: { children: ReactNode }) { + useEffect(() => { + reportWebVitals(); + }, []); + + return {children}; +} +``` + +### Synthetic Monitoring + +To run scheduled Lighthouse audits: + +```yaml +# .github/workflows/scheduled-performance.yml +name: Scheduled Performance Audit + +on: + schedule: + - cron: '0 0 * * *' # Daily at midnight + +jobs: + audit: + runs-on: ubuntu-latest + steps: + - name: Run Lighthouse + run: lhci autorun --config=lighthouserc.json + + - name: Store results + run: python scripts/store_performance_data.py +``` + +## Performance Reports + +### PR Comments + +To generate PR comments with results: + +```markdown +## Performance Report + +### Bundle Size + +- Initial Bundle: 185KB ([OK] under 200KB budget) +- Total Bundle: 480KB ([OK] under 500KB budget) + +### Lighthouse Scores + +- Performance: 92/100 ([OK] meets 90 target) +- Accessibility: 95/100 ([OK] meets 90 target) +- Best Practices: 88/100 ([WARN] below 90 target) + +### Core Web Vitals + +- LCP: 2.1s ([OK] under 2.5s) +- FID: 85ms ([OK] under 100ms) +- CLS: 0.05 ([OK] under 0.1) + +### Bundle Comparison + +| Route | Current | Previous | Change | +| ---------------- | ------- | -------- | ------- | +| / | 185KB | 180KB | +5KB | +| /entities | 45KB | 45KB | No change | +| /entities/[id] | 38KB | 40KB | -2KB [OK] | + +[View detailed report](https://lighthouse-report-url) +``` + +Use `scripts/generate_pr_comment.py` to create formatted reports. + +### Trend Analysis + +To visualize performance trends: + +```bash +python scripts/generate_trends.py --days 30 --output performance-trends.html +``` + +Generate charts showing: + +- Bundle size over time +- Lighthouse scores history +- Web Vitals percentiles +- Performance budget compliance rate + +Reference `assets/trend-visualization.html` for dashboard template. + +## Optimization Strategies + +### Bundle Size Reduction + +To reduce bundle sizes: + +1. **Code Splitting**: Split large components into separate chunks +2. **Tree Shaking**: Remove unused code with proper imports +3. **Dynamic Imports**: Load components on demand +4. **Lazy Loading**: Defer non-critical resources +5. **Compression**: Enable gzip/brotli compression +6. **Minification**: Ensure production builds are minified + +### Image Optimization + +To optimize images: + +```typescript +import Image from 'next/image'; + +World Map +``` + +### Font Optimization + +To optimize fonts: + +```typescript +// app/layout.tsx +import { Inter } from 'next/font/google'; + +const inter = Inter({ + subsets: ['latin'], + display: 'swap', + variable: '--font-inter', +}); + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} +``` + +### Third-Party Scripts + +To optimize third-party scripts: + +```typescript +import Script from 'next/script'; + +