Skip to content
All case studies
B2B Marketplace April 2026 United States

Client: Lattice Trades

How Lattice Trades shipped a two-sided B2B marketplace in 13 weeks and processed $1.2M GMV in 9 months

A two-sided marketplace connecting commercial contractors with specialty trades — escrow, Stripe Connect, search, reviews, dispute resolution — shipped fixed-price in 13 weeks with senior engineers from kickoff to $1.2M GMV.

13 weeks

Kickoff to public launch

$48k

Fixed-price engagement

$1.2M

GMV in first 9 months

2,400+

Verified tradespeople on day 60

Services delivered

Tech stack

Next.js 14React 19PostgreSQLPrismaStripe ConnectAlgoliaResend

The brief

Lattice Trades is a US-based B2B marketplace founder team who saw a gap: commercial general contractors needed reliable specialty trades (electricians, HVAC, plumbing, low-voltage, glaziers) for short-burst commercial projects — and the existing options (cold email, Yelp, local trade associations) were all broken. The founders had domain expertise but no engineering team and a hard 12-week runway before they ran out of pre-seed cash.

Two-sided marketplaces are hard. Cold-start two-sided marketplaces with escrow, payments, search, reviews, and disputes are very hard. They needed a senior web development team that could ship a real product — not a prototype — fast.

The constraints

  • Two-sided UX: different flows for contractors (post jobs) and tradespeople (apply, get hired)
  • Escrow payments: money held until job approval, with Stripe Connect for splits and payouts
  • Discovery + matching: contractors find the right tradespeople fast — by location, skill, availability, ratings
  • Verification: tradesperson licenses, insurance, business registration verified before they can bid
  • Dispute resolution: a real workflow with escalation paths and admin tooling
  • Mobile-first: tradespeople run their businesses on phones, not laptops
  • 13-week deadline: tied to their seed-round close

The architecture

Marketplaces look simple from the surface and aren't. The architecture made or broke this engagement. We picked tools we'd shipped 30+ times before.

  • Framework: Next.js 14 App Router (TS, RSC, server actions)
  • Auth: Clerk with role-based access (contractor, tradesperson, admin)
  • DB: Postgres on Neon, Prisma ORM, schema-per-role for clean access patterns
  • Payments: Stripe Connect Express accounts for tradespeople, Stripe Issuing for escrow
  • Search: Algolia — geo-search + skill faceting + availability filters
  • Email: Resend with React Email templates
  • File uploads: UploadThing for licenses, COI, project photos
  • Verification: Persona for ID + business verification
  • Mobile: Responsive web first; React Native app deferred to v1.1 (3 months later)

The Stripe Connect decision

The biggest call: how to handle marketplace payments. Three options:

  1. Stripe Connect Standard: tradespeople create their own Stripe accounts — most flexible, worst UX
  2. Stripe Connect Express: Lattice-branded sign-up, hosted onboarding — middle ground
  3. Stripe Connect Custom: fully white-label — best UX, most regulatory burden

We picked Express. 5-minute onboarding for tradespeople (vs 30+ minutes for Standard), Lattice-branded experience (vs Stripe-branded for Standard), and no PCI / money transmitter licensing exposure that Custom requires. Six months later this decision is paying off — Lattice is doing $1.2M in GMV with zero regulatory friction.

The escrow flow we designed

Contractor posts job ($X budget)
        │
        ▼
   Contractor funds escrow on job acceptance
   (charge stays on contractor card, marked held)
        │
        ▼
   Tradesperson does work, marks complete
        │
        ▼
   Contractor reviews → approves OR disputes
        │
        ├── Approves → Stripe transfers funds to tradesperson minus 8% fee
        │
        └── Disputes → Admin workflow, evidence upload, mediated resolution

Average time from approval to tradesperson payout: 24 hours. Dispute rate across 9 months: 1.3%. Of disputes, ~70% resolve in tradesperson's favor (we're strict on contractor proof-of-cause for chargebacks).

The 13-week timeline

Total: $48,000 fixed-price, 13 weeks from kickoff to public launch. Phases:

  • Weeks 1–2: Discovery, wireframes, data model, Stripe Connect architecture signed off
  • Weeks 3–5: Contractor side — auth, post-job flow, browse tradespeople, messaging
  • Weeks 6–8: Tradesperson side — onboarding (Stripe Connect + Persona verification), bid flow, profile, portfolio
  • Weeks 9–10: Payments — escrow funding, hold, release, dispute workflow, admin tooling
  • Week 11: Algolia search, ratings/reviews, email notifications
  • Week 12: QA, security review, load test (we simulated 10,000 concurrent users on a CCV-trial weekend)
  • Week 13: Launch to 200 pre-seeded contractors and 80 verified tradespeople (warm cold-start)

Solving the cold-start problem

The biggest non-engineering challenge: chickens before eggs. Lattice handled the GTM side themselves, but we made two technical decisions that helped:

  1. Auto-bid notifications — when a tradesperson's skill + location matched a posted job, they got a push notification (later, an SMS in v1.1). This kept tradespeople engaged even before there was a critical mass.
  2. Admin-side "seed bids" — for the first 90 days, admins could surface pre-vetted tradespeople on new jobs even if they hadn't bid yet. Manual labor that built liquidity until the marketplace was self-sustaining.

The results — 9 months post-launch

  • $1.2M total GMV processed through the platform
  • 2,400+ verified tradespeople active on the platform by day 60
  • 740 commercial contractors with at least one completed job
  • Average job value: $1,840 (well above the $400+ B2B-marketplace threshold)
  • Lattice take rate: 8% of GMV = ~$96k revenue in 9 months
  • Seed-round closed: on time, on the strength of the launch traction
We came in with a deck and walked out with a marketplace doing real GMV. Paisol shipped what 3 other agencies told us was a 6-month build — in 13 weeks, fixed price, no overruns. We'd hire them again on day 1 of any company we start.

— Founder, Lattice Trades

What we'd do differently next time

  1. Ship the mobile app earlier. Web-first was the right call for the deadline, but tradespeople genuinely live on phones — the v1.1 mobile app drove a 28% engagement lift. Next time we'd phase it into the original engagement at a slightly later go-live date.
  2. Algolia from week 1, not week 11. We hand-rolled basic search initially and replaced with Algolia late. Should have been Algolia from the start — would have saved 5 days.
  3. Persona verification at first bid, not signup. Tradespeople bounced when verification was at signup. Moving it to first-bid (still required before payment) cut signup-to-activation time by 62%.

Numbers

  • Build cost: $48,000 (fixed)
  • Year-1 infrastructure (Vercel + Neon + Algolia + Persona + Stripe): ~$22,000
  • Maintenance retainer (months 1–9): $4,500/mo = $40,500
  • Total year-1 spend with Paisol: ~$110,500
  • Lattice revenue (9 months): ~$96,000
  • Lattice GMV (9 months): $1.2M
  • Seed-round closed on the strength of the live marketplace

Want a marketplace shipped like this?

Book a free 30-minute strategy call. We'll scope your marketplace MVP, quote a fixed price, and have a contract in your inbox within 48 hours. Run your numbers through our MVP Cost Calculator first if you want a budget number before the call. Or read more about our web development service, or read the related guide: What does a SaaS MVP cost in 2026.

Want results like Lattice Trades?

Book a free 30-minute strategy call.

No pitch. Walk away with a clear scope, a fixed-price quote, and a 90-day delivery date — even if you don't hire us.

Book My Strategy Call