Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions docs/LIGHTHOUSE_CONFIG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Lighthouse CI Configuration

## Disabled Assertions

| Assertion | Reason |
|-----------|--------|
| `uses-text-compression` | Cloudflare handles compression at edge |
| `unused-css-rules` | Google Fonts CSS includes styles for all unicode ranges (especially Noto Sans JP) |
| `unused-javascript` | Code splitting causes "unused" JS on initial page load, but chunks are used on other routes |
| `render-blocking-resources` | Returns NaN in SPA configuration |

## Thresholds

- **LCP**: < 2.5s (error)
- **CLS**: < 0.1 (error)
- **FCP**: < 2s (warn)
- **TBT**: < 300ms (warn)
- **Category scores**: ≥ 90% (accessibility is error, others are warn)
6 changes: 3 additions & 3 deletions lighthouserc.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
"uses-text-compression": "off",
"uses-responsive-images": "warn",
"offscreen-images": "warn",
"unused-javascript": "warn",
"unused-css-rules": "warn",
"render-blocking-resources": "warn"
"unused-javascript": "off",
"unused-css-rules": "off",
"render-blocking-resources": "off"
}
},
"upload": {
Expand Down
7 changes: 4 additions & 3 deletions src/client/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,11 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />

<!-- Non-blocking font loading with preload + async pattern -->
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;600;700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;600;700&display=swap" media="print" onload="this.media='all'" />
<!-- Optimized: Geist Mono reduced to 400 only (used in code blocks) -->
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400&family=Noto+Sans+JP:wght@400;500;600;700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400&family=Noto+Sans+JP:wght@400;500;600;700&display=swap" media="print" onload="this.media='all'" />
<noscript>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;600;700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400&family=Noto+Sans+JP:wght@400;500;600;700&display=swap" />
</noscript>

<!-- Critical CSS for initial render (prevents FOUT) -->
Expand Down
Loading