Skip to content
Apoorv Mahajan

Personal projects

Designing for hardware before it ships

Outside work I take a product from the first sketch to the App Store build. The Good Roommate is the one I am designing for iPhone Duo, Apple's foldable, and the page below follows how it got made.

The Good Roommate · A camera-first chore app that folds with the phone.

My part

Product, UX, UI and the prompts. Claude Code wrote the Swift.

Platforms

iPhone Duo and every iPhone, iOS 27

Status

In progress, started October 2026

01 Sketch

It starts on paper.

The Duo's outer screen is small and has a camera hole in one corner, so I drew the stopwatch cover by hand first: the timer top left, the chore drawn big on the right, and room kept clear for the lens. Washing dishes and vacuuming were the first two.

Hand-drawn sketch in Procreate of two folded-Duo cover screens, Washing dishes and Vacuum, each with a stopwatch box and a drawing of the choreProcreate sketch: Washing dishes and Vacuum, with the stopwatch box.
The Figma frame for the landscape stopwatch cover: Stopwatch 04:20, the chore Dishes, buttons Done and Cancel, a washing-up bowl and tap illustration, and the camera-hole corner marked with a dashed boxThe same screen in Figma at 678 by 466, with the lens corner cut out.

02 Design to build

Figma first, then the app.

Each chore illustration is drawn in Figma with editable layers and keyframes, then ported into SwiftUI. I would sooner argue with a frame in Figma than with a build.

Figma frame of the landscape stopwatch cover for the Dishes chore

Figma: Screens v1.2, the Dishes cover. The shipped cover on the Duo, in landscape.

03 Now

Where the design is today.

The app has moved a long way from the first scaffold. Up next ranks what is overdue, a running chore sits above the tab bar with its own timer, finishing one pays out a speed bonus, and three themes change the whole mood of the house.

The Good Roommate on the folded iPhone Duo, Plum and Coral theme in light: Up next lists Dishes as overdue and aimed at by the camera, then five more chores, with the toolbar and tab bar in the side stripUp next on the folded Duo, Plum · Coral, light. The camera is aimed at the most overdue chore.
The same Up next screen in the Lagoon theme in dark, with a running Dishes chore pill showing 04:20 above the bottom of the listLagoon, dark. Start a chore and its stopwatch rides along above the tab bar.
  • The celebration screen on the folded Duo: +30 points, Dishes done, a 13 day streak saved for today, and a speed bonus line

    Finish a chore: points, the streak, and a speed bonus.

  • Up next in the Lagoon theme, navy and azure, in dark

    Lagoon: navy and azure.

  • Up next in the Moss theme, forest and lime, in light

    Moss: forest and lime.

The folded iPhone Duo turned to landscape in tent mode: a stopwatch at 04:20, the chore Dishes, and the animated washing-up illustration, with the camera-hole corner kept clear

Tent mode on the outer screen: the stopwatch cover from the sketch, now the real thing.

04 Version 1

Where it started.

Every version that changes the look gets its own folder of screenshots, a tag and a pull request, so the first scaffold still sits next to today's build.

05 How I work

My decisions, a tight loop of tools.

I run product, UX, UI and the build in conversation with Claude Code. The decisions and the design are mine; the tools keep each step small, written down and reversible.

  1. 01 · Plan

    Linear

    • The project has five planning milestones, from discovery to the build spec, then a milestone for each build, starting with v0.5.0.
    • Every idea is logged first, then accepted or parked, and becomes an issue with a priority.
    • I imported the plan through the Linear MCP, so the repo's plan and the board stay the same document.

    MineWhat the product is, what is in scope, what to park.

  2. 02 · Design

    Figma

    • Screens live on versioned pages: Screens, Screens v1.1 and Screens v1.2.
    • A Foundations page holds the type and color; the code uses the same roles.
    • Through the Figma MCP, Claude Code can read a frame and its layers instead of guessing from a screenshot.

    MineEvery screen, the sketches, the motion, the layout rules for Duo.

  3. 03 · Build

    Claude Code

    • It writes the SwiftUI and the tests from the decisions logged in CLAUDE.md and the docs.
    • Each version is a branch, screenshots on iPhone and Duo, a tag, and a pull request.
    • The pull request is mine to review and merge.

    MineThe prompts, the review, and the call on whether it looks right.

The ideas log, the discussion log and the plan all live in the repo, so the next session starts from what was decided rather than from memory.

Also built on my own time

Just Fill it!

From a job page to a tailored resume, without leaving the page.

  • HomePages
    Overview & Introduction
  • WorkPages
    All 9 Projects & Case Studies
  • AboutPages
    Story, Timeline & How I Work
  • Generative Drive CoachProjects
    Automotive · Case Study
  • Fleet ConsoleProjects
    Automotive · Case Study
  • How2ToProjects
    Spatial · Case Study
  • Omnia BrowserProjects
    Spatial · Case Study
  • Spatial ShowroomProjects
    Spatial · Case Study
  • SynCareProjects
    Health · Case Study
  • SiteLensProjects
    Spatial · Case Study
  • Just Fill it!Projects
    Personal · Case Study
  • Design-crewProjects
    Personal · Case Study
  • EmailActions
    apoorvsm@gmail.com
  • LinkedInActions
    View Profile ↗
↑↓navigate↵selectescclose
⌘K /