Skip to content
View irisdomain23's full-sized avatar
  • Singapore
  • Joined Sep 3, 2026

Block or report irisdomain23

Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
irisdomain23/README.md

Iris Lin — Front-End Engineer · Accessibility

now


Front-end engineer in Singapore. I build design systems, and most of my time goes to the parts that get skipped — focus order, empty states, and what a component does when the data never arrives.

What I work on

Component APIs, design tokens, docs, and the migration work that comes after. A fair share of my week is spent reading someone else's markup and deciding whether the fix belongs in the component or in the page that misused it.

Stack

Every day:

  • React + TypeScript — hooks, strict on, generics only when they earn their keep
  • CSS — custom properties, cascade layers, container queries; I reach for CSS before JS
  • Vite + Vitest + Testing Library — queries by role, never by test id if a role exists

Regularly:

  • Storybook as the review surface, not the documentation of last resort
  • Figma tokens → CSS custom properties, generated rather than hand-copied
  • Playwright for the handful of flows that would cost money if they broke
  • Node for build tooling, and nothing more ambitious than that

Accessibility, specifically

  • WCAG 2.2 AA is the floor for anything I ship, not a phase at the end
  • axe-core in CI catches the boring 40%; the rest needs a keyboard and a screen reader
  • VoiceOver on Safari and NVDA on Firefox, because they disagree and both users exist
  • Focus is a design decision — where it lands after a dialog closes belongs in the spec
  • Reduced motion, forced colours, and 200% zoom are test cases, not edge cases

Selected projects

A small React + TypeScript component library — Button, Tag, Tooltip — with no runtime dependencies and keyboard behaviour written before the styling.

A single-file accessibility checklist that runs offline in a browser tab. Built to hand to designers and PMs who are not going to install anything.

Layout, gradient, and dark-mode snippets I got tired of re-deriving, kept in one place with notes on when each one breaks.

Three hooks I use across every project — useDebounce, useLocalStorage, useMediaQuery. Typed, dependency-free, small enough to read in one sitting. The ones I copy into a new codebase before the first component is written.

A focus trap for dialogs and overlays — Tab and Shift+Tab cycle within the container's focusable elements, focus moves to the first element on mount, and the cleanup function restores normal tab order when the overlay closes. If a role exists in the DOM, it should be reachable by keyboard.

How I work

  • Read the spec before the blog post. MDN and the WCAG Understanding pages settle most arguments.
  • A component that needs a wrapper div to be usable is not finished.
  • aria-* is what you reach for when semantic HTML runs out, not where you start.
  • If a design has no defined focus, error, and empty state, the design is not done — I will ask before I build it, not after.
  • Ship the boring version, then measure. Most performance work is deleting something.

Currently

  • Moving a component library's overlay layer onto the Popover API and CSS anchor positioning, with a fallback path for browsers that are not there yet
  • Working through the success criteria that landed in WCAG 2.2 — target size and focus appearance are the ones changing our components the most

📊 Activity

Contact

Issues and discussions on any of the repos above. That is the fastest way to reach me, and I read all of them.


Singapore · UTC+8 · github.com/irisdomain23

Popular repositories Loading

  1. irisdomain23 irisdomain23 Public

    Profile README

    TypeScript 9 1

  2. focus-trap-util focus-trap-util Public

    Trap keyboard focus inside a container for dialogs and overlays. Tab/Shift+Tab cycling with cleanup.

    TypeScript 6

  3. a11y-checklist a11y-checklist Public

    A single-file accessibility checklist that runs offline in a browser tab, with no build step and no dependencies.

    HTML 4

  4. iris-ui iris-ui Public

    A small React + TypeScript component library — Button, Tag and Tooltip — with no runtime dependencies and keyboard behaviour written first.

    HTML 3

  5. css-snippets css-snippets Public

    Practical CSS snippets for layout, gradients and dark mode, each with a comment explaining why it is written that way.

    CSS 2

  6. react-hooks-lib react-hooks-lib Public

    Three typed React hooks — useDebounce, useLocalStorage, useMediaQuery. Dependency-free.

    TypeScript 2