From lisa-expo
Performance analysis for Expo + serverless backend projects. Runs Lighthouse audits, bundle size analysis, and k6 load tests.
npx claudepluginhub codyswanngt/lisa --plugin lisa-expoThis skill is limited to using the following tools:
Analyze application performance.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Analyze application performance.
Argument: $ARGUMENTS — analysis type (lighthouse, bundle, k6, all; default: all) and optional target environment
.)${BACKEND_DIR:-../backend-v2} — set BACKEND_DIR in .claude/settings.local.json if your backend is elsewherepackage.json for lighthouse:check, export:web, analyze:bundle scriptspackage.json for k6:* scriptse2e/constants.ts or .env.* files for environment URLsnpx lighthouse http://localhost:8081 \
--output=json \
--output-path=./lighthouse-local.json \
--chrome-flags='--headless --no-sandbox'
Discover frontend URLs from e2e/constants.ts or .env.* files:
npx lighthouse https://{env_url} \
--output=json \
--output-path=./lighthouse-{env}.json \
--chrome-flags='--headless --no-sandbox'
bun run lighthouse:check
cat lighthouse-{env}.json | jq '{
performance: .categories.performance.score,
accessibility: .categories.accessibility.score,
bestPractices: .categories["best-practices"].score,
seo: .categories.seo.score,
fcp: .audits["first-contentful-paint"].displayValue,
lcp: .audits["largest-contentful-paint"].displayValue,
tbt: .audits["total-blocking-time"].displayValue,
cls: .audits["cumulative-layout-shift"].displayValue,
si: .audits["speed-index"].displayValue
}'
bun run export:web && bun run analyze:bundle
bun run export:web
echo "=== Total Bundle Size ==="
du -sh dist/
echo ""
echo "=== Largest JS Files ==="
find dist -name "*.js" -exec ls -lhS {} + 2>/dev/null | head -20
Discover available k6 scripts from the backend package.json (matching k6:*).
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:smoke
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:load
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:stress
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:spike
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:docker:smoke
bun run k6:docker:load
| Metric | Score | Rating |
|---|---|---|
| Performance | 0.85 | GOOD |
| Accessibility | 0.92 | GOOD |
| Best Practices | 0.88 | GOOD |
| SEO | 0.95 | GOOD |
| Metric | Value | Threshold | Status |
|---|---|---|---|
| FCP (First Contentful Paint) | 1.2s | < 1.8s | PASS |
| LCP (Largest Contentful Paint) | 2.1s | < 2.5s | PASS |
| TBT (Total Blocking Time) | 150ms | < 200ms | PASS |
| CLS (Cumulative Layout Shift) | 0.05 | < 0.1 | PASS |
| Category | Size | Notes |
|---|---|---|
| Total dist/ | 4.2 MB | |
| Largest chunk | 1.1 MB | vendor.js |
| Metric | Value |
|---|---|
| Requests/sec | 450 |
| Avg response time | 120ms |
| p95 response time | 350ms |
| Error rate | 0.1% |
Include recommendations for any metrics that fall below thresholds.