← Back to work

Case study · Mobile

Trinity Pocket

A native B2B mobile app for apparel sales reps — designed and architected from scratch after a full audit of the existing third-party app it replaced. From codebase gap analysis to sprint-sequenced production build.

Role

Lead Designer & Mobile Architect

Platform

iOS + Android (Expo React Native)

Skills

Product strategy, UX, system architecture, React Native

Before — Skiffle

Skiffle app login screen — minimal branding, username/password only, no SSO

After — Trinity Pocket

Trinity Pocket login screen — branded shield icon, email/password, Google and Apple SSO, biometric path
Full Skiffle kickoff FigJam board showing research, personas, flows, and planning

The kickoff FigJam board — personas, order hierarchy, screen flows, API gap analysis, and component library decisions, all in one canvas.

Trinity Custom Apparel's field sales reps were using a third-party mobile app called Skiffle to manage clients, browse fabrics, and reference orders on the go. The app was not built by or for Trinity — it was a licensed product with a generic identity, limited feature coverage, and no path to native mobile capabilities like biometric login, push notifications, or camera access.

Trinity needed to own the mobile experience. My job was to define what that meant, scope what to build, and lead the design and architecture of the replacement from the ground up.

Before wireframing anything, I did a full structural analysis of Skiffle: mapping every screen, its route in the codebase, and how it compared to Trinity's own dealer web app. The goal was to understand exactly what existed, what was missing, and what Trinity's own backend already supported that Skiffle never exposed.

I documented the gap analysis screen-by-screen: 22 screens in Trinity's dealer web app had no equivalent in Skiffle at all. Three Skiffle-only screens were mobile-native patterns worth carrying forward. Payment management, Styleflow, and the dashboard were entirely absent.

Handwritten critique of Skiffle login screen — notes to rename app, add Google SSO, fix error handling, address Apply Now destination Handwritten critique of Skiffle dashboard — notes on notification section load, address hierarchy, layout questions for mobile
Full overview of Skiffle app screens mapped against Trinity Dealer app — showing gaps across Home, Orders, Clients, Fabrics, Styleflow, Payments, and Library
Skiffle 1.0 complete screen reference — all existing screens annotated and mapped against the Trinity dealer web app

Skiffle 1.0 in full — every screen documented during the audit. Each was classified: carry forward natively, bridge via WebView, omit entirely, or replace with a better mobile pattern.

Kickoff FigJam board — screen specifications, user stories, and flow mapping from the project kickoff session

Kickoff board detail — screen specs, user stories, and flow decisions mapped during the initial planning session with the team.

The audit produced a classification system for everything in Trinity's existing web app: features that should become native screens, features that could bridge through a WebView temporarily, features that should be permanently omitted from mobile, and net-new capabilities that only make sense on a phone.

Native builds

  • Home dashboard with order pulse and bulletins
  • Orders list and order detail
  • Clients directory and client detail
  • Fabric explorer and fabric detail
  • Styleflow garment configurator
  • Rankings screen

Permanent boundaries

  • Order creation stays on desktop — not an MVP constraint, a product boundary
  • Trend Reports omitted entirely
  • Role-switching out of scope for v1
  • Styleflow AI endpoint deferred to v2

Architecture Decision Record · ADR 0003

"Trinity Pocket is a field tool — dealers use it to manage relationships, present fabrics, and track orders. Order creation stays on desktop where dealers have the full configuration interface they need to get it right."

Every native screen carried its scope decision into a numbered functional requirement — FR-1 through FR-29, plus a parallel set of fix tickets (FIX-1, FIX-2…) for behaviors Skiffle got wrong. Grouping the board by screen area kept Auth, Home, Orders, Clients, Fabrics, Search, the inclinometer, Tools, Push, Support, and Account each auditable on their own, instead of one flat backlog.

Functional requirements board from the Skiffle kickoff FigJam — screens grouped by area with FR and FIX ticket numbers for Auth, Home, Orders, Clients, Fabrics, Search, Inclinometer, Measurements, Tools, Push, Support, Account, and navigation

The full functional requirements grid — every screen area broken into individually numbered requirements and fix tickets, so each one could be scoped, estimated, and checked off independently during sprint planning.

Understanding who actually uses the app — and how their workflows differ — shaped every navigation and scope decision. Three distinct personas emerged: the field rep managing clients on-the-go, the senior dealer who lives in orders and rankings, and the relationship-led rep who uses Styleflow as a sales presentation tool.

User personas from the Skiffle kickoff FigJam — field rep, senior dealer, and relationship-led rep

User personas defined during the kickoff session. Each persona surfaces different priority screens and informs where in the sprint sequence each feature belongs.

01

Five-tab nav — no more, no less

Skiffle had a fragmented navigation model that didn't reflect how reps actually work. I mapped dealer workflows to five intent-based tabs: Home, Orders, Production, Clients, Settings — folding Fabrics, Styleflow, and the rest of the tools set into Production, and giving Account, payments, and preferences their own dedicated tab instead of hiding them behind an avatar.

Information architecture Navigation design

02

Native-first auth with biometric path

Skiffle used a basic username/password form. Trinity Pocket implements Google and Apple SSO via native OAuth sheets, biometric login via Face ID on return visits, and a graceful password fallback — all without a WebView in sight. The login screen became the clearest signal that this is a different product entirely.

Native capabilities Auth UX

03

Styleflow — rack-based garment configurator

Styleflow was entirely absent from Skiffle. I designed a rack-based architecture: each garment (jacket, trouser, vest) is a configurable Rack with fabric, lining, buttons, and thread selections. Racks group into Stylepages. Picario XPO renders photorealistic previews server-side via Trinity's backend — the mobile app never constructs image URLs directly.

System design Visual configurator API integration

04

Sprint sequencing as a design decision

I sequenced five sprints in dependency order: Auth → Core read-only (12 screens) → Dashboard, Payments, Rankings → Styleflow → Rack Builder and push notifications. Each sprint produces a testable TestFlight build. Dealer access is gated until Sprint 3 payments direction is resolved — so dealers never see an alert they can't act on.

Product strategy Scope management

Styleflow's Custom Model Creation flow needed backend work Trinity's API didn't have yet — new endpoints for custom copy, mounting, and model visibility, plus a "quick win" fallback using existing dealer upload storage until the real ones shipped. Mapping the frontend flow (Home → Model Library → "Create My Model" → Confirmation) against exactly which backend pieces existed vs. needed to be built kept the Rack Builder sprint from stalling on an API that wasn't ready.

Skiffle kickoff FigJam board section — app screen flow diagram, Custom Model Creation backend requirements and frontend flow, API endpoint list, QA verification checklists, and the five-sprint execution timeline

The planning surface behind the scenes: the full app screen-flow diagram, Custom Model Creation's backend requirements and frontend flow side by side, the API endpoint inventory, QA verification checklists for auth and orders, and the five-sprint execution timeline that sequenced all of it.

The kickoff board was a live working document — not a presentation deck. Every screen decision was made against real flow diagrams and real API availability, not against hypothetical requirements.

New dashboard concept from FigJam — dealer rank, order pulse, bulletins, and quick actions

Dashboard concept — dealer rank pill, order pulse card, bulletin feed, and quick action row mapped before any wireframe was drawn.

Orders tab specification — search, status tabs, and card layout defined in FigJam

Orders tab spec — search bar, status pill tabs, and 56px minimum row height locked before the production UI was built.

In-depth orders flow mapping from Latham's walkthrough — showing the full order lifecycle and screen transitions

Orders flow in depth — mapped from a walkthrough session with the team. This diagram drove the screen hierarchy in the Orders tab and clarified which states needed native treatment vs. a desktop deep-link.

Early builds used a placeholder violet as a stand-in accent while the brand team finished Trinity's actual identity system. Once that landed, the interface was rebuilt against the real palette — Heritage Sky #4F8FEB for every interactive state, active tab, and CTA, with Midnight Blue and Deep Navy carrying headers and text. It's a small thing on paper, but it's the difference between a prototype that looks like a demo and one a dealer mistakes for Trinity's own software. The tab bar never disappears during normal browsing, and Styleflow keeps a deeper navy chip treatment so it still reads as a distinct creative tool rather than a reference screen.

Expo React Native NativeWind ShadCN UI for RN Expo Router Supabase EAS PostHog Picario XPO

"A field tool a sales rep is proud to open in front of a client."

Product brief — Trinity Pocket

Trinity Pocket prototype screens — Login, Dashboard, Orders, Fabrics, Clients, and Tools hub

Six core screens from the production UI spec — Login, Dashboard with order pulse, Orders list with status tabs, Fabrics explorer, Clients directory, and the Tools hub with Styleflow as the featured creation tool.

Trinity Pocket now exists as a running Expo build, navigable end-to-end across all 27 screens against mocked data ahead of backend integration. A few screens from the current build:

Trinity Pocket login screen — work email and password fields, Sign In button, Google and Apple SSO, and a demo returning-user link

Login

Orders screen — searchable order list with a Presentation mode toggle, Open and Completed segmented tabs, and status pills including In Production, Fabric Hold, Delivered, Cutting, and Delayed

Orders

Clients screen — searchable client list with company names and units month-to-date, and bottom navigation with Home, Orders, Production, Clients, and Settings

Clients

Rank Report screen — current rank number 40 of 147, a rank-over-time bar chart, and insight cards for positive momentum, next rank target, and best order day

Rank Report

QR code to launch the Trinity Pocket build in Expo Go

Live build · 27 screens running on mocked data

Scan with Expo Go to run the real native build on your phone

Internal marketing one-pager

How the rebuild was pitched to stakeholders →

View site ↗

Trinity Pocket has moved from spec to a working build. All 27 screens are built and running end-to-end in Expo Router — Auth, Home, Orders with a 4-step New Order wizard, Clients, the AR-based Shoulder Slope measurement tool, Styleflow, Rankings, and Payments — currently against mocked data. The scope, tech stack, navigation architecture, and nine Architecture Decision Records are locked; the next milestone is wiring the build to Trinity's live backend in place of the mock data layer.

22

Screens identified as missing from the existing app through the gap analysis

9 ADRs

Architecture decisions locked before a line of production code was written

27

Screens built and running end-to-end in Expo Router, from Auth through Styleflow

What worked

  • Auditing the competitor app before designing anything surfaced gaps the team hadn't formally named
  • Locking ADRs early prevented scope from being relitigated at every PR review
  • Treating sprint sequencing as a UX decision — dealer access gates protect the experience

Next challenges

  • Wiring all 27 built screens to Trinity's live backend in place of mocked data
  • Native Braintree integration vs. WebView bridge — a Sprint 3 team decision
  • Validating the Styleflow configurator flow with real dealer feedback once TestFlight ships

Next case study

Final Shipments Manager