Case study · AI-assisted design & development · iOS

QuickStop

A convenience-store app built around one premise: give customers their time back. An end-to-end, AI-assisted workflow — research, information architecture, Figma screens, and a native SwiftUI port — designed for certainty at the point of need.

iOSEND-TO-END UXAI ASSISTANTDESIGN SYSTEMSWIFTUI
RoleProduct Designer + iOS Developer
Statusv1 — in progress
StackClaude · Figma + Figma MCP · SwiftUI / UIKit · Cursor · ConvexMobile · Stripe
Timeline2025 – 2026

5

Personas, each with a different definition of “fast”

5

Tabs in the final nav — Scan & Go promoted

10

Shop categories, two of them age-gated

70+

Light/Dark color tokens extracted from Figma

Overview

QuickStop is a convenience store app built around a single premise: give customers their time back. Convenience stores fail at the one thing in their name — lines, out-of-stock items, awkward checkout — so the app targets five distinct user mindsets, each with a different definition of “fast.”

This case study documents an end-to-end AI-assisted workflow: research and strategy, information architecture, interaction design in Figma, and a full port to native iOS in Swift.

01 · The problem

Current convenience store apps, where they exist at all, are glorified loyalty cards. They don't solve the core friction: uncertainty. Is the item in stock? How long is the line? Will my mobile order be ready, or sitting open on a shelf anyone can grab?

The opportunity was to build for certainty — and let speed follow naturally from that.

02 · User research & personas

Using Claude, five personas were developed from a bottom-up analysis of real convenience store use patterns — not broad demographics, but specific jobs to be done at different times of day. Each came with pain points, needs, and a priority weighting across Speed, Freshness, Reliability, and Discovery, which became the decision criteria for the rest of the project.

01 · The Commuter

Marcus Hale, 32 · Sales Rep

Order-ahead and a 90-second in-and-out.

02 · The Night Shifter

Priya Ramanathan, 28 · ER Nurse

Curbside pickup and fresh-food transparency at 3am.

03 · The Bulk Buyer

Danny Reyes, 41 · Contractor

Group orders, business receipts, crew presets.

04 · The Impulse Local

Zoe Kapoor, 19 · Student

Scan-and-go, discovery, three taps max.

05 · The Emergency Errand

Sarah Mitchell, 38 · Parent / WFH

Sub-15-minute delivery and verified real-time stock.

Key insight

Across all five, the unifying need is certainty — that the item is in stock, that the line won't kill them, that the trip will take exactly as long as expected.

03 · Information architecture

The IA was worked out iteratively with Claude — proposing structures, stress-testing them against each persona's flow, and revising. The starting point was five tabs: Home, Shop, Orders, Store, You.

01

Scan & Go becomes a top-level tab

It was nested inside Shop as a mode. I promoted it because it's a mode of being in the store, not a browsing mode; it has a fundamentally different input model (camera-first vs. browse/search); and Zoe's “three taps or abandon” constraint is much easier to hit from the tab bar.

02

Store folds into Home's smart header

To keep the nav at five tabs, live inventory, hours, and locations moved into Home rather than a tab of their own. That pulls the certainty layer closer to the first screen every user sees.

03

Group ordering deferred to v2

Crew/group ordering, business accounts, and itemized tax receipts were scoped out to keep v1 shippable.

Final nav (v0.3)

[ Home ] [ Shop ] [ Scan ] [ Orders ] [ You ]

TabPurposePrimary persona
HomeSmart entry — reorder, quick actions, store statusMarcus, Sarah
ShopBrowse catalog, Order Ahead + Delivery modesZoe, Priya
ScanCamera-first in-store checkoutZoe, Marcus
OrdersActive + historical, all pickup/delivery methodsAll
YouProfile, payment, loyaltyAll

04 · Shop taxonomy

Shop was the most structurally complex section: ten top-level categories, each with subcategories and special filters, plus two age-gated categories that need a separate verification model.

  1. 01Hot Food & Pizza
  2. 02Coffee & Hot Drinks
  3. 03Cold Drinks
  4. 04Snacks & Candy
  5. 05Fresh Food
  6. 06Ice Cream & Frozen
  7. 07Beer, Wine & Spirits (age-gated)
  8. 08Tobacco & Vaping (age-gated)
  9. 09Grocery & Household
  10. 10Health & Beauty

Age-gated model: trust and confirm

Date of birth is stored once at account level, with a one-time-per-session cart acknowledgement and a manual visual ID check at handoff by the driver or associate. No in-app ID scanning in v1 — it's deferred to v2 as a drop-in addition to the same flow.

Persona-driven features

01

The Usual

History-driven reorder strip, built for Marcus.

02

New This Week

Discovery strip for Zoe — excludes age-gated items.

03

Need It Now

Emergency shortcut preset for Sarah.

04

Running Low?

Cadence-based reorder prompts.

05 · Design system setup

Before designing screens, I established the color system. The palette was extracted from Figma's Apple Design System file through Figma MCP and exported as a production-ready Swift file, which removed the manual copy-paste step entirely.

Teal

#30C5FF

brandPrimary

Forest

#5C946E

brandAccent1

Sage

#80C2AF

brandAccent12

Sky

#A0DDE6

brandAccent13

The output, DSColors.swift, is a SwiftUI + UIKit extension covering brand colors, system and grouped backgrounds, labels, fills, separators, and overlays — 70+ tokens, all with Light and Dark values.

06 · Screen design in Figma

Screens were built in Figma from the Apple Design System library with QuickStop tokens applied. Through Figma MCP, Claude wrote and executed plugin code directly in the file — creating frames, placing components, setting fills, wiring auto-layout — instead of me building each screen by hand.

01

Shop Landing

Search bar, Order Ahead / Delivery mode selector, “The Usual” card, and a 10-category grid with age-gated lock badges.

02

Cold Drinks category

Subcategory chips, a featured banner, and a sectioned product grid with stock indicators.

03

Product Detail

Product image, nutrition facts grid (calories, sugar, caffeine, serving), and a “frequently bought together” strip.

04

Onboarding, six screens

Value prop, location permission, category preferences, sign-in, first-order preset, then success with a habit prompt.

The six-screen QuickStop onboarding flow in Figma: a '4 minutes — your order, ready, guaranteed' value prop, a store-finder map, a category preference grid, sign-in options, a pre-built first order, and an order-placed confirmation with a QR code and a 'make this your usual' prompt
Onboarding in six screens — the flow ends on a certain pickup time and a prompt to turn the first order into a habit.
The You tab: a profile card with points, day streak, and tier; grouped lists for My QuickStop, Payment & Rewards, and Settings; and the five-item tab bar at the bottom
The You tab — grouped lists on a #F2F2F7 background, 14pt cards, continuous corners.

SF Pro throughout, QuickStop teal for primary actions, iOS system greens, oranges, and reds for stock status, #F2F2F7 grouped backgrounds, and a 14pt card radius with continuous corners.

07 · iOS development in Swift

The designs were ported to native SwiftUI and UIKit, with DSColors.swift as the bridge between design and code. The project separates concerns strictly: an atomic hierarchy for UI components, and a feature-based structure for product areas.

Quickpitstop/
└── Sources/
    ├── App/            # Entry points
    ├── Components/     # Atomic design system
    │   ├── Atoms/        DSButton, DSBadge, DSTextField…
    │   ├── Molecules/    ProductCard, StockBadge, CartItemRow…
    │   ├── Navigation/   DSTabBar, DSToolbar
    │   └── Organisms/    ProductGrid, CartSummary…
    ├── DesignSystem/
    │   └── Tokens/       DSColors, DSTypography, DSSpacing,
    │                     DSRadius, DSShadow
    ├── Features/       # Home, Cart, Orders, Search, Account, Auth
    ├── ViewModels/
    └── PreviewMocks

01

Tokens only, no magic numbers

Views use Color.brandPrimary, Color.backgroundSecondary, and the DSSpacing / DSRadius constants. No hardcoded hex values appear in feature or component code, and Light/Dark is handled entirely at the token level.

02

Figma hierarchy mirrored in code

A molecule in Figma maps to a molecule in Swift. The asset catalog follows the Figma variable groups (Brand/Primary, Backgrounds/Secondary, Labels/Primary), so handoff is mechanical rather than interpretive.

03

Real-time backend for the core promise

ConvexMobile syncs live inventory, order status, and stock levels — directly serving the promise of certainty. Stripe handles payment in checkout.

04

Feature folders with preview fixtures

Each product area owns its views and shares state through the ViewModels layer. PreviewMocks supply fixture data so SwiftUI previews work with no live backend.

Cursor-assisted development

The Swift implementation was built in Cursor with the project structure and DSColors.swift as persistent context. It scaffolded each atom and molecule from a description of its Figma equivalent, resolved the right token for each use, generated preview mocks alongside components, and propagated token renames across every component file in one pass.

08 · AI workflow — what actually changed

What AI accelerated

  • Persona generation and synthesis: hours down to under an hour
  • IA iteration: propose, critique, and revise in one session
  • Shop taxonomy: category naming, subcategory logic, age-gating edge cases
  • DSColors.swift: extracted from Figma rather than transcribed
  • Figma screen construction: plugin code written and executed via MCP

What still needed human judgment

  • Deciding which structural option was right (Scan & Go promotion, Store into Home)
  • Visual taste: checking designs looked right, not just structurally correct
  • Scoping what goes in v1 versus v2
  • Swift architecture decisions during the native port
The workflow didn't remove design judgment — it removed the time between having a judgment and seeing it rendered.

09 · Open questions & what's next

Open questions (v1)

  1. First-time DOB prompt: onboarding (less friction later) or just-in-time (only when needed)?
  2. Under-21 accounts: hide age-gated categories entirely, or show a locked state?
  3. Scan & Go geofencing: require in-store location to activate the scanner, or always available?
  4. Home personalization: how aggressive on day one with no behavior history?

What's next

  • Age-gated checkpoint sheet (the ID-required modal at cart level)
  • Orders tab: active order tracking and pickup-method screens
  • Scan & Go flow: scanner UI, cart drawer, exit and pay
  • v2 scoping: crew/group ordering, business accounts, in-app ID verification
← Back to portfolio