Changelog
What shipped, with the date. Everything built in the October 2026 effort is dated October 6, 2026 and grouped by area, because it landed together. Older entries, back to November 2024, use the date of the project\'s commits.
Estimates
Build an estimate with 1 to 100 line items, a tax rate (your company default if you leave it blank), a discount, an expiry date, notes and terms. Send it by email with a PDF. The customer opens a page, approves or declines with their full name and can leave a reason. An approved estimate can be turned into a pending job and a draft invoice, once each.
Recurring jobs
Make any job repeat every N days, weeks or months, with weekday and day-of-month options and an end by count, by date or never. CalSpark creates visits a few weeks ahead. Edit one visit or this and all future visits, skip a visit, or end the series and keep or remove the future visits.
Automations: templates, a custom builder and Slack
Email templates for booking confirmation, appointment reminders, review requests, overdue invoice reminders, payment receipts and new-lead replies, plus a custom automation builder with triggers, conditions, delays and actions. Slack notifications use an incoming webhook, with presets for new leads, completed jobs and paid invoices. Everything except payment receipts is off until an admin switches it on. Fair-use sending limits apply, and trial accounts have lower limits. Texts need your own Twilio account.
Data in and out: CSV import and CSV export
Import customers from a CSV with column mapping and duplicate detection by email or phone, with a report of what was created, skipped or failed. Company admins can download customers, jobs and invoices as CSV from Settings, Data, up to 100,000 rows each, with an optional date range.
Dispatch board: day and week views, click, drag and touch
The board has a Day and Week toggle with a row per technician. Click an empty slot or day to create a job, drag a job to reschedule or reassign, and drag from the unassigned list. On a tablet, press and hold to pick a job up, or tap Move and tap an empty slot. Keyboard arrows plus Enter also work. Overlaps for one technician show a warning, and you can schedule anyway.
Jobs, photos, technicians and company settings
Add before, after, damage, completion and other photos to a job, up to 10 MB each in JPEG, PNG or HEIC. Technicians get a phone web view with an On my way button that records the start of the trip. Mark an owner or office user as Also works jobs to give them a row on the board. Set your company time zone, logo, default tax rate, business hours and default job length. Every time, including calendar feeds, shows in the company time zone.
Invoices: partial payments, refunds, pay links and numbering
Invoices accept recorded partial payments, show refunds on the invoice, get a secure pay link and are numbered per company. Card payment goes through your own Stripe account, and the pay link collects the remaining balance.
Public API, webhooks, calendar feeds and request form
A REST API with scoped keys, idempotency keys and cursor pagination, and signed webhooks with a delivery log, replay and a test event. Private read-only calendar feeds that carry no customer phone or email. A hosted request form with an embeddable snippet that records a lead, matches or creates the customer and adds an unscheduled pending job. The API, webhooks and request form are off until an admin turns them on in Company, Features. Docs are at /developers.
Billing and security hardening
Stripe webhook handling was rebuilt so a repeated event is not applied twice. The 10 user limit is enforced, and trial and subscription status checks were tightened. Sign-in and API rate limits are tighter, each company can only see its own data, the Content Security Policy is stricter, and session replay masks all text, inputs and media. Error reports no longer include personal data by default.
Timeline company filter removed
Removed the company filter from the timeline view to keep the dispatch board simple.
New marketing site
Redesigned the public landing page.
Faster database queries
Added indexes and tuned the main queries behind the timeline and job lists.
Better handling of pending jobs
Pending jobs now sit in one queue and move to the right status automatically when you schedule or finish them. Job details were rebuilt to load faster.
Invoice list and detail pages
Clearer invoice list with action menus, plus Send to Customer and Pay Online actions. Fixed a line item calculation bug.
14-day free trial through Stripe
Trials now run as Stripe-native 14-day trials. Also added a confirmation prompt before creating an unassigned job, a customer notes field, and a job status system.
Online invoice payments
Customers can open a public payment page and pay an invoice by card.
Customer search and inline customer creation
Search customers as you type with keyboard navigation, and create a customer without leaving the job form. Employees can now be deactivated and reactivated.
Company and settings pages
Company page with details, team and billing tabs. Settings page with profile and security. Light and dark themes. Frozen technician column on the timeline.
Addresses model
Customers can have several addresses, and each job points to one of them.
Invoice PDFs
Invoice PDF generation moved to a headless browser renderer.
Error tracking and input validation
Added error tracking and stricter validation of data sent to the API, plus stronger password hashing.
Phone-friendly web views
Mobile-first web view for technicians, a responsive schedule calendar, and card views for customers on small screens. Employee invite status and resend.
Email invites and Google sign-in
Invite employees by email. Sign in with Google.
Self-service signup and subscription billing
Companies can sign up on their own and subscribe through Stripe.
Team roles
Roles are now admin, front office and service technician.
Multi-company data separation
Each company sees only its own data.
Security hotfix
Tightened cross-origin rules, updated Next.js and hardened sign-in tokens.
Role checks in the API
Every API route now checks the caller's role before it acts.
API endpoints for the technician mobile app
Added the endpoints the technician mobile app uses. The iOS app is still not in the App Store.
Drag a job on the schedule calendar
The first schedule calendar let you drag a job to move it. Job end time was added to the new job form.
First schedule calendar
A basic calendar showing jobs.
Customers and jobs
Create customers and jobs, with customer and job detail pages.
Project started
First commit.
Try it with your own jobs
14-day free trial. No card. $49 a month flat for up to 10 users after that.