For frontend teams

Replace custom code with modern CSS.

Scan a public page to see where modern HTML and CSS can replace custom code. Each finding includes the evidence and what to test before making the change.

What a finding looks like

Each finding connects the current pattern to a possible platform replacement, then shows the evidence and tradeoffs behind it.

Custom JavaScript modal overlays

Possible replacement: <dialog>

Confidence: High

Why it may help

  • Deletes custom focus-trap logic and open-state tracking.
  • Lets the browser handle top-layer rendering and Escape key dismissal.
  • Provides modal semantics and focus management with less custom JavaScript.

Found on this page .newsletter-modal #mobile-menu Newsletter signup and mobile navigation overlays (2 instances)

Current HTML + JavaScript

<div class="modal" role="dialog"
  aria-modal="true" hidden>
  <button class="modal__close">Close</button>
  <!-- modal content -->
</div>

/* Original JavaScript excerpt */
const modal = document.querySelector('.modal');
trigger.addEventListener('click', () => {
  modal.hidden = false;
  trapFocus(modal);
});

Modern alternative

<dialog id="site-modal">
  <form method="dialog">
    <button>Close</button>
  </form>
  <!-- modal content -->
</dialog>

const modal = document.querySelector('#site-modal');
trigger.addEventListener('click', () => modal.showModal());

Patterns the scanner checks

The detection set covers browser-native replacements that can be checked from a public page. Hidden source and authenticated states stay out.

JavaScript you could delete

  • Custom modals could become <dialog>
  • Custom popovers, tooltips, and dropdowns could become the Popover API
  • Scripted accordions and disclosure widgets could become <details> + <summary>
  • JavaScript-assisted entry transitions could become @starting-style
  • Parent state classes toggled by JavaScript could become :has()
  • Scroll-triggered reveal scripts could become animation-timeline: view()
  • Carousel and slider libraries could become CSS scroll snapping
  • Auto-growing textarea scripts could become field-sizing: content
  • JavaScript-positioned tooltips could become CSS anchor positioning

CSS quick wins

  • Percentage-padding aspect ratio boxes could become aspect-ratio
  • Transform-based centering could become place-items: center
  • 100vh heights that break on mobile could become dvh and svh units
  • WebKit-only scrollbar styling could become scrollbar-color
  • Duplicated dark-mode color rules could become light-dark()

From rendered page to verified finding

  1. Render the public page

    Chrome captures rendered HTML, interaction signals, same-origin CSS, and JavaScript.

  2. Flag evidence, not conclusions

    Deterministic checks surface candidate patterns across the nine supported categories.

  3. Verify before reporting

    Weak leads are rejected. Each finding includes evidence, confidence, and tradeoffs to test.

The scanner only reports what a browser can verify on the public page. It does not inspect server-side code, authenticated states, or hidden business logic.

Every recommendation shows its work

What exists today

The page, interaction, and implementation evidence behind the finding.

What could replace it

The browser feature and the custom code it could simplify.

What to verify

Confidence, limitations, and behavior to test before changing anything.

Built for public frontend work

A strong fit

  • Frontend teams maintaining older interaction code
  • Designers and developers preparing a redesign
  • Indie makers checking a public product or docs page

Outside this scan

  • Server-side code and authenticated product states
  • A full accessibility, performance, or security review
  • Changes that can only be judged with business context

Two ways to take this further.

Learn the patterns behind the scanner, or bring me in to audit and implement the rest.

The book

You Don't Need JavaScript

The modern HTML and CSS features this scanner looks for, explained through 27 practical examples you can use in real interfaces.

Cover of You Don't Need JavaScript See what's in the book

Find what the platform can replace.

Paste one public URL to start an evidence-backed scan.

Audit my page

Scanning

    This usually takes about a minute.

    Daily limit

    You've used today's 5 audits.

    For now, each person can run up to 5 audits per day. Your access resets tomorrow.

    Need more scans or a complete audit? Email me to discuss a paid audit.

    Email Theo

    Or message me on LinkedIn.