invoker audit
catalog of JavaScript in this codebase that platform features could replace.
scanned 2026-04-10. the browser is the framework.
every useState that manages a boolean toggle is a question the platform already answered.
popover, dialog, details, command/commandfor — the specs shipped. the codebase has not caught up.
codebase scan
platform features
these are the specifications that already shipped or are shipping.
each one kills a category of JavaScript.
popover available
HTML Popover API
popovertarget + popover attribute. no JS for open/close/dismiss. light-dismiss built in.
replaces: dropdown, tooltip, menu toggle via JS
command/commandfor limited
Invoker Commands
commandfor points a button at a target element. command specifies the action. declarative. Chrome 131+.
replaces: button onClick handlers that toggle/show/hide other elements
dialog available
HTML dialog element
showModal() for modal, show() for non-modal. ::backdrop pseudo. focus trap built in since 2022.
replaces: modal overlays with JS open/close, backdrop, focus trap
details/summary available
HTML details element
interactive disclosure widget since 2011. keyboard accessible. name attribute for exclusive accordion (2024).
replaces: accordion, disclosure, expandable sections via JS
anchor positioning limited
CSS Anchor Positioning
position-anchor + anchor() function. CSS-only positioning relative to any element. Chrome 125+.
replaces: JS tooltip/popover positioning libraries (floating-ui, popper)
:has() available
CSS :has() selector
the parent selector CSS always needed. replaces React state for visual-only conditional styling.
replaces: JS parent-state queries, conditional styling via className toggles
container queries available
CSS Container Queries
@container replaces ResizeObserver for layout adaptation. component-scoped, not viewport-scoped.
replaces: JS resize observers for component-level responsive layouts
view transitions limited
View Transitions API
document.startViewTransition() for same-document. MPA cross-document transitions in Chrome 126+.
replaces: JS page transition animations, route change effects
findings
components where JS toggle/modal/dropdown patterns could be replaced by platform features.
sorted by occurrence count. not all are trivially replaceable — some manage complex state
that goes beyond show/hide. the audit flags candidates, not mandates.
src/components/HypeCopyAnalyzer.jsx popover 13 hits
src/components/NeuralFlowField.jsx popover 13 hits
src/components/GlitchAsciiCanvas.jsx dialog 12 hits
src/components/BeatExciteChain.jsx popover 11 hits
src/components/GenGameMathExplainer.jsx popover 11 hits
src/components/NeuralConsistencyDistill.jsx popover 11 hits
src/components/NeuralTokenExplorer.jsx popover 11 hits
src/components/BeatGrooveLab.jsx popover 10 hits
src/components/BeatMassInteraction.jsx popover 9 hits
src/components/NeuralSuperposition.jsx popover 9 hits
src/components/PixelGridAnatomy.jsx popover 9 hits
src/components/BeatFourierSculptor.jsx popover 8 hits
src/components/BeatPads.jsx popover 8 hits
src/components/BeatSpatialRoom.jsx popover 8 hits
src/components/NeuralImageDiffusion.jsx popover 8 hits
src/components/NeuralScoreField.jsx popover 8 hits
src/components/collective/CollectiveUI.jsx popover 8 hits
src/pages/void/audit.astro popover 8 hits
src/components/AdForgeDashboard.jsx popover 7 hits
src/components/BeatAudioReactive.jsx popover 7 hits
src/components/GameShaderShowcase.jsx popover 7 hits
src/components/GlitchAsciiCanvas.jsx popover 7 hits
src/components/GlitchVernacular.jsx popover 7 hits
src/components/VoidRegexLab.jsx popover 7 hits
src/components/chord/ProgressionPlayer.jsx popover 7 hits
hospice discharge papers
173 handlers weighed for burial.
396.6 KB of deletable JS across 10 terminal and 163 palliative files.
0.10g CO2 per page view — the electricity to run code that the platform already does.
terminal: JS is entirely replaceable by platform features. delete it.
palliative: partial replacement possible — toggle logic dies, complex state lives.
active: JS is load-bearing. the platform cannot replace it yet.
file JS bytes deletable stage replacement
src/components/HypeCopyAnalyzer.jsx — 13 toggle 27.8K 16.7K palliative commandfor
src/components/LensFilmStock.jsx — 2 toggle 11.6K 9.9K terminal commandfor
src/components/VoidRegexLab.jsx — 7 toggle 22.8K 9.3K palliative commandfor
src/components/MintArtistPortal.jsx — 4 toggle 32.0K 8.1K palliative commandfor
src/components/HypeConstraintSurface.jsx — 3 toggle 19.1K 8.0K palliative commandfor
src/components/strange-loop/LoopVisuals.jsx — 3 toggle, 1 modal 9.4K 8.0K terminal commandfor + dialog
src/components/PixelTypeSpecimen.jsx — 2 toggle 9.4K 8.0K terminal commandfor
src/components/NeuralTokenCalc.jsx — 5 toggle 20.6K 7.2K palliative commandfor
src/components/NeuralModelForge.jsx — 5 toggle 16.3K 7.1K palliative commandfor
src/components/NeuralTokenExplorer.jsx — 11 toggle 19.3K 7.1K palliative commandfor
src/components/GenGameMathExplainer.jsx — 17 toggle 15.4K 7.1K palliative commandfor
src/components/MintStripeConnect.jsx — 2 toggle 24.7K 6.9K palliative commandfor
src/components/PixelTypeScaleStudio.jsx — 4 toggle 21.2K 6.6K palliative commandfor
src/components/MintConfigurator.jsx — 2 toggle, 1 parent 27.9K 6.5K palliative commandfor + :has()
src/components/MintProductCard.jsx — 2 toggle 7.7K 6.5K terminal commandfor
src/components/MintArtGallery.jsx — 1 toggle, 4 modal 20.5K 6.5K palliative commandfor + dialog
src/components/LensFiftyOne.jsx — 4 toggle, 1 modal 14.2K 6.2K palliative commandfor + dialog
src/components/AdForgeCampaignView.jsx — 6 toggle, 1 modal 21.0K 5.7K palliative commandfor + dialog
src/components/PixelFontPairing.jsx — 3 toggle 19.0K 5.7K palliative commandfor
src/components/GlitchAsciiCanvas.jsx — 7 toggle, 12 modal 19.0K 5.6K palliative commandfor + dialog
src/components/AdForgeCampaignParts.jsx — 5 toggle, 1 modal 6.5K 5.6K terminal commandfor + dialog
src/components/PixelTypeScale.jsx — 2 toggle 15.0K 5.2K palliative commandfor
src/components/BeatPadSequencer.jsx — 5 toggle 5.7K 4.8K terminal commandfor
src/components/PixelSpacingScale.jsx — 2 toggle 13.2K 4.6K palliative commandfor
src/components/MintIntegrationGuide.jsx — 2 toggle, 1 modal 8.6K 4.5K palliative commandfor + dialog
src/components/NeuralThinkingOutOfOrder.jsx — 4 toggle 24.2K 4.5K palliative commandfor
src/components/chord/ChordTuningComposer.jsx — 5 toggle 16.4K 4.4K palliative commandfor
src/components/NeuralFlowField.jsx — 13 toggle 20.6K 4.4K palliative commandfor
src/components/AdForgeDashboard.jsx — 7 toggle 16.0K 4.4K palliative commandfor
src/components/NeuralBeatDecoder.jsx — 5 toggle 18.6K 4.3K palliative commandfor
src/components/chord/ModulationExplorer.jsx — 6 toggle 15.5K 4.1K palliative commandfor
src/components/MintWebhookLog.jsx — 3 toggle 16.9K 4.0K palliative commandfor
src/components/chord/ProgressionPlayerFull.jsx — 7 toggle 19.1K 3.9K palliative commandfor
src/components/VoidPayloadAuditor.jsx — 2 toggle 17.8K 3.8K palliative commandfor
src/components/PixelGridAnatomy.jsx — 9 toggle 25.2K 3.6K palliative commandfor
src/components/NeuralAttentionHead.jsx — 2 toggle 10.3K 3.6K palliative commandfor
src/components/chord/ProgressionPlayer.jsx — 7 toggle 13.0K 3.5K palliative commandfor
src/components/LensDarkroom.jsx — 6 toggle 8.2K 3.4K palliative commandfor
src/components/NeuralConsistencyDistill.jsx — 11 toggle 16.1K 3.4K palliative commandfor
src/components/chord/ProgressionAnalyzer.jsx — 6 toggle 19.4K 3.4K palliative commandfor
CO2 estimate: SWD v4 model, ~0.26g/MB transferred. global average grid intensity.
methodology is contested — these are not measurements, they are estimates with disclosed assumptions.
the bytes are real. the carbon is modeled.
methodology
this page scans source files at build time using regex pattern matching.
it counts occurrences of onClick, useState, and toggle/modal/dropdown patterns,
then flags components where platform features could plausibly replace JS.
limitations: regex cannot understand intent. a useState managing form validation
is not the same as a useState managing a dropdown. the "replaceable" count is an
upper bound, not a precise measure. some components legitimately need JS for
complex interactive behavior that no platform feature addresses.
the estimated savable bytes is conservative — 200 bytes per component of toggle logic.
real savings depend on how much supporting code (event handlers, state management,
conditional rendering) could be removed alongside the toggle.
162 components flagged. 10 terminal — JS the platform already replaced.
396.6 KB deletable. 0.10g CO2 per view, compounding with every visitor.
the browser ships features faster than frameworks adopt them.
the gap between the platform and the code is measured here, weighed, and given discharge papers.
— void, 2026-04-10