Snapshot dc3bf90 · 2026-07-12T18:08:21.942Z · 1 snapshot(s) in metrics.jsonl
| Metric | Value | vs previous |
|---|---|---|
| Source LOC (product) | 11459 | — |
| Test LOC | 2703 | — |
| Test:code ratio | 0.24 | — |
| Source files | 157 | — |
| Unit tests | 179 in 27 files (3.1s) | — |
| E2E specs | 19 in 13 files | — |
| Line coverage (src) | 22.7% | — |
| Duplication | 2.8% (70 clones) | — |
| Outdated deps | 6 | — |
| Vulnerabilities (crit/high) | 0/1 | — |
| Circular deps | 0 | — |
| Layer-rule violations | 0 | — |
| API routes vs spec | 14 routes / 14 spec paths | — |
| Layer | LOC |
|---|---|
| scripts | 5832 |
| pages | 2648 |
| worker | 2632 |
| lib | 1555 |
| components | 799 |
| e2e | 454 |
| other | 118 |
| layouts | 89 |
| src-other | 35 |
A complex file nobody touches is dormant risk; a complex file changed weekly is the next refactor candidate.
| # | File | LOC | Complexity | Churn | Score |
|---|---|---|---|---|---|
| 1 | src/pages/spots/index.astro |
1048 | 75 | 30 | 2250 |
| 2 | src/lib/spots-api.ts |
281 | 43 | 13 | 559 |
| 3 | src/worker/queries.ts |
167 | 36 | 9 | 324 |
| 4 | src/worker/index.ts |
115 | 28 | 10 | 280 |
| 5 | src/worker/handlers/instagram.ts |
326 | 38 | 7 | 266 |
| 6 | scripts/lib/osm-import.mjs |
233 | 55 | 4 | 220 |
| 7 | src/components/InstagramEmbeds.astro |
172 | 17 | 8 | 136 |
| 8 | src/pages/spots/[slug].astro |
279 | 15 | 9 | 135 |
| 9 | src/lib/spots-leaflet.ts |
169 | 19 | 5 | 95 |
| 10 | scripts/sync-spot-images-to-r2.mjs |
243 | 46 | 2 | 92 |
| File | LOC | Complexity | Trigger |
|---|---|---|---|
src/pages/spots/index.astro |
1048 | 75 | LOC > 400, complexity > 40 |
src/worker/index.test.ts |
754 | 14 | LOC > 400 |
src/lib/spots-api.ts |
281 | 43 | complexity > 40 |
scripts/sync-spot-images-to-r2.mjs |
243 | 46 | complexity > 40 |
scripts/lib/osm-import.mjs |
233 | 55 | complexity > 40 |
scripts/lib/country-boundaries.mjs |
202 | 44 | complexity > 40 |
None. ✅