VEZIGN®
Recurring Service

Case study | Swivl | 10 min read

Recurring Service: Approve once, get paid for every visit

Cleaners, lawn crews and pest controllers visit the same customers every week, but Swivl could only price one visit at a time. Recurring Service turns one estimate into the whole agreement: the customer approves it once, and Swivl creates the job, every visit and every invoice.

  • My roleProduct designer: flows, UI, states and the film
  • ProductSwivl Estimates, Jobs and Invoices
  • PlatformsWeb, mobile web, iOS and Android
  • Year2026, at Swivl

FilmRecurring Service in 52 seconds

Same customer, every week, all by hand. Then one estimate sets the schedule once, and every visit and every invoice follows.

  • The problem

    A 12-visit contract meant 12 tasks and up to 12 invoices made by hand, after a yes on the phone.

  • What I did

    Designed the agreement inside the estimate, its approval, and the job, tasks and invoices it creates, on web, mobile web, iOS and Android: 80+ screens and 29 notes for the build.

  • The result

    Live on 20 May 2026 in release 4.24.0, 51 days after the first design review. One fix after launch, found in a walkthrough, shipped on 24 Jun.

01The core screen

One question turns an estimate into an agreement.

Step 3 of creating an estimate. Switch on Do any of your services repeat on a schedule? and the card asks only for what a schedule needs, while the preview on the right lists every visit it will create.

Step 3: Recurring Service switched on with the note that a job and tasks will be created, the schedule, Ends, Billing Details and legal terms, then Terms and Media and Documents; the preview carries the Recurring Service summary and the list of auto-generated visits
WebRecurring service, terms and media

Name, start date, how often, the time window, when it ends and how it is billed. A yellow note says what will happen before it happens: a job and its tasks will be created.

02The problem

Repeat work ran on effort and memory.

Most of a home-service business’s money comes from repeat work: the same house every week, the same office every month. Swivl could only price, approve and bill one visit at a time, and Jobber, ServiceTitan and Housecall Pro all handle repeat work.

  1. 01

    One visit at a time

    A 12-visit contract had nothing the customer could approve in one go, so the deal lived in calls and emails.

  2. 02

    The same admin, every visit

    Every visit needed its own task, made and assigned by hand. Miss one and the crew never shows up.

  3. 03

    Payments waited on memory

    Every visit needed its own invoice too. If nobody sent it, work already done went unpaid.

  4. 04

    No view of the whole contract

    Nothing showed visits done, money billed, what was paid and what was still owed.

One weekly contract, beforeTwelve Tuesdays. Each one a task and an invoice, made by hand.
  1. Tue 24 MarTaskInvoice
  2. Tue 31 MarTaskInvoice
  3. Tue 7 AprTaskInvoice
  4. Tue 14 AprTaskInvoice
  5. Tue 21 AprTaskInvoice
  6. Tue 28 AprTaskInvoice
  7. Tue 5 MayTaskInvoice
  8. Tue 12 MayTaskInvoice
  9. Tue 19 MayTaskInvoice
  10. Tue 26 MayTaskInvoice
  11. Tue 2 JunTaskInvoice
  12. Tue 9 JunTaskInvoice

A weekly service with 12 visits meant 12 tasks and up to 12 invoices made by hand, all after a yes on the phone. Nothing was written down for the customer to approve, so the deal was easy to dispute later.

Before and after

Twelve tasks made by hand, or one job that holds the contract

Before: the Task Scheduler list for one weekly contract, eight of twelve kitchen-cleaning visits, each task made by hand the day before its Tuesday, none linked to the othersBefore
After: one job, Weekly kitchen cleaning, with its Recurring Service card: 12 visits, weekly on Tuesday, per-visit billing, 8 of 12 done, invoiced, paid and outstanding, and all twelve tasks made on the day of approvalAfter

BeforeA task made by hand before every Tuesday, an invoice after it, and nothing that shows the contract as a whole.

AfterOne approval makes the job and all twelve tasks on the same day. Visits done, invoiced, paid and owed sit in one card.

Both redrawn for this case study in Figma from the real Swivl screens, with one contract’s dates.

03Ideation

Make the estimate the agreement.

No new module to learn. Recurring work starts where every job already starts, in an estimate, with one question.

What it was

A one-visit estimate, and a lot of follow-up

The business priced one visit, then made tasks and invoices by hand for every visit after it.

→ Easy to miss a visit, easy to forget an invoice.

What it became

A recurring estimate that runs itself

The customer approves the schedule, the billing and the terms once. Swivl creates the job, every visit and every invoice.

→ Less work for the office, and every visit gets paid.

Before the yes
  1. The business sends itThe estimate, with its Recurring Service card.
  2. The customer reviews itThe PDF lists every visit in the agreement.
  • ApproveThe work is set in motion.
  • Request a changeBack to the business to edit and resend. Nothing is created yet.
  • RejectNothing is created.
After the yes, for every visit
  1. One job is createdIt holds every visit, linked to the estimate.
  2. Every visit is a taskIt starts Unassigned. A person still picks the crew.
  3. The visit is doneThe crew closes the task.
  4. The invoice, within 24 hoursFor each visit, or once after the last one.

Repeats for every visit until the agreement ends.

  • Reuse what people know

    The same three steps, form on the left, live preview on the right. Nobody learns a new screen.

  • Approved means locked

    After approval nothing changes by accident. Edits to a running job touch only future visits.

  • Automate the paperwork, not the people

    Swivl creates every visit, but a person still decides who goes: tasks start Unassigned.

The calls

Three decisions, and what each one cost

Each one had a real alternative on the table. These are the options I killed, why, and what the shipped version gives up.

01

When does an invoice go out?

Ruled outOn a calendar date

Every visit billed on a fixed day, whether or not the crew has been.

Shipped24 hours after the work

Per visit, after each task is closed; or once, after the last one. The business picks.

WhyNot the calendar, the work. A customer is only ever billed for a visit that happened, and nobody has to remember to send it.

What it costsMoney arrives a day after each visit rather than on a set date. A customer who wants one bill gets the one-time charge instead.

02

Who decides who goes to each visit?

Not in v1Assign a crew automatically

Every new visit lands on someone’s schedule the moment the customer approves.

ShippedEvery visit starts Unassigned

Swivl creates the task; the team decides who goes, and when.

WhyAutomate the paperwork, not the people. A twelve-visit agreement should not quietly fill twelve days in a crew’s calendar.

What it costsOne manual step per visit for the dispatcher. Automatic assignment is on the list of what comes next.

03

How much goes into the first release?

Left out of v1Preferred days, holidays, pausing a series, compliance tracking

Each one real, each one another control in the card and another case for QA.

ShippedA name, a schedule, when it ends, how it is billed

The smallest card that turns an estimate into an agreement.

WhyCut from the final plan to ship a clean first version, on web, mobile web and the app at once. It went live 51 days after the first design review.

What it costsA business with seasonal or irregular visits still edits by hand until a later release.

The Recurring Service card with every option: name, start date and frequency, times, ends, then preferred days, skip public holidays, let the customer pause the series and a compliance checklist, then billing and termsRuled out for v1
The shipped Recurring Service card: name, start date and frequency with On Tuesday under it, times, ends after 12 visits with the end date worked out, billing per visit or once, and termsShipped

Ruled out for v1Preferred days, skipping holidays, pausing and a compliance checklist, all in the card.

ShippedName, schedule, how it ends and how it bills, and nothing else.

The left card is redrawn for this case study from the real card and its own fields.

04The solution

One approval. Then it runs itself.

The same journey on every screen: build the agreement, the customer approves it once, and the job with all its visits is waiting. These are the real screens, played as a prototype.

Prototype · WebFrom the estimates list to the job it creates

Create, switch on Recurring Service, scroll the visits it will make, save, send. Once approved, Job #JNRH01400 (Recurring) has been created with 12 tasks.

Prototype · AppThe same agreement in the iOS and Android app

One field per row under the teal bar, with the main button always in reach.

Prototype · Mobile webAnd in a phone’s browser

Each step slides up from the bottom; the bar at the foot never moves.

The card, explained

Five things the card does so the office doesn’t have to

The Recurring Service card as shipped, numbered: the toggle, the yellow note, On Tuesday under the frequency, the end date worked out, and billing per visit
  1. One question turns it on.Do any of your services repeat on a schedule? sits in step 3 of the estimate everyone already uses. No new module to find.

  2. It says what will happen, before it happens.A job and its tasks will be created automatically. The PDF and the dialogs repeat it, so nothing arrives as a surprise.

  3. The weekday, spelled out.On Tuesday under the frequency. It was added after launch, when a walkthrough showed the day was easy to misread.

  4. Swivl does the date maths.Set 12 visits and it works out the end date; pick an end date and it counts the visits.

  5. Invoices follow the work.Per visit, 24 hours after each task is closed, or once after the last. Either way nobody has to remember to send it.

After it is sent

Every estimate shows where it stands

Six statuses, and for each one, what the business can do next.

StatusWhat it meansWhat the business can do
DraftSaved, not sent. Only the team sees it.Edit anything, then send.
OpenSent, waiting on the customer.Send it again, or take the approval on site with a signature or stamp.
Change requestThe customer asked for changes.Edit the fields that can change and resend in one click.
ApprovedSigned and locked.Open the job: Job #JNRH01400 (Recurring) has been created with 12 tasks.
DeclinedThe customer said no.Nothing is created; it stays on record.
VoidWithdrawn.Nothing; it stays on record.

Every screen, on one canvas

All 89 screens and parts, the whole file: web, the app, mobile web and the components. Pick a group to fly to it, zoom in to read, or press the corner button to present it full screen.

Web: the Estimates list, where a new estimate starts, with Approved, Open, Deposit Paid, Declined and Expired counts over the table
Estimates list
Web: Create Estimate step 1, Customer and Job Details, empty, with the blank preview
Step 1, empty
Web: step 1 filled: Jenny Wilson, her billing address and job JBT_1234 linked
Step 1, filled
Web: step 2, Product and Services: calculated costs and the target margin over Drain Cleaning with rate, tax and discount
Step 2, a service added
Web: step 3 with Do any of your services repeat on a schedule? switched off, then Terms and Media and Documents
Step 3, recurring off
Web: step 3 switched on: the note says it has been linked to job JSN74823, weekly from 24 Mar 2026, ending after 2 visits, and the preview lists the visits
Step 3, linked to a job
Web: step 3 switched on, monthly, Anytime, ending on 4 Mar 2027 with the visit count worked out, one-time charge; the note says a new job will be created
Step 3, monthly, any time
Web: step 3 switched on: the note says a job and tasks will be created, as it cannot be linked to a job with one-off tasks
Step 3, a new job
Web: the card switched on with nothing filled in yet
Empty
Web: the card filled: Brigade IRV Plumbing Recurring, weekly from 24 Mar 2026 on Tuesday, 9:00 AM, ends after 12 visits on 4 Mar 2027, Recurring Charge (per visit)
Ends after 12 visits, billed per visit
Web: the card with Anytime, ending on 4 Mar 2027 so 12 visits are worked out, and One-time charge (after all visits)
Ends on a date, one charge
Web: the card with the number of visits left empty and the message Please fill this field under it
A required field missed
Web: estimate #NINRH01-485 in Draft, with Onsite Approval and Send, products, customer details, terms, the Recurring Service card and attached media
Draft
Web: the same estimate Open: sent, waiting on the customer
Open
Web: the estimate with a Change Request from the customer
Change request
Web: the estimate Declined by the customer
Declined
Web: the estimate Approved, with the banner Job #JNRH01400 (Recurring) has been created with 12 tasks, and Visit Job
Approved
Web: the estimate Void, withdrawn and kept on record
Void
Web: Are you sure you want to Close without saving? All unsaved changes to this estimate will be lost. Close, or Save and Close
Close without saving
Web: You cannot link job JBT_1234, since it contains standalone tasks; proceeding will create a new job with its tasks and invoices. Cancel or Proceed
Can’t link this job
Web: Confirm Onsite Approval for Estimate #NENRH01-807? Cancel, Decline or Confirm for Approval
Onsite approval
Web: Confirmation for Approval: sign to approve on the device, or approve with the company stamp. Cancel or Confirm
Sign or stamp
Web: Save and Update Recurring Job: changes will apply to ongoing and future tasks and not affect completed tasks or invoices. Cancel or Confirm and Update
Editing a running job
Web: job #JSSS01186 Open: the Recurring Service card with Tasks Completed 8 of 12, invoiced $1289, paid $1136, outstanding, then the tasks, job cost and media
Open, 8 of 12 done
Web: the job with its task list, every visit a task with the calendar icon
Every visit a task
Web: the job with the Assigned To column, every new task None until a dispatcher picks the crew
Tasks start Unassigned
Web: the job Open, the final layout
Open
Web: the job Cancelled: 0 of 12 completed, nothing paid
Cancelled
Web: the job Closed: 100 percent, invoiced and paid $1289
Closed, fully paid
Web: New Job, empty, with Is this job for a recurring service? switched off at the foot
New job
Web: New Job with the customer left empty and its message
A required field missed
Web: New Job with the question switched on and the same schedule card: name, start date, frequency, times, ends and billing
Recurring switched on
Web: job #JNRH01466 open for editing, its schedule card filled
Editing a recurring job
Web: invoice #NINRH01-485 Draft with the Recurring Service summary on top: Recurring Charge (per visit), 8 of 12 tasks completed, invoiced $1289, paid $1136, outstanding $362
Invoice, billed per visit
Web: the invoice for a one-time charge (after all visits): 0 of 12 completed, invoiced $1289, nothing paid yet
Invoice, one charge after all visits
The estimate PDF the customer signs, page 1: billed from and to, Drain Cleaning, 10 at $230 with a $23 discount, and the totals
Estimate PDF, page 1
The estimate PDF, page 2: the Recurring Service summary, Plumbing for Brigade IRV, monthly, 12 visits, one-time charge, the terms and the customer signature
Estimate PDF, page 2
The invoice PDF: invoice INVS4567, Brigade IRV Plumbing, $2,500 and the totals
Invoice PDF
Web: the Estimates list with the recurring icon beside an estimate number and its tooltip, Recurring Service, Brigade IRV Plumbing
Estimates
Web: the Jobs list with the recurring icon and its tooltip on a job
Jobs
Web: the Task Scheduler list, recurring tasks marked with the icon, Unassigned
Task scheduler
Web: the Invoices list with the recurring icon and a Converted Invoice tooltip
Invoices
Web: the card, fields side by side, ending after 12 visits and billed per visit
Web
Mobile web: Create Estimate, Recurring Service switched on, one field per row, linked to job JSN74823
Mobile web
The app: Create Estimate under the teal bar, Recurring Service switched on, one field per row
iOS and Android app
The app, full screen capture: estimates list
Estimates list
The app, full screen capture: customer and job details
Customer and job details
The app, full screen capture: products and services
Products and services
The app, full screen capture: recurring off
Recurring off
The app, full screen capture: recurring on, linked job
Recurring on, linked job
The app, full screen capture: recurring on, new job
Recurring on, new job
The app, full screen capture: can’t link this job
Can’t link this job
The app, full screen capture: estimate details
Estimate details
The app, full screen capture: estimate approved
Estimate approved
The app, full screen capture: job details
Job details
The app, full screen capture: invoice details
Invoice details
The app, full screen capture: new job
New job
The app, full screen capture: new job, recurring on
New job, recurring on
The app, full screen capture: save and update
Save and update
The app, full screen capture: editing a recurring job
Editing a recurring job
Mobile web, full screen capture: estimates list
Estimates list
Mobile web, full screen capture: customer and job details
Customer and job details
Mobile web, full screen capture: close without saving
Close without saving
Mobile web, full screen capture: products and services
Products and services
Mobile web, full screen capture: recurring off
Recurring off
Mobile web, full screen capture: recurring on, linked job
Recurring on, linked job
Mobile web, full screen capture: recurring on, new job
Recurring on, new job
Mobile web, full screen capture: can’t link this job
Can’t link this job
Mobile web, full screen capture: estimate details
Estimate details
Mobile web, full screen capture: estimate approved
Estimate approved
Mobile web, full screen capture: job details
Job details
Mobile web, full screen capture: tasks and financials
Tasks and financials
Mobile web, full screen capture: invoice details
Invoice details
Mobile web, full screen capture: jobs list
Jobs list
Mobile web, full screen capture: estimates list, recurring icon
Estimates list, recurring icon
Mobile web, full screen capture: new job
New job
Mobile web, full screen capture: new job, recurring on
New job, recurring on
Mobile web, full screen capture: job details, another job
Job details, another job
Mobile web, full screen capture: save and update
Save and update
Mobile web, full screen capture: editing a recurring job
Editing a recurring job
Figma component sheet: recurring card, mobile
Recurring card, mobile
Figma component sheet: recurring card, web variants
Recurring card, web variants
Figma component sheet: recurring and terms, mobile page
Recurring and terms, mobile page
Figma component sheet: products and services, default
Products and services, default
Figma component sheet: products and services, filled
Products and services, filled
Figma component sheet: estimate pdf with the agreement
Estimate PDF with the agreement
Figma component sheet: invoice pdf, once the job exists
Invoice PDF, once the job exists
Figma component sheet: products and services, details card
Products and services, details card
Figma component sheet: terms and media
Terms and media

05The effort

Three weeks of design, seven weeks to live.

About three weeks of design, from the first review on 30 Mar 2026 to handoff on 22 Apr, then four weeks of build that I supported until launch on 20 May.

Seven weeks from the first design review to going live

Recurring Service, 2026, from the Figma file and the Linear project.

  1. Design and reviews
    Mar 30 to Apr 22
  2. Design handoff
    Apr 22
  3. Engineering build
    Apr 16 to May 20
  4. QA on three platforms
    Apr 23 to May 20
  5. Live, release 4.24.0
    May 20
  6. Schedule hint follow-up
    May 19 to Jun 24
Figma page dates and Linear project dates, 30 Mar to 24 Jun 2026.
  • 44WebScreens and states in the final file.
  • 20Mobile webScreens and states in the final file.
  • 16iOS and Android appScreens and states in the final file.
  • 78Engineering ticketsBackend, frontend, mobile, QA and product, all shipped.
How it was checked

What each check found, and what changed because of it

No usability study ran on this one. These are the checks that did, from the file, the tickets and the release.

CheckWhat it foundWhat changed
Every state, before handoffSix estimate statuses, four card states, five pop-ups, job cancel and close, two ways to bill, drawn on three platforms. Four screens were missing.All four drawn before the 22 Apr handoff.
Notes for the buildBehaviour that a screen alone cannot show: what happens on approve, on edit, on cancel.29 notes on the canvas, so engineers didn’t have to guess.
QA on three platforms23 Apr to 20 May, beside the build, on web, mobile web and the app.78 tickets, all shipped in release 4.24.0.
Walkthrough, 19 MayThe weekday of a two-weekly schedule was easy to misread.The On Tuesday hint, shipped on 24 Jun.
Live on 20 MayThe schedule as it went live: Start Date 17 Mar 2026 and Visit Frequency Weekly, with nothing under the frequency
After 24 JunThe same schedule after the follow-up: On Tuesday under Weekly, ringed

Live on 20 MayWeekly, with the weekday left to the start date.

After 24 JunOn Tuesday under the frequency: the one fix the walkthrough asked for.

06Business outcome

Live on 20 May 2026, on every platform.

Recurring Service went live in release 4.24.0, on web, mobile web and the iOS and Android app. What changed for a business on Swivl, in the words of the launch note:

  • Predictable revenue they can plan around, because every visit in an agreement is billed on its own.

  • Less admin per contract. The job, its tasks and its invoices are created for them.

  • Clearer expectations, fewer disputes. The customer signs the full schedule, billing and terms before work begins.

  • One source of truth. Every task, invoice and visit links back to the original agreement.

For a businessBeforeAfter
Tasks12 made by hand12 created on approval
InvoicesMade by hand, when someone rememberedSent 24 hours after the work
The agreementA phone callA signed or stamped estimate
The whole contractNowhereOne job: done, invoiced, paid, outstanding

The launch note makes no usage claim, so neither does this page. The numbers to watch: how many estimates turn recurring, the share of visits billed without a manual step, and what is still owed on recurring jobs. Next: auto-pay, agreement templates and automatic crew assignment.

Looking back

What I would do again, and what I would change

Again
  • Put the new behaviour where the work already starts. One question in the estimate taught nobody a new screen.
  • Write the behaviour down in the file. 29 notes meant the edge cases were decided by design, not in a ticket thread.
Differently
  • Put the wording in front of an office user before handoff. The weekday misread surfaced the day before launch and cost a follow-up release.
  • Agree the success numbers before the build. Then launch could report adoption, not just the benefits we expected.