Enter password
Product Designer · Palmstreet
I design modular product systems that reduce operational chaos at scale.
About
Product Designer at Palmstreet. Using AI as a thinking partner: I design structured, scalable systems across 12+ product areas on a $3.3M/week live commerce platform. Design systems in Storybook. Shipping infrastructure. Live commerce features.
Animated Explorations
Concepts exploring motion, feedback, and delight.
Case Study 01
Product Designer (sole designer) · AI-augmented workflow
Aug 2025 - Present Active
Typography & Color Tokens
Five type scales and six core colors, defined as JSON/TypeScript tokens that engineers import directly. No guessing at hex codes or font sizes - every value traces back to a single source of truth.
The token architecture bridges Figma and code. Change a value in the token file, and it propagates to Storybook, docs, and shipped product.
Buttons & Form Controls
Four button variants across three sizes with full state coverage: default, hover, pressed, disabled. Every variant maps to a Figma component with matching props.
Form controls (inputs, toggles, selects) follow the same token-driven approach. Engineers use the same prop names in code that designers see in Figma.
Components & Tokens
Status badges, avatars, notification rows, and spacing tokens - built as atoms that compose into larger patterns. Each component documents its own props, variants, and usage.
Atomic design approach: tokens feed atoms, atoms compose into molecules, molecules assemble into organism-level patterns engineers can drop into any feature.
Cards & Patterns
Product cards, order rows, and seller profiles - three core patterns that repeat across the entire platform. Each is built from the same atoms: badges, avatars, type scales, and spacing tokens.
Patterns are documented with real data so engineers see exactly how content fills each slot. No lorem ipsum.
The Problem
Every new feature started from scratch. Engineers who needed a colour or spacing value had to guess, eyedrop from Figma, or ask. The design file and the shipped product drifted apart with every sprint.
One designer covered 12+ product areas. Feature work couldn't stop for the system to get built. It had to happen in the margins, in parallel.
The Insight
A design system is not a component library. It is a decision-making framework. The purpose is not pre-built buttons. The purpose is that every design decision gets made once, documented, and applied consistently.
Three jobs ran in parallel: reasoning about structure, executing in Figma, and evaluating tools. Separating them is what made solo execution possible.
"Choosing a token naming convention is design strategy. Building the colour ramp is execution. Each job needed a different tool."
Approach
Five Phases
Phase 1: Traditional Figma. Components. No tokens. No code layer.
Phase 2: AI tool evaluation. Tested 6+ tools with a framework: what does this tool do well, what does it fail at, and where does it fit?
Phase 3: Claude as thinking partner. Token naming decisions, documentation drafts, competitor analysis, PRD structure.
Phase 4: Design system as code. JSON + TypeScript token files. Deployed on Storybook via Netlify.
Phase 5: Playbook. Usage guidelines. Engineering coordination. DS tokens referenced in audits.
Key Decisions
Skeleton first, then layer. Core atoms only: type, colour, spacing, buttons. No complex components. Stakeholders asked "where are the modals?" The line held. Premature components create maintenance debt.
Separate design tokens for design and code. Figma variables are design-side. JSON/TypeScript files are the code source of truth. Two representations create a sync obligation. Worth it for the handoff friction it removes.
Storybook as shared reference, not Notion. A Notion page goes stale. Storybook is a URL anyone can open that renders actual components.
Shared repo for handoff and exploration. Local prototypes live alongside production components in the same repository. Engineers pull the branch, run Storybook, and interact with the design — no Figma access required. Exploration and handoff happen in the same place.
Claude for thinking, Figma Make for prototyping. Not interchangeable. Claude handles reasoning and design strategy. Figma Make handles interactive prototypes.
Prototype Playground
I built a local prod repo that consumes the design system tokens directly. Every prototype is a real component using real spacing, type, and color — no Figma-only fidelity gap.
Vercel auto-deploys every commit. PMs and engineers review prototypes via share-link, not screenshots. This is now the team's default review surface.
Impact
"Mind blowing." — Yufan, PM
Components in Production
Same buttons. Same chips. Same colour tokens. Different surfaces — seller dashboards on desktop, buyer feeds on mobile, admin tools in between.
The system stops being a Figma library and becomes a shared vocabulary across product areas.
Adoption Across Teams
Within two months, every product area pulled from the same tokens. No more colour drift. No more guessing at spacing. Engineers shipped faster because they stopped reverse-engineering Figma.
Reflection
Building a design system solo is prioritization, not craft. The hard part is deciding what not to build yet.
The surprise: AI as thinking partner, not UI generator. Token structure and tradeoff analysis proved most valuable. Articulating a problem clearly enough for AI to engage forces more precise thinking.
Case Study 02
Product Designer (sole designer) · Mobile + Web
Aug 2025 - Present Active
The Problem
Palmstreet ships live plants, reptiles, coins, and jewelry. When I joined, sellers purchased labels one at a time. No safety checks. No insurance. No bulk tools.
The gaps were costly. One antique seller stayed on a competitor because we lacked insurance. During cold seasons, live animals arrived dead: nothing flagged weather risk before shipment.
A competitive audit made the gap concrete: Palmstreet lagged behind Whatnot, eBay, and TikTok Shop on 8 of 11 core fulfillment features.
The Insight
Every gap created downstream trust damage. A missing insurance option lost a seller. A bad weather tag killed a live animal. A wrong fee display eroded buyer confidence mid-stream.
Fix these in isolation and they conflict. Fix them as a system and each piece reinforces the next.
"Shipping was not fifteen separate features. It was one trust chain."
Approach
Layer 1: Detection
Weather Check takes the ship-out date, shipping service, and buyer's ZIP code. Queries forecasted weather along the route. Returns a tag: Safe, Heat Pack, Cold Pack, or Do Not Ship.
Edge cases handled: multiple shipping services with different transit times, incomplete ZIP codes, address changes after the check runs.
Weather Check
Feature preview
Sellers select a batch of orders and run Weather Check. The system queries forecasted weather for each shipping route and tags every order with a verdict: Safe, Heat Pack, Cold Pack, Insulation, or Do Not Ship.
Sellers configure their own thresholds in Settings — min and max safe range, heat-pack zone, insulation zone — so the verdict matches what they ship.
Approach
Layer 2: Policy
Smart Shipping: $7.49 flat rate per 5lb USPS Ground Advantage box. One price. No decision fatigue. Modeled after Whatnot's approach because sellers already understood it.
Insurance: XCover via Shippo at 1.25% of insured value. One antique seller had stayed on PirateShip solely for this. Japan LA flagged it for high-value collectibles.
Approach
Layer 3: Execution
Unified shipping fee rules across LIVE, Purge, and Marketplace. Sellers see one system, not three. Built a priority-based dynamic fee display engine targeting >99% accuracy.
Hold Shipments replaced a seller workaround: ~44 daily orders using $0.50 "Hold Order" items to fake a hold. The real feature uses order-level holds with 90-day max and auto-release.
The System
Every project connects. Weather Check could not exist without Shipment Management. Insurance could not ship without a solid label purchase flow. Hold Shipments only made sense once Weather Check created orders that needed holding.
Impact
"One of the best features Palmstreet has built." — Yufan, PM
Seller Label Creation
Three-tap flow on mobile, single-page on web. Smart defaults pull from order context — carrier, weight, insurance, even weather holds for fragile plants in cold-weather destinations.
Same data model. Different UI surface depending on where the seller is.
Buyer Checkout Transparency
Buyers historically distrusted live commerce shipping fees. Hidden markups eroded conversion. The redesign exposed every line item — weight-tier shipping, optional insurance, platform fee — so buyers could see what they were paying for.
Trust compounded: ship-confidence drove repeat purchases.
Reflection
Execution was the strength. The growth edge was getting upstream earlier — initiating research before anyone asked. That shift started with the next project.
Individual friction compounds: a 2-hour packing run becomes 6+ hours when regressions chain.
Case Study 03
Product Designer (sole designer) · Self-initiated research + PRD
Dec 2025 - Present Active
The Problem
Buyers had no self-service option for address changes after purchase. Each of the 64 weekly tickets required three people: buyer, seller, CS agent.
One aquatics seller purchased three labels in eleven minutes for the same package because a hub-versus-home address conflict was invisible in the label modal. Cost: $600+ in wasted labels.
The Insight
Address changes, cancellations, refund requests, hold requests: they all share the same shape. A buyer initiates. A seller approves. The platform mediates.
Design the underlying grammar once and every future request type becomes a configuration, not a new project.
"The real problem was not 'build an address change flow.' It was: what is the right model for bilateral requests on Palmstreet?"
| Platform | Model | Pro | Con |
|---|---|---|---|
| Shopify | Seller authority | Full control | No buyer flow |
| Etsy | Case system | Mediated | Slow resolution |
| eBay | Time gates | Structured | Rigid windows |
| Whatnot | Auto-approve | Fast for buyers | Chaotic for sellers |
| Poshmark | No support | Simple | No resolution path |
Approach
Competitive Analysis
Five platforms studied: Shopify, Etsy, eBay, Whatnot, Poshmark. Whatnot auto-approves: fast for buyers, chaotic for sellers who may have already purchased a label. Shopify gives sellers full authority but no buyer-facing flow.
eBay uses time gates. Poshmark avoids the problem entirely. My conclusion: approval-based is right for Palmstreet. Sellers are small businesses with real stakes in each shipment.
Approach
The Reusable Pattern
I wrote a full PRD from scratch. Flowcharts, edge case mapping, user stories for both sides, implementation order. Reviewed with three PMs before any design work.
Then I documented the pattern: Request → Pending → Seller Decision → Outcome. Every buyer-to-seller request follows this grammar. Four features share one model: Buyer Change Address, Cancel Order, Refund Order, Hold Shipments.
Key Decisions
Approval-based, not auto-approve. Seller trust is more fragile than buyer trust on a marketplace. Tradeoff: more friction for buyers than Whatnot's model.
One rejection ends the flow. Prevents infinite resubmission loops. Abuse surface too high for a resubmit option in V1.
Label purchase auto-approves. If a seller buys a label using the new address, that action IS the approval. Adding a manual tap after is redundant friction.
Designed as a reusable framework. Engineers build the pattern once. PMs spec new request types without reinventing the model.
Impact
"High quality UX research outputs... set a strong example of what a thoughtful and effective research process looks like." — Yufan, PM
Bilateral Request Flow
The pattern: buyer initiates, seller approves, both confirm. Status carries through every touchpoint. Audit trail for support, no manual ticket.
Same shape applies to cancellations, item swaps, and refunds — that's why it became a reusable framework rather than a one-off feature.
Mobile Seller Hub
Sellers run shops between dayjobs. Approval needs to be one-handed, mid-commute, sub-30-second.
The mobile hub surfaces inbound requests as cards: diff highlighted, approve/decline as primary actions, full context one tap away.
Reflection
This was fully self-initiated. I saw the ticket volume, built the competitive analysis, wrote the PRD, and presented it to three PMs before anyone asked me to.
The pattern abstraction came from writing the PRD, not from designing the UI. Deep problem framing before Figma made the reusable framework obvious.
Case Study 04
Lead Product Designer (Engagement Domain) · Researcher
Oct 2022 - Nov 2023
The Problem
WorkJam's platform had seven content modules, each in its own silo. Admins managing 10,000+ employees juggled Excel, Monday.com, and multiple browser tabs. No single view of what the company was communicating on any given day.
Client interviews across TJX, Target, Woolworth's, Ulta Beauty, and Ross confirmed the same friction everywhere.
The Insight
The problem was not "build a calendar." WorkJam treated content management as seven separate workflows when admins needed one. A calendar was the interface. The real solution was a centralized hub that collapsed seven module workflows into a single operational view.
"A calendar was the interface. The real solution was a centralized hub."
Approach
WorkJam's First Design Sprint
I led a week-long collaborative workshop with product, design, and development. We mapped admin journeys, identified friction points, brainstormed solutions, and prototyped three directions.
Iteration 1: Monthly calendar. Too abstract. Iteration 2: GitHub-style heatmap. Interesting but secondary. Iteration 3: Module-grouped lists. Re-fragmented the view.
Final direction: Modular content tables with daily digest default and switchable views (daily, list, week, month).
What Shipped
Daily digest: Answers "what is happening today?" with actionable cards on first load.
"View as" filter: Admins see content as different user roles see it: store manager, regional lead, frontline employee.
Location picker: Filter by store, region, or department.
Inline content creation: Create surveys, posts, and trainings without leaving the calendar.
Cross-module scheduling: One timeline for all seven content types.
Enterprise Scale
Clients: TJX, Target, Woolworth's, Ulta Beauty, Ross — each managing 10,000+ frontline employees across hundreds of locations.
Two-audience challenge: Admins at HQ need powerful scheduling, role-based previews, and cross-module visibility. Frontline workers need glanceable content on shared devices between tasks. The calendar had to serve both without compromise.
89% voluntary adoption across WorkJam's customer base. The design earned engagement — enterprise software where usage can't be mandated.
Impact
Admin vs Frontline View
Admins get density: switchable views (daily/week/month/list), cross-module timeline, "view as" simulator. Built for sustained planning sessions on desktop.
Frontline workers get a today list. Three cards. Tap to act. Optimized for the 90-second slot between tasks.
Role-Based Filtering
Admins managing 400+ stores need to scope content to specific locations, departments, positions, and certification statuses without leaving the calendar.
The "View as" simulator was the breakthrough — admins could preview the calendar exactly as a Northeast morning-shift store associate would see it.
Reflection
One week of structured collaboration eliminated months of potential misalignment. The Design Sprint taught me more about stakeholder alignment than any feature spec.
The first direction is rarely wrong about everything — it is usually right about one thing. The heatmap was wrong as a primary view but right as a signal that admins wanted density awareness. That insight survived three pivots.
Case Study 05
Product Designer
Jan 2024 - Jun 2024
The Problem
Channels 1.0 was built for one-way announcements. No tagging. No threaded replies. Single image attachments at incorrect sizes. No moderation beyond deleting a post.
Meta Workplace was shutting down. WorkJam's clients needed communication built for people who work on their feet, on shared devices, across 50+ languages.
The Insight
Frontline communication is not Slack for retail. A store associate checking their phone during a break has 90 seconds, not 90 minutes. Every interaction must be completable in under three taps.
The admin who manages 400 stores needs granular targeting, not "post to #general." Speed for end users. Power for admins. Both on the same platform.
"90 seconds, not 90 minutes. Every interaction had to respect that constraint."
Approach
@Mentions
The most requested feature. I designed a dynamic mention dropdown filtered by the channel's Target Audience Engine settings, not the full company directory. Real-time filtering across datasets of 100,000+ users.
Micro-interaction rules from internal testing: dropdown stays active through one space (first + last name), dismisses on second space or Escape, auto-dismisses on zero results. Compliant with labour laws around terminated employee data.
Approach
Threaded Comments
Replaced flat comment streams that devolved into unusable noise at scale. Multi-level threading with infinite scroll pagination for long threads.
Mark-as-answer for resolved questions. Pin posts for persistent visibility. Close post to stop further replies on time-sensitive announcements.
Approach
Rich Text Editor
Eliminated the dependency on Canva and external content creation tools. Admins create branded posts with formatted text, inline media, and scheduled publishing directly inside WorkJam.
Reduced the creation-to-publish cycle for 80%+ of posts. No more context-switching between tools to produce a single announcement.
Approach
Media Attachments
Single attachments render at actual dimensions instead of a fixed crop. Multiple attachments display in a responsive grid with a "+N" indicator when exceeding four items.
Interactive gallery view for full-screen browsing on both mobile and web. Consistent rendering across iOS, Android, and desktop.
Approach
Responsive Web + Native Mobile
Channels 2.0 shipped across responsive web, iOS native, and Android native with full feature parity. Every interaction — @mentions, threading, media, moderation — works identically across all three platforms.
Platform conventions respected: iOS swipe gestures, Android material patterns, desktop keyboard shortcuts. The same employee posts from their laptop at HQ and checks replies on a shared tablet at the store. Experience feels continuous, not duplicated.
Key Decisions
Target Audience filtering for mentions. A mention should only surface people who can see that channel. Searching the full directory exposes names outside the audience scope.
Scheduled posts retain @mentions. Mentions resolve at publish time, not creation time. If a mentioned user leaves before publish, the mention surfaces as invalid with clear feedback. Required for compliance with labour laws around terminated employee data.
Platform-native, not platform-identical. Same features everywhere, but interactions adapt to each OS. iOS swiping, Android back gestures, desktop hover states. Consistency of capability, not of pixels.
Rich Text Editor
The biggest cycle-time win. Channels 1.0 forced admins through Canva, Drive, and back. The new RTE collapsed bold/italic, inline media, mentions, and scheduling into one composer.
80%+ of posts stopped needing external tools. Authoring time dropped from 8+ minutes to under 90 seconds.
Native Mobile Media Upload
Frontline workers compose from their phones during shifts. The mobile RTE had to feel native — iOS share sheet, Android camera intent, gallery picker, and inline image preview without leaving the composer.
Multi-attach with reorder, crop, and delete — all gestures, no nested menus. Optimized for one-handed use on shared devices.
Media Rendering
Channels 1.0 fixed-cropped every image to a square. Detail got lost. Posts felt generic.
The new rendering: single images keep their aspect ratio, 2-3 lay out in responsive grids with one feature image, 4+ collapse the overflow into a "+N" tile that opens a full-screen gallery. Tap any image to enter the lightbox.
Impact
Case Study 06
Product Designer
Jan 2024 - Jun 2024
Context
With core communication features shipped — @mentions, threading, rich text, and media — the next challenge was making Channels work at enterprise scale.
500,000+ frontline employees across TJX, Starbucks, Currys, and Ulta Beauty needed to find content fast, trust moderation, and move seamlessly between devices. The infrastructure had to match the interaction quality.
Approach
Global Search Patterns
Designed cross-channel search that enabled 40% faster content discovery than the single-channel search in Channels 1.0.
Snippet display instead of full post cards — keeps search fast and pushes interaction to the channel context where it belongs. Recent search logic, live search vs. advanced search page distinctions, and content highlighting with deep linking.
These patterns became the global search design guidelines for the entire WorkJam platform, governing search across all modules.
Approach
Moderation Toolkit
Channel-specific permissions for mentions, reactions, and comment management. Admin, owner, and moderator roles with distinct capabilities.
Content flagging and removal without disrupting the conversation flow. Channel owners finally had tools to manage their spaces — the number one gap in Channels 1.0.
Approach
Cross-Platform Parity
Web + iOS + Android with dark and light mode. @mentions work identically everywhere. Dropdown positioning and dismiss gestures adapt to each platform's conventions.
The same person might post from a desktop in the morning and check replies on a shared tablet during lunch. The experience must feel continuous, not duplicated.
Approach
Target Audience Engine
The foundation powering mentions, moderation, and content targeting. Managers segment audiences in under one minute using filters: Location, Department, Position, Certification status, and real-time shift information.
Precision targeting reduces information overload — the key UX challenge for frontline platforms serving 10,000+ employees.
Two-Audience Design
Frontline workers have 90 seconds between tasks. Every interaction must complete in under three taps. Shared devices. Variable connectivity. 50+ languages. The interface has to earn usage — it can't be mandated.
Enterprise admins manage 400+ stores. They need granular targeting, compliance controls, moderation at scale, and analytics. Power features that don't leak complexity to the frontline.
The defining challenge: instinct is to default to the admin (they're the buyer). But if frontline workers don't use it, the admin's investment fails. Both audiences designed for simultaneously, not sequentially.
Compliance & Enterprise Scale
Labour law compliance: Terminated employee data cleared from mention dropdowns. On-premise content restrictions. Mandatory acknowledgments with read receipts. HIPAA-ready for healthcare clients.
89% voluntary adoption across WorkJam's customer base. Enterprise software where design quality drives adoption, not mandate.
Clients at scale: TJX, Starbucks, Currys, Ulta Beauty — each with 10,000+ frontline employees across hundreds of locations, multiple time zones, and diverse regulatory environments.
Impact
Frontline Search vs Admin Search
Same search engine. Two surfaces.
Frontline gets recent searches scoped to their role — three taps, no filters, no syntax. Admins get tabs, content-type pills, date ranges, channel scoping, and cross-channel cursor pagination. Power users get power; everyone else gets speed.
Reflection
Designing for frontline workers requires rethinking every interaction through a time-pressure lens. A desk worker explores a dropdown for 10 seconds; a store associate on break cannot.
Cross-platform design isn't "make it work on three screens." It's understanding the same person uses multiple devices throughout their day. The experience must feel continuous, not duplicated.
The search patterns I established for Channels became the standard across all WorkJam modules — the strongest signal that infrastructure-level design thinking outlasts any single feature.