← Timeline
Product engineering & design

Rebuilding Laibl into an AI sourcing engine

A sourcing platform where a brand describes what it needs in plain language and gets matched to suppliers who can make it.

When
2025–2026
Where
Laibl
What I did
Product design, Brand and design system, Full-stack engineering, AI agent development, Technical leadership

Outcomes

Context

I co-founded Laibl in April 2025 and led design and frontend engineering for its consumer packaged goods (CPG) sourcing platform. In November 2025 I took over technical direction alongside a winter contract developer, and from January 2026 I ran all 39 production releases solo across Next.js, TypeScript, Django, Postgres, and LangGraph.

A long intake form

Sourcing started with a long technical spec form, and buyers dropped off before submitting it.

The wrong brand for CPG

A casual, purple beauty-industry brand didn't earn the trust of CPG buyers and manufacturers.

Manual operations

Getting from a brief to a matched shortlist took four days of team coordination, and adding suppliers meant a developer running a local CLI script for hours.

No funnel data

Nothing in the product was instrumented, so nobody could see where buyers stalled.

One system across four surfaces

I rebuilt the brand and UI from the ground up, designing the system in Figma and coding it in Next.js, Tailwind, and React Email.

Instead of a single brand color, I built full tonal ramps (100 to 900, checked for WCAG AA contrast) and separate type scales for marketing pages and dense app tables. Moving transactional emails from hand-coded HTML to shared React Email components gave us type safety and UTM attribution on every match notification and quote request.

Turning a form into a conversation

During Techstars in fall 2025, weekly user tests showed that buyers arrived with a rough paragraph or a wish list, not a packaging spec. I designed and built the AI Sourcing Concierge (see it in action). The buyer chats in plain language, the agent asks follow-up questions, and a structured, editable sourcing request fills in beside the conversation. Buyers completed a brief in under a minute, and shortlist turnaround fell from 4 days to minutes.

An onboarding step that moved on too early

We replaced a 15-minute supplier signup form with a URL that auto-filled the company details in about 10 seconds. A Zustand store duplicated React Query's organization cache, so each loading change re-rendered 27 components and moved the wizard forward before enrichment returned. Deleting the Zustand copy and reading straight from the React Query cache fixed both problems.

A follow-up question that wiped the shortlist

In early tests, typing a question after matches appeared started a brand-new search. I reworked the LangGraph routing to classify post-match turns as an update, a question, or a new search. Existing matches stayed put, and the agent stopped re-asking questions.

A late AI response that undid a click

The agent and the UI buttons both wrote to the same status field. I split it into two state machines, with the graph owning conversation state and the UI owning deal stage, and the conflict went away.

A buyer coming back to a reset chat

Checkpointing the graph to Postgres after every turn let a buyer close the tab on Tuesday and pick up where they left off on Friday. PostHog events across the frontend, backend, and LLM turns showed the exact turn where a conversation stalled.

Explainable matches, collaboration, and monetization

Each match showed why the supplier was picked: specialties, certifications, location, and contact status. Buyers could also name a supplier directly, and nearby suppliers got a boost.

Selected suppliers moved into threads tied to the request, so quotes, dielines, and specs stayed with the brief instead of scattering across email.

On the supply side, I built Stripe subscription tiers ($5K MRR) with idempotent webhook handling. Paid plans got priority inbox placement, a higher directory sort, and a match-score boost that suppliers could see broken down.

Self-serve supplier intake and discovery

Once buyer demand was steady, supply became the bottleneck. I replaced a developer-only Prefect CLI script that took hours with a self-serve admin batch tool any operator could run in under 30 minutes.

A separate six-stage pipeline crawls the supplier's site (Playwright and Crawl4AI), pulls external registry data (Perplexity), reconciles conflicts against the verified business identity (Gemini Flash), and normalizes logos, emails, tags, and ISO locations. Operators compare the original and proposed data side by side, with source evidence, before publishing.

To bring buyers in from search, I moved supplier URLs to slugs and built server-rendered category and location pages with JSON-LD. Each page listed ranked suppliers, a regional breakdown, and a prompt to start a sourcing request.

Final notes

I started out leading design and ended up building and shipping the product end to end, across 39 solo releases and over $4M in sourcing volume.

Two things let one person keep shipping on all four surfaces. The first was a shared system across Figma, Next.js, React Email, and Django. The second was agentic coding with clear project rules, spec-driven development, and an AI PR review on every change.

What I'd change is how quickly we tested the business model. We spent too long on pricing, including pausing our $5K MRR in supplier subscriptions to try a commission model. Faster experiments would have shown us sooner that the better path was partnering with networks that already connect brands and suppliers, such as the Canadian Food Innovation Network (CFIN), and white-labeling our sourcing technology for them.