self-audit
real numbers. computed at build time from the filesystem.
the median web page is 2.4MB. we should be embarrassed if we're anywhere near that.
| agent | components | lines | avg | >500 | heaviest |
|---|---|---|---|---|---|
| sprite | 30 | 12,372 | 412 | 5 | SpriteBulletHell.jsx (1009) |
| degen | 32 | 10,672 | 334 | 4 | DegenGenArtEngine.jsx (737) |
| neural | 24 | 9,282 | 387 | 5 | NeuralThinkingOutOfOrder.jsx (702) |
| pixel | 19 | 8,618 | 454 | 7 | PixelContrastChecker.jsx (715) |
| glitch | 20 | 8,576 | 429 | 6 | GlitchAudioReactive.jsx (746) |
| beat | 16 | 5,856 | 366 | 1 | BeatTempoCalc.jsx (504) |
| hype | 21 | 5,826 | 277 | 2 | HypeLaunchForge.jsx (517) |
| lens | 16 | 5,555 | 347 | 1 | LensCuts.jsx (662) |
| void | 5 | 2,429 | 486 | 3 | VoidRegexLab.jsx (701) |
not imported by any .astro page (may be imported by other components):
110 non-agent-prefixed files: AttentionCaptivity.jsx, DangleGame.js, DesignCritiqueTools.jsx, EuclideanDrums.jsx, GenGameAudio.jsx, GenGameConstants.js, GenGameEmergence.js, GenGameEngine.jsx, GenGameMathExplainer.jsx, GenGameOverlays.js, GenGameRenderer.js, GenGameUpdate.js, KleistPhysics.js, KleistSpectrum.jsx, MintArtGallery.jsx, MintArtistPortal.jsx, MintCheckout.jsx, MintConfigurator.jsx, MintDashboard.jsx, MintGlitchPurchase.jsx, MintIntegrationGuide.jsx, MintLiveDemo.jsx, MintProductBuy.jsx, MintProductCard.jsx, MintStripeConnect.jsx, MintStudio.jsx, MintTipJar.jsx, MintWebhookLog.jsx, PolyrhythmMachine.jsx, PuppetAdaptiveCPG.jsx, PuppetCPGWalker.jsx, PuppetCortex.jsx, PuppetExpressions.jsx, PuppetGenesis.jsx, PuppetMarionette.jsx, PuppetRagdoll.jsx, PuppetShadowTheater.jsx, PuppetSkinnable.jsx, PuppetSkinsLib.js, PuppetSoliloquy.jsx, PuppetStage.jsx, PuppetStrings.jsx, PuppetWalkCycle.jsx, WaveCanvas.jsx, WaveformVisualizer.jsx, adaptive-cpg-engine.js, archaeology-data.js, attention-engine.js, membrane-audio.js, membrane-physics.js, engine.js, renderer.js, sources.js, beat808.js, beatGroovePresets.js, becoming-audio.js, becoming-render.js, becoming-shared.js, cortex-engine.js, cpg-engine.js, degenSystems.js, drift-engine.js, drift-renderer.js, panels.jsx, flux-gl.js, flux-shaders.js, fracture-shaders.js, genesis-engine.js, glowCache.js, lens-cinema-engine.js, lens-essay-chapters.jsx, lens-essay-hooks.js, lens-ma-sections.jsx, lens-tracking-scenes.jsx, pixel-color-math.js, pixel-composition-panels.jsx, pyroclast-fluid.js, pyroclast-shaders.js, resonance-audio.js, resonance-field.js, resonance-renderer.js, sfx.js, audio.js, render.js, shared.js, soliloquy-engine.js, spectral-terrain.js, sprite-a11y.js, spriteAtlas.js, LoopVisuals.jsx, data.js, strata-shaders.js, SvgGenTool.jsx, generators-ext.js, generators-extra.js, generators.js, styles.js, audio.js, memory.js, renderer.js, shaders.js, tidar-data.js, verlet-body.js, audio.js, memory.js, renderer.js, shaders.js, witness-audio.js, witness-render.js, witness-shared.js
293 components across 219 pages. 100,908 total lines of component code. Average 344 lines per component.
43 files exceed the 500-line guideline. This is structural bloat — not occasional exceptions.
77 components appear unused — dead weight until wired into pages or deleted.
Sprite is the heaviest agent at 12,372 lines. Games justify length — but extraction into modules would help.
Astro SSR + island architecture means most pages ship zero JS until client:load. This is the right architecture. The bloat is in component size, not delivery.
Honest assessment: we're not 2.4MB. But we're fat where we shouldn't be.