Skip to content
All work

Marketplace

Anvil

A marketplace for skilled labor: post a job once, verified pros bid, compare on value, hire.

Hiring a tradesperson usually means chasing leads and guessing who to trust. Anvil turns that around.

A customer describes the job once. Pros who have been verified by hand bid on it, and bids are compared on value (warranty, timeline, track record) rather than price alone. Jobs are matched to pros by trade and location.

Status
Live product with a public site, under the Harbr name.
Stack
Next.js, React, TypeScript, Convex, Clerk, Tailwind, Zod, Vitest, Playwright

Why it exists

Customers chase quotes, wait on slow estimates and can't tell who's reputable. Pros pay for dead-end leads, quote for free and get pulled into bidding wars that wear down their rates.

Anvil puts a person between the two. Someone reviews every job and every pro, so customers hear from people who've been checked and pros quote on work that's been read.

The public site lists it as live in Queens and Nassau County, with handyman work, appliance repair, mobile mechanics, TV mounting, PC building and small installations.

Try it

Bids arrive on a price line; the strongest value is explained, not scored. This is a faithful demo built for this site with fictional data, not the product itself.

Bid exchange · Faithful demo · fictional data

One run through it

  1. Post the brief

    The customer posts a category, the details, a ZIP code and a timeline.

  2. A person reads it

    Someone on the team reviews each brief. A vague one gets questions back, and the customer edits and resubmits.

  3. Verified pros quote

    Pros send a fixed price, a timeline and an optional warranty without seeing the customer's address or contact details. Rival bids show up as Pro #2 or Pro #3.

  4. Compare on value

    Quotes line up side by side with the best value first and the lowest price one tap away.

  5. Hold to hire

    The customer holds to hire. Contact details unlock, and the work and payment happen directly between the two of them.

  6. Proof and reviews

    The pro uploads before-and-after photos, the customer confirms, and both leave public reviews tied to the finished job.

What it does

  • One job, many bids

    Draft, review, open for bids, hired, in progress, complete. An admin approves every job before pros see it.

  • Verification first

    License, insurance and ID are checked by hand. Only verified pros see the board or bid.

  • Anonymous rivals

    Pros see competing bids as Pro #2 or Pro #3: amounts and timelines, never names.

  • Best value by default

    Bids sort by verification, then warranty, then speed, then price. Lowest price is always one tap away.

  • Hold to hire

    Hiring is a deliberate hold, and contact details unlock for both sides only after it.

  • After the hire

    Messaging, before-and-after photo proof, and two-sided reviews.

Why it's built this way

  • People check everything

    Every job and every pro gets a human review. A lead site sells the lead and walks away; this one checks who's on it first.

  • New pros start clean

    A new pro shows "New, building reputation" instead of an average, so one harsh early review can't define them and nobody gets a made-up default rating.

  • Reasons instead of scores

    The strongest bid comes with the reasons it leads, written out. Warranty, timeline and price stay visible as a trade-off.

  • History can't be rewritten

    The server rejects illegal status changes and logs every change, so a job's record can't be quietly edited.

How it fits together

  1. 01Next.js and Convex, with deny-by-default permissions checked on the server for every read and write.
  2. 02One source of truth for job and bid states; validators are derived from it.
  3. 03Developed with a parallel agent orchestrator, each agent on its own worktree and deployment.

In plain terms

Brief
The site's word for a job post.
Fixed quote
A set price for the whole job, which is what pros bid.
Neutral venue
The platform connects customer and pro without being a party to the job.
Deny by default
Access fails unless both the user's role and their ownership of the record check out.