Er An Khoo
Software engineer based in Singapore. Publishes small libraries, dev tools, and hosted utilities under kea0811.

headless-modal
headless-modal is an accessible, headless modal / dialog primitive for React — it owns the behavior that's easy to get wrong (focus trap, focus return, body scroll lock with scrollbar compensation, portal rendering, Escape and overlay-click dismissal, and the full WAI-ARIA dialog wiring) and ships z

headless-radio-group-react
headless-radio-group-react is an accessible, headless radio group primitive for React — it owns the tricky behavior (roving tabindex, orientation-aware arrow-key navigation, Home/End, Space/Enter, and the full WAI-ARIA radio pattern) and ships zero styling, so you keep complete control of the markup

magnet-cursor
magnet-cursor is a tiny React library for the "magnetic cursor" interaction you see on award-winning sites: a custom cursor that glides across the page and snaps onto your buttons and links as the pointer drifts near them. You render one component, tag the elements you want to feel sticky with `data

glow-card-react
glow-card-react is a tiny React library that adds a cursor-tracking glow to any card — a soft radial spotlight that follows the pointer and fades out when it leaves. It ships a drop-in `<GlowCard>` component and a headless `useGlowCard` hook, works with both React 18 and 19, and has zero runtime dep

I built a tool that grades how fragile your CSS is
css-unused-finder is a hosted, browser-only tool that reads any stylesheet and grades how fragile it is — flagging `!important` pileups, ID selectors, runaway specificity, deep descendant chains, magic z-index values and duplicate selectors, then rolling them into a 0–100 fragility score and an A–F

I built a CLI that prints a specificity heat map for your CSS
A tiny CLI that reads a stylesheet and prints a color-coded heat map of every selector's specificity — making the usually-invisible cause of failing CSS overrides visible at a glance.

typewriter-fx
typewriter-fx is a tiny, dependency-free React library for typewriter text effects with a cursor that actually behaves like a real one — solid while characters are landing, blinking only when the typing rests. It ships a drop-in `<Typewriter>` component for the common case and a headless `useTypewri

Gotham Garage
A personal-collection-first PWA for diecast collectors: scan a UPC or photo-match a loose car against your own library — so you never double-buy.

og-image-studio
OG Image Studio is a free, fully client-side editor for designing Open Graph / social-share images. You set a title and subtitle, pick a solid, gradient or image background, tweak fonts and colours, and watch a pixel-perfect 1200×630 card update live — then export it as a PNG in one click. Nothing i

kotomot
Translation management for devs — hosted API + Node, React Native, Flutter SDKs

bundle-cost-cli
CLI that prints bundle cost delta on every save

gradient-border-react
Animated gradient border that flows around any element

headless-toast
Tiny, fully-accessible toast primitive

scroll-reveal-kit
Drop-in IntersectionObserver reveal animations

Welcome to tech-brew
What this place is for: a weekly tech blog about the small libraries, tools, and platforms I build to stop writing the same code for the fifth time.