1 Capture
2 Organize
3 Review
4 Submit
Camera Viewfinder
9:41
Bulk Capture
7
Gallery
2
New Job

CameraView component. useMassCapture().addPhoto(uri) on capture, startNewJobGroup() to begin a new job.

Gallery Import
9:41
Select Photos 5 selected
Recents Albums

GalleryPicker multi-select. useMassCapture().addPhoto() called per selected image. Count badge updates live.

Photo Grouping
9:42
Organize Photos
12 photos
3 jobs
Job 1 (5)
Job 2 (4)
Job 3 (3)
Job 1
5 photos
Merge with another job
Tap the scissors icon between photos to split into a new job

PhotoGrid component. useMassCapture().splitGroupAtPhoto(id) on scissor tap, removePhoto(id) on delete.

AI Processing
9:43
Review & Submit
Detecting job types... (2/3)
Job 1
Detected
Bathroom Remodel
Home Renovation
92%
Detected Items
Shower Toilet Vanity Tile Floor
Job 2
Analyzing...
Job 3
Waiting
Pending detection...
3 photos queued

MassReviewScreen with detection overlay. useJobTypeDetection().detectForGroups() runs on mount, onProgress/onResult callbacks update each card.

Overview
9:44
Review & Submit
Capture
Organize
3
Review
4
Submit
Jobs to Submit
3 jobs ready for review
Property Location
My Home
1234 Oak Ave, Akron, OH 44313
Job 1
+2
Bathroom Remodel
92%
Detected shower fixtures, tile work, and vanity replacement in uploaded photos.
Title*
Bathroom renovation needed
5 photos
Kitchen Repair
4 photos 87%
Roof Inspection
3 photos 63%

JobReviewCard list. Expand/collapse per card. updateReviewCard(id, {...}) for title/description edits.

Job Detail Edit
9:44
Edit Job 1
Bathroom Remodel
92%
Detected shower fixtures, tile work, and vanity replacement in uploaded photos.
Title*
29/100
Description*
156/500
Category
Home Renovation
Auto-assigned by AI
Property
My Home
1234 Oak Ave, Akron, OH 44313
Urgent
Prioritize this job for faster bids

JobReviewCard expanded. onTitleChange, onDescriptionChange, onJobTypePress callbacks. JobTypeSelector modal on type tap.

Confirmation
9:45
Confirm & Post
Ready to Post
3 jobs at 1 property
12 photos
Akron, OH
Jobs
Bathroom Remodel
5 photos · Home Renovation
92%
Kitchen Repair
4 photos · Kitchen Services
87%
Roof Inspection
3 photos · Roofing
63%
Expected Bid Timeline
Most jobs receive their first bid within 24 hours. You'll get up to 3 competitive bids from verified local contractors.
I confirm these job descriptions are accurate and agree to the Terms of Service and Privacy Policy.

MassReviewScreen confirmation state. handleSubmit(true) for post, handleSubmit(false) for drafts. validateCards() checks titles, descriptions, job types.

Success / Progress
9:46
Posting Jobs
All Jobs Posted!
3 jobs have been posted. Contractors in your area will start bidding soon.
Bathroom Remodel
Posted successfully
Live
Kitchen Repair
Posted successfully
Live
Roof Inspection
Posted successfully
Live
Share with neighbors

MassReviewScreen success state. createJobBatch result.successCount === result.totalCount triggers clearSession() and router.replace("/(poster)/jobs").

Camera & Photo Selection
9:41

Mass Capture

Gallery7
New Job2
Recents Albums
5 photos selected

Photo Groups & AI Job Detection
9:41

Organize Photos

Photo Groups (3)
New Group
Group 1 3 photos
Group 2 2 photos
Group 3 2 photos
AI Detection Results
Plumbing Repair
94%
Detected leaking pipe joint and corroded fitting. Recommend licensed plumber.
Interior Painting
87%
Wall damage and peeling paint detected. Suggest drywall repair before painting.
Electrical Work
72%
Exposed wiring and outdated outlet. Licensed electrician recommended.
AI Detection
Gemini 3 Flash analyzes your photos to identify job types. You can change the detected type before submitting.

Job Review & Batch Submit
9:41

Review Jobs

Jobs to Submit (3)
Select All
Plumbing Repair
3 photos · AI detected
Interior Painting
2 photos · AI detected
Electrical Work
2 photos · AI detected
Submission Details
1847 Brookfield Dr
Akron, OH 44313
Total Jobs3
Total Photos7
AI Detected3 of 3
Property1847 Brookfield Dr
Publish Immediately
Jobs go live after submission
I confirm that the job details and photos are accurate and ready for contractor bids.
Bulk Photo Upload & AI Detection
https://app.3bids.io/jobs/mass-create

Mass Job Creator

7 Photos 3 Jobs Detected
Photos
7
Groups
3
AI Detected
3/3
Property
1847 Brookfield
Photo Groups
Plumbing Repair
3 photos · 94% confidence
Detected
Interior Painting
2 photos · 87% confidence
Detected
Electrical Work
2 photos · 72% confidence
Review
Review & Submit
Job
Photos
Confidence
Plumbing Repair
Leaking pipe, corroded fitting
3
94%
Interior Painting
Wall damage, peeling paint
2
87%
Electrical Work
Exposed wiring, outdated outlet
2
72%
1847 Brookfield Dr
Akron, OH 44313
Mass Job Creator
Upload photos of multiple projects at once. AI groups and identifies job types automatically. Review, edit, and batch submit to start receiving bids.

Batch Submission Success
https://app.3bids.io/jobs/mass-create/success

Jobs Submitted

3 of 3 Created
All Jobs Submitted Successfully
Your 3 jobs are now live. Contractors in your area will start submitting bids shortly.
Jobs Created
3
Photos Uploaded
7
Property
1847 Brookfield Dr
Plumbing Repair
3 photos · Published
Live
Interior Painting
2 photos · Published
Live
Electrical Work
2 photos · Published
Live

Data Architecture

Schema Tables

jobs — title, description, jobTypeId, status, propertyId, photos[], aiGenerated, isUrgent
jobPhotos — jobId, storageId, localUri, width, height, order, groupIndex
posterProperties — nickname, address, city, state, zipCode, posterId
jobTypes — name, categoryName, keywords[], icon, isActive

Hooks & State

useMassCapture() — session state, addPhoto, startNewJobGroup, splitGroupAtPhoto, removePhoto, finishCapture, finishOrganizing, updateReviewCard, setDetectionResult, setAddress, setPropertyId, clearSession, goBack
useJobTypeDetection() — detectForGroups, progress, isDetecting, getAllJobTypes. Callbacks: onProgress, onResult, onError
useToast() — showToast({ message, type }) for validation errors, success, warnings

Convex Mutations & Queries

poster.jobs.createJobBatch — propertyId?, address, city, state, zipCode, jobs[{title, description, jobTypeId, photos[], aiGenerated}], publishImmediately
poster.properties.list — Returns all poster properties for property picker
AI Detection — Gemini 3 Flash analyzes photos per group. Returns jobTypeId, jobTypeName, confidence, reasoning, alternatives[], suggestedTitle, suggestedDescription
AsyncStorage — Session state persisted locally via useMassCapture hook. Survives app restart until clearSession()