Seam

Seam

Seam turns any product link into a clean, auto-organized wishlist. Share a link from any store and it pulls the brand, price, image, and category with no typing. I led it solo from idea to a live App Store release: product vision, design, QA, and direction, using AI coding tools (Claude Code and Vercel) as my engineering partners. The judgment, decisions, and shipped product are mine; the implementation was a collaboration with AI.

Date

June 2026 - Present

Role

Solo design + iOS engineering

Team

None

2 product designers, 1 design manager, 1 art director, 9 engineers, 1 QA, 1 product owner

0%

Wishlists live everywhere and nowhere

The things we want to buy are scattered, a screenshot here, fourteen open tabs there, an abandoned cart, a link in DMs. There was no calm, single place to collect them that didn’t feel like a spreadsheet. I set out to make capturing an item effortless (zero typing), and make the result feel curated, not like data entry.

Saving should be one tap, and organizing should happen on its own.

The Product

Share a link → it auto-fills → browse. You share any product page to Seam from the iOS share sheet; it scrapes the brand, price, image, and name in the background; items land in auto-assigned categories, groupable by brand and fully searchable.

Capture, auto-enrich, browse — no forms, no manual tagging.

A quiet, editorial layout — restraint is the product.

Design & Identity

I designed Seam to feel calm and editorial: a serif wordmark, restrained monochrome palette, generous whitespace. The logo is a woven knot of "S"s — threads forming a seam — carried across onboarding, empty states, and the share confirmation. I also made the taxonomy earn its keep: I split a catch-all “Accessories” category into Jewelry and Watches after seeing real items get mis-bucketed — driven by usage, not assumption.

How It Works

The hard problem: reliably extracting clean product data from hundreds of unrelated retailers — luxury houses, indie Shopify shops, bot-protected giants — with no per-site integration and no backend.


The approach I directed — a layered scraper that degrades gracefully: a fast metadata read for most stores, Shopify’s product JSON for indie shops, and a real headless browser with genuine cookies for bot-protected sites — plus a 200+ domain-to-brand map with fallbacks so brands resolve consistently.

Each layer catches what the previous one can’t.

Build & Release

From code to App Store: Working solo, I leaned on automation to ship like a team. Every change runs the same path: I author and debug it in Claude Code (building and running the test suite locally), commit and push to GitHub, and that triggers Codemagic, my CI/CD, which runs the tests, archives, signs, and uploads the build to App Store Connect. From there it goes to TestFlight for a real-device check, then Apple review, then live


The point isn't the tools, it's that the process is test-gated and repeatable. A failing test stops the build before it ever reaches Apple, so I can ship small fixes fast without fear of regressions. It's also where the AI-assisted model pays off: authoring with Claude Code plus an automated pipeline let one person move at the pace of a small team, while the judgment, review, and quality bar stayed mine.

Every change follows the same path: authored with AI, gated by tests, shipped automatically.

Reliability & Process

Early on, every change meant a manual loop: build, install, save test links, eyeball the results, find something broken, repeat. Bugs kept slipping through — including a duplicate-key bug that compiled cleanly but crashed at runtime, freezing saved items in a loading state. The takeaway wasn’t “fix one bug,” it was “stop testing by hand.” So I systematized it:

  • A focused test suite around the fragile logic (brand-map integrity, domain parsing, category inference) — the exact functions that kept causing issues.

  • Wired into CI (Codemagic) so a failing test blocks a release before it ships, instead of me re-testing by hand every time.

  • Self-healing recovery so items orphaned by a mid-scrape failure recover on launch rather than hanging.

Results & Learnings

The main challenge I faced was reliably extracting clean product data from hundreds of unrelated retailers — luxury houses, indie Shopify shops, bot-protected giants — with no per-site integration and no backend.

  • Shipped and live on the App Store; iterated through multiple releases (1.0.1 → 1.0.3) driven by real user feedback.

  • Hardened scraping from “works on big stores” to reliable across luxury, indie Shopify, and bot-protected retailers (200+ brands).

  • Established a tested, CI-gated release process — the codebase is safer to change than at launch.

  • Directing an AI engineering partner is its own skill — knowing what to build, catching when the output was wrong, and owning product judgment mattered more than writing every line.