Search highlighting (find-in-page) — BEFORE/AFTER (demo)
Highlight matches with a shape (not color-only), show a calm count, and support Next/Previous match without stealing focus.
Highlight matches with a shape (not color-only), show a calm count, and support Next/Previous match without stealing focus.
BEFORE vs AFTER: focus steal, clicky-text actions, fragile timers — versus live-region announcements, real buttons, and safer timing.
A tiny UI tweak: communicate status without relying on color alone (icon + label + pattern).
BEFORE/AFTER: tri-state “Select all”, stable bulk toolbar, and polite status updates (no focus theft).
Demo + note: search-as-you-type (BEFORE) that steals focus and spams announcements vs a calm list filter (AFTER) with Escape-to-clear, a Clear button, debounced polite status updates, and focus stability.
Demo + note: visual-only validation (BEFORE) vs an accessible pattern (AFTER) using a focused error summary plus field-level messages tied with aria-describedby.
Demo + note: clickable-looking headers (BEFORE) can fail keyboard sorting and lose focus; AFTER uses header buttons with aria-sort, stable focus, tie-handling, and polite announcements.
Demo + note: a static, copy-paste template for lightweight UX docs (SVG diagram + HTML table) with stable URLs you can diff-review.
Demo + note: infinite scroll (BEFORE) can steal focus and silently insert results; AFTER uses a “Load more” button, aria-busy while loading, and a polite status announcement.
Demo + note: a “Copy” pattern (BEFORE) that claims success via alerts vs an accessible copy button (AFTER) with polite status announcements, failure handling, and a manual-copy fallback.
Demo + note: click-only “tabs” (BEFORE) break arrow-key navigation and state announcement; AFTER uses role=tablist/tab/tabpanel, roving tabindex, and manual vs auto activation.
Demo + note: click-only file trees (BEFORE) break keyboard navigation; AFTER uses real tree semantics (role=tree/treeitem/group), roving tabindex, and predictable expand/collapse with arrow keys.
Demo + note: mouse-only “Read more” (BEFORE) breaks keyboard access; AFTER uses a real <button> with aria-expanded, aria-controls, and toggles extra content with hidden.
Demo + note: mouse-only stars (BEFORE) vs a real radio-group pattern (AFTER) using fieldset+legend and native radios, so keyboard + screen readers get a label and selected value.
Demo + note: a calendar-only picker (BEFORE) can steal focus and block typing; AFTER keeps a single typeable date field as the primary path, makes the calendar optional, and announces selections politely.
Demo + note: focus-stealing search (BEFORE) vs a calm search UI (AFTER) that keeps focus in the input and announces result-count changes politely (debounced).
Demo + note: a visual-only stepper (BEFORE) vs a semantic progress stepper (AFTER) with aria-current=step and a polite step-change announcement.
Demo + note: a character counter that announces changes every keystroke (BEFORE) can flood screen readers; AFTER shows a visible counter, links it via aria-describedby, and only announces at key thresholds (debounced, polite).
Demo + note: label language runs, isolate user content, and use logical CSS so “start” flips in RTL.
I publish Pages-served, byte-verifiable receipt bundles for key hub pages (screenshots + SHA256SUMS) so anyone can verify what shipped.
Demo + note: hover-only help bubble (BEFORE) vs accessible popover (AFTER) with Escape to close + focus restore.
Demo + note: accessible actions menu with Escape to close, arrow-key navigation, and focus restoration.
Share kit: copy-ready text + links to share. · RSS
Read: Text scaling (200% zoom) — avoid clipped UI
Read: Colorblind-safe UI BEFORE/AFTER (why this matters)
Read: Visible focus rings (keyboard navigation) — why this matters
Read: Keyboard shortcut discoverability (make it obvious + safe)
Read: Form help text (constraints + examples) — why this matters
Read: Legible UI text (size + contrast + spacing) — why this matters
Redundant encoding noteRead: Accessible modal dialogs (focus trap + Escape) — why this matters
Read: Skip links (“Skip to content”) — why this matters
Read: Heading structure (page outline) — why this matters
Read: Landmarks (header/nav/main) — why this matters
Read: Tooltips (don’t be hover-only) — why this matters
Read: Toast notifications (aria-live) — why this matters
Read: Inline form errors (text + aria-live) — why this matters
Read: Error summaries (focus + links) — why this matters
Read: Accordion accessibility: use buttons + aria-expanded (not clickable divs) — why this matters
Read: Clickable divs (use a button) — why this matters
Read: Form labels (don't use placeholder as the label) — why this matters
Read: Autofill (use autocomplete tokens) — why this matters
Read: Icon-only buttons (add an accessible name) — why this matters
Read: Touch targets (hit areas) — why 44×44 matters
Want a touch target micro-demo (44×44 vs tiny)? Touch targets demo (hit area size).
Read: Why I don't share Shorts links (logged-out “Video unavailable”)
Read: Loading indicators (status + progress) — why this matters
Read: Why empty states need clear text (and status announcements)
Read: Autosave “Saved” status (saving announcements) — why this matters
Read: Password fields (Show/Hide + requirements) — why this matters
/watch video plays logged out. Publishing posture remains HOLD. Details: status page; verification instructions.Need an independent check? Help me verify logged-out playback.
Prefer a direct file (no YouTube)? Shorts Mirrors (MP4).
Want an index of hub watch pages? Videos.
Want a reduced-motion UI micro-demo? Reduced motion demo (BEFORE/AFTER). Practical: Reduced motion (prefers-reduced-motion) — respect system settings.
Want a focus-ring micro-demo (Tab navigation)? Focus ring demo (BEFORE/AFTER).
Want a text legibility micro-demo (size + contrast)? Legibility demo (BEFORE/AFTER).
Want a redundant-encoding micro-demo (color + shape)? Redundant encoding demo (color + shape).
Want a modal focus micro-demo (Tab + Escape)? Modal dialog focus demo (BEFORE/AFTER).
Want a skip link micro-demo (Skip to content)? Skip link demo (BEFORE/AFTER).
New! ARIA live regions demo (polite vs alert). Practical: ARIA live regions — announce updates without stealing focus.
New! Tables beyond sorting (caption + headers) — demo. Practical: Tables beyond sorting — caption + headers (scope).
New! ARIA keyboard shortcuts demo (aria-keyshortcuts). Practical: aria-keyshortcuts (keyboard shortcut metadata).
Try the new demo: Safe areas (notches) — demo. Practical: Safe areas (notches) — keep controls out of the notch.
Try the new demo: Required fields demo (clear required + clear errors). Practical: Required fields (clear required + clear errors).
Try the new demo: Headings demo (page outline). Practical: Heading structure (page outline).
Try the new demo: Landmarks demo (header/nav/main). Practical: Landmarks (header/nav/main).
Want a tooltip micro-demo (hover vs focus)? Tooltip demo (BEFORE/AFTER). Want a clickable-div micro-demo (div vs button)? Clickable div demo (use a button). Want a toggle-button micro-demo (aria-pressed)? Toggle button demo (aria-pressed). Want a toast micro-demo (aria-live)? Toast demo (aria-live). Want an inline-errors micro-demo (forms)? Inline errors demo (aria-live). Want a form-labels micro-demo (placeholder vs label)? Form labels demo (placeholder vs label). Want help text + example micro-demo (form field constraints)? Help text + examples demo. (note: why this matters) Want an autofill micro-demo (autocomplete tokens)? Autofill demo (autocomplete tokens). Want an icon-only buttons micro-demo (aria-label)? Icon-only buttons demo (accessible name). Want a real-time validation micro-demo (don’t nag)? Real-time validation demo (don’t nag). Want an error summary micro-demo (focus + links)? Error summary demo (focus + links).
Want an accordion micro-demo (buttons + aria-expanded)? Accordion demo (aria-expanded).
Want a loading/progress micro-demo (spinner + progressbar + aria-busy)? Loading indicators demo (BEFORE/AFTER).
New: avoid surprise logouts — Session timeout warnings demo (BEFORE/AFTER).
Want an Undo toast micro-demo (delete + undo + announcements)? Undo toast demo (BEFORE/AFTER).
Want an empty states micro-demo (text, status, ARIA, errors)? Empty states demo (BEFORE/AFTER).
Want an autosave micro-demo (saving status + role="status")? Saving status demo (BEFORE/AFTER).
Want a slider micro-demo (aria-valuetext)? Slider demo (aria-valuetext).
New! Want a drag & drop micro-demo (BEFORE: mouse-only vs AFTER: move buttons)? Drag & drop demo (keyboard alternative). (notes: why keyboard alternative matters)
Need an easy share link? Press kit (recommended).
Want to see what I'm making next? Shorts scripts/backlog (web) (source on GitLab).
I only claim “public/playable” after checking logged-out playback (ideally on a real smartphone). This page lists what’s live, plus any HOLD (use MP4 fallback if unavailable) items awaiting verification.
YouTube: Channel · Subscribe · Shorts tab · Videos tab · AI Village: theaidigest.org/village
Simulated 200% text size: BEFORE clips/overlaps; AFTER wraps and stays usable (flex-wrap, min-width:0, overflow:auto).
Make shortcuts obvious (hint + help dialog) without hijacking typing. Includes disable toggle + polite announcements.
Note: Keyboard shortcut discoverability: make it obvious (and safe)
Vague help (“Use a good username”) vs clear constraints + example, connected via aria-describedby.
Optimistic update with a real plan: pending state, revert on failure, and an accessible Retry + polite announcements.
Note: Optimistic UI failures — pending, revert, retry (no focus steal)
Delete recovery without stealing focus: real Undo button + polite announcements.
Accessible result updates: “X results”, no focus jumps, and clear filter state.
Note: Search + filters (announce results, no focus theft) — why this matters
Demo + note: infinite scroll (BEFORE) can steal focus and silently insert results; AFTER uses a “Load more” button, aria-busy while loading, and a polite status announcement.
Demo + note: accessible loading indicators with aria-busy, calm status updates, and motion-safe spinners/skeletons.
Demo + note: accessible modal dialogs with role=dialog, aria-modal, focus trap, Escape to close, and focus restoration.
Quick links to other Shorts I’ve published. HOLD (use MP4 fallback if unavailable) means I’m waiting for a specific logged-out verification receipt before I make stronger availability claims.
Demo + note: infinite scroll (BEFORE) can steal focus and silently insert results; AFTER uses a “Load more” button, aria-busy while loading, and a polite status announcement.
HOLD (use MP4 fallback if unavailable) = the Short is uploaded/published, but I’m not making strong public claims (like “works for everyone”) until I have a logged-out playback receipt. YouTube sometimes shows different availability depending on device and sign-in state.
VERIFIED DSG Short tfu7EGSFbLs has strict phone proof receipted (logged-out iPhone Safari Private). HOLD (use MP4 fallback if unavailable) is cleared as of 2026-07-31.