Zürich, CH — CET

[ Case study (01) ] — Lead UI/UX design · Poker companion app · In user acceptance testing

Water

I lead design for Water, a poker companion app people use one-handed, at the table, in low light. I redesigned the experience around one layout language — and changed how our team designs: the design system and every iteration moved from Figma into code with Claude Code, producing clickable prototypes and a Design Hub where the frontend developer and PM track work and answer questions.

Role
Lead Designer (UI/UX)
Team
Lead designer (me, remote from Zürich) · Graphic designer · PM · Frontend developer — client in Taiwan
Tools
Figma → Claude Code, HTML prototypes, React + Tailwind tokens, Next.js, Supabase
Timeline
Jul 2025 — ongoing
Problem
In an app people use one-handed, mid-game, the main actions got lost, every page looked alike and the AI coach was hidden. Hand-off from Figma couldn’t keep up with the code.
My role
Lead designer, directing a graphic designer and working with a PM and a frontend developer.
What I did
Set one layout language (Hero + Sheet), moved the design system and iteration from Figma into code with Claude Code, and built a clickable prototype of the whole app plus a Design Hub for the PM and developer.
Result
A review note now reaches the prototype in 1–2 days instead of 2–3 weeks. Now in user acceptance testing, with 41 prototype versions, 76 PM questions and 10 function specs live in one hub instead of chat threads.

Project overview

Water helps poker players record hands, take notes on opponents, follow tournament series, track their bankroll and ask an AI coach about a spot. Players often open it mid-game: one hand on the phone, the room dim, a decision coming. That picture came from quick interviews with players in our Discord community.

The old interface gave every feature the same dark card at the same size. As lead designer, with a graphic designer working under me, I owned the redesign end to end — the UX direction, the layout language, the design system, the prototype the team builds from — and the workflow that gets design to the developer and PM.

01

Problem & goals

Main actions get lost

Recording a hand and taking table notes are the most frequent tasks, but they were the same size as everything else and moved around.

Every page looks alike

Home, events and hands were all lists of dark cards. You had to read the title to know where you were.

The AI coach is hidden

The feature that sets the app apart lived in a single input in the header, with no clear entry on the homepage.

The goals

One tap. One glance. One question away.

Frequent actions in one tap, in thumb reach · every page recognisable at a glance · the AI coach visible and used.

02

Where Figma stopped keeping up

We started the usual way: I built the design system and wireframes in Figma. But with AI speeding up how code gets written, the design file became the slowest step in the loop — and the hardest one to hand over.

Before: the Ask Water AI chat designed in Figma — six screens from the empty state with suggested questions to an answer with an attached hand image and an upgrade prompt, each drawn twice for light and dark mode
Before — the AI chat in Figma: every state drawn as a static frame, twice, for light and dark mode

Hand-off lost detail

Static frames had to be re-read and rebuilt in code. Spacing, states and motion were interpreted, not shared.

Iteration was slow

Every review note meant redrawing frames, re-linking a prototype and exporting again. A change took 2–3 weeks to reach something the team could try.

Hard to try for real

The PM and developer reviewed pictures of the flow, not the flow — so feedback came late, often after it was built.

03

Moving the design system into code

So I moved the design system and our iteration into Claude Code. The system now lives as a page the frontend developer copies from: tokens and components written in the same stack the app uses.

Before: Figma variables panel with collections for font size, paddings and radius, 110 primitive colours and 77 semantic tokens, showing background tokens with light and dark values
Before — Figma variables: 110 primitive colours, 77 semantic tokens, light and dark
Water Design System v2.1: a lime header listing 41 colour tokens, 39 components and the Next 15, React 19, Tailwind v4 stack, then the design principles: Hero + Sheet, one primary action, thumb zone, condensed numerals, readable status
After — Water Design System v2.1 in code: 41 colour tokens and 39 components, written for the team in Traditional Chinese

Tokens the code uses

Colour, type, spacing, radius, shadow and motion as Tailwind v4 theme tokens and plain CSS variables — plus a table mapping the old variables to the new ones, so the developer could migrate screen by screen.

Components with their code

Each component has a live preview identical to the prototype, its React + Tailwind code, a props table and usage notes. Hand-off is a copy, not a measurement.

Principles you can check

Hero + Sheet on every main page · one brand-green primary action per screen · navigation and actions in the thumb zone · condensed numerals for amounts and times · status never shown by colour alone.

The PageShell component in the design system: a phone preview of the Hero + Sheet layout next to its React code and a props table for hero, color, watermark, tone and height
A component entry — live preview, the React code and its props, side by side
04

Iterating in the prototype

Iteration moved into code too. I describe a change to Claude Code, check the result on my phone and refine it until it's right — every version a clickable prototype instead of a set of frames.

Deliver easily

A prototype is a link, not a file to export. The PM and developer open the same version; the developer reads real layout, spacing and states.

Iterate quickly

A note from a review becomes a sentence, not a redrawn set of frames. Changes usually land in the prototype within 1–2 days, each with a changelog line.

Try out easily

Everyone tests the real flow on their own phone — real taps, sheets, empty states and errors — so feedback is about using it, not imagining it.

2–3 weeks

from a review note to a prototype the team could try, in Figma

1–2 days

from a review note to the updated prototype, now in code

The speed went into exploration. The homepage carries the most weight, so I explored it over six rounds before narrowing — from four dark-mode directions to a behaviour-led layout, then a deliberate range of styles, each tested on the same three screens.

Round 01: four dark-mode homepage directions, starting with Deep Current (results first) and Felt & Brass (action first)
Round 01 — four directions: results-first, action-first, editorial, AI-first

Rounds 01–02 · Directions

Seven directions, each pairing a layout strategy with a palette — from a results dashboard to an opponent carousel and a bento grid.

Round 03 · Behaviour first

I stepped back from style and mapped the contexts — at the table, off the table, brand new — into placement rules, then critiqued rounds 01–02 against them. This became the recommended direction.

Rounds 04–06 · Fidelity and style

High-fidelity variants, then nine styles across home, tournament list and tournament detail, and a deep dive on the one we chose.

The design decisions stay mine: I set the direction, the layout rules and the design system, and review every change. AI takes on the production.

05

Hero + Sheet: one layout language

Redesigned home: the blue Ask hero on top, a draggable sheet with the fortune card and two large action tiles, and a floating navigation bar

Every page is built from the same three layers, so people always know where to look:

Hero — what this page is

A full-bleed colour block with one giant word, at most 45% of the first screen. Each area keeps its own colour: blue for home and AI, green for events, coral for hands.

Sheet — the content

Lists and tools on a sheet that overlaps the hero and can be dragged up. Order: main action, then personal info, then lists.

Dock — the main action

Primary actions and navigation stay in the thumb zone. One lime primary button per page at most.

06

A clickable prototype of the whole app

The result is one clickable prototype of the whole app, now on its third version, built from about 50 prototype files: a real navigation stack, sheets and micro-interactions.

Table notes: a poker table with named seats and colour labels Player database: searchable list with colour labels and tags Stake groups: who owes whom across backers, settled and unsettled Record result: a shareable WIN card with the amount and a toggle to hide it

Flows you can walk through

Record a hand from setup to result, browse a tournament schedule, seat opponents at a table, settle a stake group, chat with the AI coach — including the empty, loading and error states.

Specs drawn from the prototype

For each function I wrote a spec: every screen and state, the rules (with worked examples for anything that calculates money), open PM questions with a design default, engineering notes and analytics events. Its screenshots are captured from the prototype in a headless browser, so the two never drift apart.

07

The Design Hub, for the frontend developer and PM

Faster iteration created a new problem: more versions, more questions. Prototypes lived on my laptop, PM questions were scattered across chats, decisions weren't written down, and the developer had no single place to see what was ready. So I designed and built a small internal tool for my two teammates — Next.js on Vercel, Supabase for data and sign-in — where they track work and answer questions.

Design Hub overview: navigation for Overview, Dev board, PM decisions and Change log, a link to the clickable prototype, and a table of recent changes by function
Overview — the latest prototype one click away, then every recent change by function
  1. (1)PrototypeNew version registered, with a changelog line for every change
  2. (2)PM questionOpen → discussing → decided
  3. (3)DecisionOne click from an answer, noting what must change
  4. (4)Dev taskPinned to a prototype version; flagged when a newer one exists
  5. (5)ShippedMoved across the board, linked to the commit

For the PM

Every open question in one list, filtered by function. Each comes with my design default, so the PM answers a proposal, not a blank page — and a decision is one click.

For the frontend developer

A board of tasks, each pinned to the prototype version it was designed in and flagged when the prototype moves on. A function can't be marked "ready for dev" while it still has open questions.

PM decisions page: counts of open, discussing, decided and skipped questions, filters by function, and question cards with the design default, the PM reply and status buttons
PM decisions — each question carries my design default and a one-click status
A function page: a warning that it can't move to ready for dev while eight questions are open, and its dev tasks marked newer proto
A function page — blocked from "ready for dev" while questions are open; tasks flag when the prototype has moved on
10

function specs, from homepage to share image

41

prototype versions moved into the hub at launch

76

PM questions moved into the hub at launch

08

Beyond the phone

The same design system carries the desktop web version — for the work people do after a session, like reviewing hands and settling money — and the logged-out landing page.

Water desktop web home: sidebar navigation, the Ask hero, the fortune card, Hand records and Table notes tiles, recent hands and saved tournaments
Desktop web — the same layers in a sidebar layout, with a "better on the phone" card
Water landing page for logged-out visitors: a headline, buttons to open on the phone or log in on a computer, and the redesigned home on two phones
Logged-out landing page — open on the phone with no download, or log in on a computer
09

Where it stands & what I learned

The redesign is in development and now in user acceptance testing. A review note now reaches the prototype in 1–2 days instead of 2–3 weeks. Hero + Sheet runs through the homepage, events, hands, table notes, bankroll and stake groups, on to login, desktop web and the landing page — and every PM decision and dev task lives in the Design Hub instead of a chat thread.

The design file is no longer the deliverable

What the team needs is something they can use and copy: a prototype to tap through and a design system written in their own code.

Speed is only useful with structure

Faster iteration produced more versions and questions than chat could hold. The Design Hub is what made the speed safe.

AI changes the craft, not the role

Claude Code produces; I still decide the direction, the rules and what's good enough — and the review is where the design happens.