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
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:
- Stripe Connect Standard: tradespeople create their own Stripe accounts — most flexible, worst UX
- Stripe Connect Express: Lattice-branded sign-up, hosted onboarding — middle ground
- 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 resolutionAverage 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:
- 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.
- 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
- 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.
- 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.
- 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 CallMore case studies
Wealth Management
6 weeks → 4 days
compliance reporting cycle reduced by 95%
How Helios Wealth cut their compliance reporting cycle from 6 weeks to 4 days
Read case studyE-commerce SaaS
$1.8M
annual revenue line from a new premium analytics tier
