Recurring Services List Live
app/(poster)/recurring/index.tsx — listForPoster + listUpcomingForPoster queries, SegmentedControl filter (Active/Paused/All)
9:41
Recurring Services
Upcoming Services
3
Apr
Lawn Care Weekly
Garcia Landscaping
8:00 AM – 10:00 AM
Confirmed
5
Apr
Pool Cleaning
Blue Wave Pools
Scheduled
10
Apr
Lawn Care Weekly
Garcia Landscaping
Scheduled
Active
Paused
All
TG
Lawn Care Weekly
Garcia Landscaping
Active
Weekly
$85.00/visit
12 completed
Next visit: 4/3/2026
BW
Pool Cleaning
Blue Wave Pools
Active
Every 2 weeks
$120.00/visit
6 completed
Next visit: 4/5/2026
SC
House Cleaning
Sparkle Clean Co.
Active
Monthly
$200.00/visit
3 completed

Agreement Detail — Active Live
app/(poster)/recurring/[id]/index.tsx — agreements.get query, contractor info, service details grid, upcoming/recent instances, pause/cancel actions
9:41
Lawn Care Weekly
Active
TG
Garcia Landscaping
Tom Garcia
Service Details
Frequency
Weekly on Thursdays
Price per visit
$85.00
Property
123 Oak Street, Phoenix, AZ 85001
Started
1/15/2026
Completed visits
12
Total paid
$1,020.00
Upcoming Visits
3 scheduled
3
Apr
Thursday
8:00 AM – 10:00 AM
10
Apr
Thursday
8:00 AM – 10:00 AM
17
Apr
Thursday
8:00 AM – 10:00 AM
Recent Visits
View All
27
Mar
Thursday
3 photos
20
Mar
Thursday
2 photos

Service Visit — Scheduled Live
app/(poster)/recurring/instance/[id].tsx — instances.get query, visit header with status badge, schedule card, payment card, skip action
9:41
Service Visit
Lawn Care Weekly
Scheduled
Visit #13
Schedule
Thursday, April 3, 2026
8:00 AM
Payment
Amount $85.00
Payment Status Pending

Service History Live
app/(poster)/recurring/[id]/history.tsx — Coming soon stub with time-outline icon, description, go-back button
9:41
Service History
Service History
Complete visit history for this recurring service is under development. You will be able to view all past visits, completion photos, and service notes.

Empty State — No Services Live
app/(poster)/recurring/index.tsx — EmptyState component when agreements.items.length === 0, links to /(poster)/jobs/create
9:41
Recurring Services
Active
Paused
All
No Recurring Services
Set up recurring services for regular maintenance like lawn care, cleaning, or pool service. Request a recurring bid when creating a job.

Agreement Detail — Paused Live
app/(poster)/recurring/[id]/index.tsx — paused status banner with pauseReason, resume button replaces pause, empty upcoming
9:41
Lawn Care Weekly
Paused
Reason: Traveling for two weeks
TG
Garcia Landscaping
Tom Garcia
Service Details
Frequency
Weekly on Thursdays
Price per visit
$85.00
Completed visits
12
Total paid
$1,020.00
Upcoming Visits
No upcoming visits scheduled

Service Visit — In Progress Live
app/(poster)/recurring/instance/[id].tsx — in_progress status shows construct-outline icon with warning background card
9:41
Service Visit
Lawn Care Weekly
In Progress
Visit #13
Schedule
Thursday, April 3, 2026
8:00 AM
Payment
Amount $85.00
Payment Status Pending
Work In Progress
Your contractor is currently performing the service

Service Visit — Completed Live
app/(poster)/recurring/instance/[id].tsx — completed status shows checkmark-circle with success background card, notes section visible
9:41
Service Visit
Lawn Care Weekly
Completed
Visit #12
Schedule
Thursday, March 27, 2026
8:00 AM
Payment
Amount $85.00
Payment Status Paid
Notes
Mowed front and back yard, edged along sidewalk and driveway. Applied weed treatment to back lawn near fence line.
Visit Completed
This service visit has been completed
Agreements List + Detail Split Live
9:41
Recurring Services
Active
Paused
All
TG
Lawn Care Weekly
Garcia Landscaping
Active
Weekly $85/visit
BW
Pool Cleaning
Blue Wave Pools
Active
SC
House Cleaning
Sparkle Clean Co.
Active
Active
TG
Garcia Landscaping
Tom Garcia
Weekly
Frequency
12
Visits Done
$1,020
Total Paid
Price per visit
$85.00
Property
123 Oak Street, Phoenix, AZ 85001
Started
1/15/2026

Detail + Upcoming/Recent Visits Live
9:41
Lawn Care Weekly
TG
Garcia Landscaping
Tom Garcia
Frequency
Weekly on Thursdays
Price per visit
$85.00
Completed visits
12
Total paid
$1,020.00
Upcoming Visits 3 scheduled
3
Apr
Thursday
8:00 AM – 10:00 AM
10
Apr
Thursday
8:00 AM – 10:00 AM
17
Apr
Thursday
8:00 AM – 10:00 AM
Recent Visits
View All
27
Mar
Thursday
3 photos
20
Mar
Thursday
2 photos

Instance Detail Split Live
9:41
Service Visit
Lawn Care Weekly
Scheduled
Visit #13
Date
Thursday, April 3, 2026
Time
8:00 AM
Amount
$85.00
Payment Status
Pending
Actions
Pro Tip:You can skip individual visits without canceling the entire recurring service agreement.

Paused Agreement State Live
9:41
Lawn Care Weekly
Paused
Reason: Traveling for two weeks
TG
Garcia Landscaping
Tom Garcia
Frequency
Weekly on Thursdays
Price per visit
$85.00
Total paid
$1,020.00
Upcoming Visits
No upcoming visits scheduled
Recurring Services List Live
3bids.io/recurring

Recurring Services

Manage your recurring service agreements and upcoming visits

3
Active Services
21
Total Visits
5
Upcoming
$2,520
Total Spent
Upcoming Services
3
Apr
Lawn Care Weekly
Garcia Landscaping • 8:00 AM
Confirmed
5
Apr
Pool Cleaning
Blue Wave Pools
Scheduled
10
Apr
Lawn Care Weekly
Garcia Landscaping
Scheduled
Service Agreements
Active
Paused
All
Service Contractor Frequency Price Visits Status Next Visit
TG
Lawn Care Weekly
Garcia Landscaping Weekly $85.00 12 Active 4/3/2026
BW
Pool Cleaning
Blue Wave Pools Every 2 weeks $120.00 6 Active 4/5/2026
SC
House Cleaning
Sparkle Clean Co. Monthly $200.00 3 Active 4/15/2026

Agreement Detail — Active Live
3bids.io/recurring/abc123

Lawn Care Weekly

Recurring service agreement with Garcia Landscaping

Active
Weekly
Frequency
$85.00
Per Visit
12
Completed
$1,020
Total Paid
TG
Garcia Landscaping
Tom Garcia
Service Details
Frequency
Weekly on Thursdays
Property
123 Oak Street, Phoenix, AZ 85001
Started
1/15/2026
Upcoming Visits
3 scheduled
3
Apr
Thursday • 8:00 AM
10
Apr
Thursday • 8:00 AM
17
Apr
Thursday • 8:00 AM
Recent Visits
View All
27
Mar
Thursday
3 photos
20
Mar
Thursday
2 photos

Instance Detail — Scheduled Live
3bids.io/recurring/instance/xyz789

Service Visit #13

Lawn Care Weekly — Garcia Landscaping

Lawn Care Weekly
Scheduled
Visit #13
Schedule
Thursday, April 3, 2026
8:00 AM
Payment
Amount $85.00
Payment Status Pending
Actions

Agreement Detail — Paused Live
3bids.io/recurring/abc123

Lawn Care Weekly

Recurring service agreement — currently paused

Paused
Reason: Traveling for two weeks
TG
Garcia Landscaping
Tom Garcia
Service Details
Frequency
Weekly on Thursdays
Price per visit
$85.00
Completed visits
12
Total paid
$1,020.00
Upcoming Visits
No upcoming visits scheduled
Resume the service to schedule new visits

Data Architecture

Source files, queries, mutations, and components powering the Poster Recurring Jobs module.

Source Files

app/(poster)/recurring/index.tsx
Recurring services list screen. SegmentedControl filter (Active/Paused/All), upcoming services quick view, agreement cards with contractor avatar, frequency, price, completed count, next visit date.
app/(poster)/recurring/[id]/index.tsx
Agreement detail screen. Status banner, contractor info with message/profile actions, service details grid (frequency, price, property, start date, completed visits, total paid), upcoming/recent instance lists, pause/resume/cancel actions.
app/(poster)/recurring/[id]/history.tsx
Service history screen — coming soon stub. Shows time-outline hero icon, description text about future visit history, completion photos, and service notes.
app/(poster)/recurring/instance/[id].tsx
Instance detail screen. Header with service name + status badge, visit number, schedule card (formatted date/time), payment card (amount + payment status), notes section, in-progress/completed status banners, skip/view agreement/message actions.
app/(poster)/recurring/_layout.tsx
Stack layout for recurring module. Screens: index, [id], instance. No headers shown at layout level.
app/(poster)/recurring/[id]/_layout.tsx
Stack layout for agreement detail. Screens: index (no header), history (header with deepBlue background, white tint, title “Service History”).
app/(poster)/recurring/instance/_layout.tsx
Stack layout for instance detail. Single screen [id] with deepBlue header, title “Service Instance”.

Queries

api.recurring.agreements.listForPoster
Lists recurring service agreements for the authenticated poster. Accepts optional status filter (active/paused/all). Returns items with: _id, title, status, frequency, pricePerOccurrence, nextScheduledDate, totalOccurrencesCompleted, contractorName, contractorAvatarUrl.
query
api.recurring.agreements.get
Fetches a single agreement by ID. Returns: agreement (with status, frequency, preferredDayOfWeek, pricePerOccurrence, startDate, totalOccurrencesCompleted, totalAmountPaid, pauseReason), contractor (profile with name, businessName, avatarUrl), property (address), upcomingInstances, recentInstances.
query
api.recurring.instances.listUpcomingForPoster
Lists upcoming service instances. Accepts limit param. Returns items with: _id, scheduledDate, scheduledTimeSlot, status (scheduled/confirmed), agreementTitle, contractorName.
query
api.recurring.instances.listForAgreement
Lists all instances for a specific agreement. Accepts agreementId + limit. Returns instances with: _id, scheduledDate, scheduledTimeSlot, status, completionMedia.
query
api.recurring.instances.get
Fetches a single instance by ID. Returns: instance (status, scheduledDate, scheduledTime, instanceNumber, amount, paymentStatus, notes, agreementId), agreement (serviceName, pricePerOccurrence, originalJobId), canSkip boolean.
query

Mutations

api.recurring.agreements.pause
Pauses an active agreement. Accepts agreementId. Shows confirmation alert before executing. Stops new visit scheduling until resumed.
mutation
api.recurring.agreements.resume
Resumes a paused agreement. Accepts agreementId. Restores visit scheduling.
mutation
api.recurring.agreements.cancel
Cancels a recurring service agreement. Accepts agreementId + reason string. Uses Alert.prompt for reason input. Navigates back after success.
mutation
api.recurring.instances.skip
Skips a scheduled visit. Accepts instanceId + reason string. Shows destructive confirmation alert. Only available when canSkip is true from instances.get query.
mutation

Components Used

SegmentedControl
Filter tabs: Active / Paused / All. Drives the status param for listForPoster query.
component
Card (variant=“outlined”)
Primary container for all content sections. Used for agreement cards, detail cards, instance info.
component
Avatar
Contractor avatar with src/name/size props. Sizes: md (list), lg (detail).
component
Badge
Status indicators. Variants: success (Active/Confirmed/Completed), warning (Paused/Pending/In Progress), info (Scheduled), error (Cancelled), default (Skipped).
component
EmptyState
Shown when no agreements exist. Props: title, description, icon (repeat-outline), actionLabel (Post a Job), onAction (navigate to jobs/create).
component
SectionHeader
Used in detail screen for “Service Details”, “Upcoming Visits” (with subtitle count), “Recent Visits” (with actionLabel “View All”).
component
ScreenLayout
Wraps instance detail screen. Provides title prop for header.
component
Button
Variants: primary (deepBlue), outline, ghost. Used for: Message, View Profile, Pause/Resume/Cancel Service, Skip Visit.
component

Status Flow

Agreement Statuses
pending_approval
active
paused
completed / cancelled
Instance Statuses
scheduled
confirmed
in_progress
completed
skipped
(branch from scheduled/confirmed)
cancelled
(branch from any pre-completed state)