Skip to content

Field notes

Short write-ups of problems I hit while building, and the fix. Each one cost an afternoon.

  1. iOS Safari won't animate transforms inside an SVG

    Problem A transform animation on an element inside an SVG never moves on iOS Safari, while every other browser plays it.

    Fix Animate a wrapper outside the SVG, or animate an SVG attribute instead of a CSS transform.

  2. Tailwind v4 silently drops utilities it has no token for

    Problem A class with no matching token compiles to nothing. There is no warning, and the page just looks wrong.

    Fix Search the built CSS for the class name. If it is missing, the token is missing.

  3. A Capacitor Android app needs two permissions for the microphone

    Problem Access is refused even after the user allows it, because the web permission and the Android permission are separate.

    Fix Declare RECORD_AUDIO in the manifest and request it from the native side before the web side asks.

  4. Recorded WebM audio that won't play back

    Problem A WebM blob recorded in the browser plays in some browsers and not others, and seeking fails everywhere.

    Fix Decode it with the Web Audio API and play the buffer, rather than handing the blob to an audio element.

  5. Supabase queries do nothing until you await them

    Problem A fire-and-forget insert never fires, because the query builder is lazy and only runs when awaited.

    Fix Always await the query, or call then on it. Lint for unawaited builders.

Essays

Longer pieces on design, building and running a company.

For a project or a role

I'm open to senior and lead design engineer roles, and to client projects.