Marketplace Feed
9:41
Job Board
All
Nearby
New
My Skills
JM
Kitchen Remodel — Full Gut
RemodelingPrecise Bids
Akron, OH • 4.2 mi
$12,000 – $18,000 2h ago
+3
View Details
SH
Roof Repair — Storm Damage
RoofingUrgent
Cuyahoga Falls, OH • 7.8 mi
$3,200 – $4,800 5h ago
View Details
TP
Bathroom Tile — Master Bath
TilingRange OK
Hudson, OH • 12.1 mi
$2,500 – $3,500 1d ago
View Details

ListingFilterBar, ListingCard

useQuery(api.marketplace.queries.list) • FlatList

Marketplace — Empty
9:41
Job Board
All
Nearby
New
My Skills
No Jobs in Your Area Try expanding your service radius, adding more skill categories, or enabling push notifications.
Expand service radius
Add more service categories
Enable job notifications
Update Preferences

EmptyState with IconCircle hero

Shown when listingsData.items.length === 0

Job Detail
9:41
RemodelingPrecise Bids
Kitchen Remodel — Full Gut $12,000 – $18,000
JM
James Mitchell
4.8 • 12 jobs
Description Complete kitchen gut and remodel including new cabinets, countertops, backsplash, and flooring. Existing kitchen is 12x14 with peninsula. Prefer quartz countertops and soft-close cabinets. Requirements
Licensed & insured
5+ years kitchen remodel experience
Portfolio of completed kitchens
Akron, OH 44313

ListingDetailScreen, ImageGallery

useQuery(api.marketplace.queries.get) • useQuery(api.jobs.jobs.get)


Create Bid — Pricing
9:41
Submit Bid
Bidding on Kitchen Remodel — Full Gut
Akron, OH
Budget: $15,000
1/3 bids submitted PRECISE
Bid Type
Range
Precise
Exact price — required for bid acceptance
Bid Amount
$ 14,500
Platform fee (8.5%)-$1,232.50
You'll receive$13,267.50
Estimated Timeline
30
days
What's Included
Materials included in price
Permits included (if required)

CreateBid — pricing section

bidType toggle (precise|range) • PLATFORM_FEE_RATE = 0.085

Create Bid — Proposal
9:41
Submit Bid
Proposal Details *
I have 12 years of kitchen remodeling experience with over 40 completed projects in the Akron area. My approach includes a full site assessment, 3D design mockup, and weekly progress updates. Price includes demolition, custom cabinetry, quartz countertops, tile backsplash, and LVP flooring. All work backed by a 2-year warranty.
342/1000 characters
Attach Portfolio Work2 selected
Highlight Certifications
Licensed General Contractor
EPA Lead-Safe Certified
OSHA 30 Certified
Bid Summary
Bid typePRECISE
Your bid$14,500
Timeline30 days
You'll receive$13,267.50

CreateBid — proposal section

bidExplanation, materialsBreakdown, portfolio attachments

Bid Preview
9:41
Preview Your Bid
This is how the homeowner will see your bid
MB
Mike's Building Co.
4.9
• 47 reviews Verified
Bid Amount $14,500 Precise Bid
Timeline30 days
MaterialsIncluded
PermitsNot included

Proposal I have 12 years of kitchen remodeling experience with over 40 completed projects in the Akron area. Price includes demolition, custom cabinetry, quartz countertops, tile backsplash, and LVP flooring.
Licensed General Contractor
EPA Lead-Safe Certified

BidPreviewCard — poster POV

Final review before submitBid mutation fires


My Bids — Active
9:41
My Bids
Active
Won
Lost
Kitchen Remodel — Full Gut Pending
$14,500 3d ago
Not yet viewed
Roof Repair — Storm Damage Viewed
$4,200 5d ago
Viewed 2h ago
Deck Build — Composite Shortlisted
$8,900 7d ago
Poster is comparing top bids
Basement Waterproofing Pending
$6,000 – $9,000 RANGE
1d ago
Not yet viewed

MyBidsScreen with tab navigation

useQuery(api.jobs.bids.listMyBids) • status: pending|accepted|rejected

Bid Detail — Shortlisted
9:41
Bid Details
You've Been Shortlisted! The homeowner is reviewing their top bids. Stand by for a decision.
Job Deck Build — Composite
Stow, OH
Your Bid
Amount$8,900
Timeline14 days
MaterialsIncluded
StatusShortlisted
JM
Message from James
Hi Mike, your proposal looks great. Could you share more details about the composite decking brand you use? I'd love to see some photos of similar projects. 2 hours ago

BidDetailScreen — shortlisted state

useQuery(api.jobs.bids.get) • posterViewedAt set

Bid Detail — Won
9:41
Congratulations!
BID ACCEPTED! Your expertise has been selected for this project
Kitchen Remodel — Full Gut Akron, OH

ClientJames Mitchell
Winning Bid$14,500
EscrowAwaiting Payment
Timeline30 days
What's Next
1
Sign the contractReview and sign the project agreement
2
Wait for escrow fundingHomeowner will fund the escrow account
3
Schedule the workCoordinate timing and property access
4
Complete and get paid40% after hold, 60% on completion
Earnings Projection
Your Bid$14,500
Platform Fee (8.5%)-$1,233

Your Payout$13,268
1st (40% after hold)$5,307
2nd (60% on completion)$7,961
40% released after 24-hour hold, 60% upon job completion

BidWonScreen with confetti animation

useQuery(api.jobs.jobs.get) • useQuery(api.jobs.bids.get) • PLATFORM_FEE_RATE

Bid Detail — Lost
9:41
Bid Details
Not Selected The homeowner chose another contractor for this project.
Roof Repair — Storm Damage Cuyahoga Falls, OH

Your bid$4,200
Winning bid range$3,500 – $4,000
Total bids3
DecisionNot Selected
Homeowner Feedback
“Great proposal, but we went with a contractor who had more recent storm damage repair experience in our neighborhood. Would consider for future projects.”
Improve Next Time
Price competitivelyYour bid was $200–$700 above the winning range
Showcase relevant workAdd storm damage projects to your portfolio
Respond fasterFirst viewed same day — try submitting within 2 hours
Bid Timeline
SubmittedFeb 17, 2026
First viewedFeb 17, 2026
Decision dateFeb 21, 2026

BidDetailScreen — rejected state with AI-generated improvement tips

bid.status === "rejected" • rejectionReason from poster • useQuery(api.jobs.bids.getComparisonInsights)


Marketplace & Job Detail
9:41
Marketplace & Job Detail
Items
Item Alpha
Updated 2h ago
Active
Item Beta
Updated 5h ago
Pending
Item Gamma
Updated 1d ago
Review
Preview
Project Preview
Detailed view with all project information, photos, and metadata.
Media
Drag & drop or tap to upload
Tools
Share your profile or scan to preview
Bid Builder & Preview
9:41
Bid Builder & Preview
Items
Item Alpha
Updated 2h ago
Active
Item Beta
Updated 5h ago
Pending
Item Gamma
Updated 1d ago
Review
Details
Title
Sample entry
Description
Enter description...
Configuration
Option A
Option B
Option C
Preview
Project Preview
Detailed view with all project information, photos, and metadata.
Bid Management & Outcomes
9:41
Bid Management & Outcomes
Items
Item Alpha
Updated 2h ago
Active
Item Beta
Updated 5h ago
Pending
Item Gamma
Updated 1d ago
Review
Items
Item Alpha
Updated 2h ago
Active
Item Beta
Updated 5h ago
Pending
Item Gamma
Updated 1d ago
Review
Preview
Project Preview
Detailed view with all project information, photos, and metadata.
Bid Workspace
https://app.3bids.io/contractor/bids
3Bids
Marketplace ⌘1
Create Bid ⌘2
My Bids ⌘3
Won ⌘4
History ⌘5
MK
Mike Kowalski
Contractor
Settings ⌘,

Bid Workspace

1,247
Total
+23%
Growth
89%
Rate
$42K
Revenue
Recent Activity
Item updated
2 minutes ago
Task completed
15 minutes ago
New notification
1 hour ago
Performance
Bid Portfolio
https://app.3bids.io/contractor/bids
3Bids
Marketplace ⌘1
Create Bid ⌘2
My Bids ⌘3
Won ⌘4
History ⌘5
MK
Mike Kowalski
Contractor
Settings ⌘,

Bid Portfolio

1,247
Total
+23%
Growth
89%
Rate
$42K
Revenue
Recent Activity
Item updated
2 minutes ago
Task completed
15 minutes ago
New notification
1 hour ago
Performance

Data Architecture

Schema: jobs

posterId: Id<posterUsers>
contractorId: Id<contractorUsers> // optional
title: string
status: draft | open | pending_contract | ...
bidCount: number
maxBids: number
bidMode: "precise" | "range"
jobDetails: { budget, photos, timeline, ... }
city / state / zipCode: string

Schema: jobBids

jobId: Id<jobs>
contractorId: Id<contractorUsers>
bidType: "precise" | "range"
bidAmount: number
bidMinAmount / bidMaxAmount: number?
bidExplanation: string
estimatedDays: number?
includesPermits / includesMaterials: boolean
status: pending | accepted | rejected | withdrawn
posterViewedAt: number?

Hooks & Queries

// Discovery
useQuery(api.marketplace.queries.list)
useQuery(api.marketplace.queries.get)
useQuery(api.jobs.jobs.get)

// Bidding
useQuery(api.jobs.bids.listMyBids)
useQuery(api.jobs.bids.get)
useMutation(api.jobs.bids.submit)
useMutation(api.jobs.bids.withdraw)

Mutations

// bids.submit args:
jobId: Id<jobs>
bidType: "precise" | "range"
bidAmount: number? // precise
bidMinAmount / bidMaxAmount: number? // range
bidExplanation: string
estimatedDays: number?
includesPermits: boolean?
includesMaterials: boolean?
revisedFromBidId: Id<jobBids>?
idempotencyKey: string?