Feature inventory

Every module. Every toggle. Every event.

This is the product as shipped — not a roadmap slide. If a competitor is still selling “coming soon” for field jobs, customer media, or self-hosted mail, they can read this page slowly.

01

Workspace

Dashboard

Snapshot of contacts, customers, vendors, open invoices, and open deals. Upcoming jobs with status badges. Charts you can add in Customize: workspace mix pie with counts, paid revenue bar (six months), invoices and jobs by status, aging, and deals pies. Layout is saved on each user.

Setup wizard

First visit: company name, administrator account, theme palette. Optional sample data. Until setup completes, the staff shell is not shown. Unauthenticated visitors never see Dashboard or Settings.

Staff shell

Sidebar navigation is permission-filtered, with outline icons beside every label. Initials avatars for the signed-in user, contacts, customers, and vendors. Theme cycle (light / dark / system) without a page reload. App version next to Logout. Desktop login links to the mobile field page.

One company per install

No multi-tenant noisy neighbor. Users belong to teams inside a single company. Money is stored as integer cents. Sessions are Bearer tokens for staff; portal uses a session cookie so images and video can load.

02

Records

Contacts

People with names, emails, phones, and three address blocks: physical, mailing, shipping. Custom fields. Search, create, edit, archive. CSV import. Activity on create, update, and import.

Customers

Accounts you bill and schedule. Linked contacts. Billing state drives tax context on invoices. Archive and restore. Multi-select checkboxes and Merge selected: pick a master, compare side by side, choose field values; duplicates are archived and their jobs, invoices, contacts, and plans move to the master. Book Now treats archived customers as gone so a returning email can sign up again.

Vendors

Supplier accounts with the same address model and custom fields. Separate from customers so purchasing and selling never share a confused record type.

Custom fields

Shared catalog for contacts, customers, and vendors. Types: text, number, date, boolean, select (options). Required flag, sort order, applies-to checkboxes. Field key is stable for export and automation.

03

Catalog and inventory

Products

Sellable items with name, description, unit price in cents, tax rate basis points. Flag inventory tracking when the item should appear on the stock board.

Services

Bookable work with duration in minutes. Duration drives Book Now slot length and maintenance-plan visit minutes. Same catalog pipeline as products for invoicing.

Inventory

On-hand quantities for tracked products. Movements: receive and adjust, with quantity delta, reason, and timestamp. Movement history is a first-class list, not a buried note.

Catalog on invoices

Pick a catalog item onto a line and description, price, and tax rate fill in. Override any line. Quantity is explicit. Competitors still typing SKUs into a memo field can sit down.

04

Invoices and tax

Invoices

Customer account, issue date, due date, notes, line items. Status workflow including sent and paid. Filter by status. Stripe Checkout from the invoice. Catalog Stripe payment-link buttons (open and Email) using the product/service name. Opening a catalog link can fire invoice.payment_link.

State sales tax

Settings → Taxes holds rates by US state. Invoice tax context reads customer billing state, or the linked contact state. Lines can inherit that rate. If the state has no rate, the UI says so instead of silently charging 0%.

Stripe

Secret and publishable keys, webhook signing secret, Connect client ID, Connect enabled flag, funds destination, application fee in basis points. Technician connected-account mapping. Custom payment-link buttons.

Integer cents

No floating-point money. Display helpers convert cents to dollars for humans. Reports and exports stay exact. This is how you stop arguing with a spreadsheet in month twelve.

05

Sales pipeline

Stages and deals

Configurable stages. Deals have name, customer account, owner, amount in cents, notes. Move through the board. Deal won is a workflow and webhook action.

Open pipeline report

Canned report of open deals. Dashboard widget for open deal count. Export CSV when the board meeting wants a file, not a login.

06

Appointments and plans

Appointment statuses

New jobs default to Pending. Staff confirm by setting Scheduled. Arrived for on-site. Completed and Cancelled. Day / Week / Month calendar with an 8 AM–5 PM week grid, status-colored blocks, and a legend. Staff can always create or move a visit to today; the same-day setting applies only to public Book Now.

Scheduling rules

Allow double booking (off hides overlapping Book Now slots). Post-visit buffer minutes (0–240) so technicians can travel or restock. Book Now same-day toggle. Assign appointments round-robin among active Staff-role users when Book Now or an unassigned staff create comes in.

Notifications and pay links

Company email and SMS alerts when a customer is created and when a booking is made (CRM or Book Now). Round-robin also emails the assigned technician. Jobs and invoices show catalog payment-link buttons: open or Email. Default Payment link email template and SMS snippet, plus workflows on job.payment_link and invoice.payment_link. Manual Send SMS cannot fill a payment URL unless that product button is chosen.

Job media

Photos and videos on the job. Stored in Postgres file_data and on disk so container recreates do not wipe the gallery. Portal media uses same-origin URLs plus a session cookie — browsers cannot send Bearer tokens on <img> and <video>.

Maintenance plans

Recurring visits: interval months, visit minutes, assignee, contact, catalog service, notes. Optional invoice generation with amount and next invoice date. Next visit date. Active flag. This is the retainer business your generic CRM still models as a repeating calendar invite.

07

Mobile field page

Built for phones

Dedicated mobile-friendly page at /mobile, linked from desktop login. Full-width stacked buttons, no horizontal overflow on narrow phones. Bottom tabs stay pinned to the visible viewport on iPhone so you never scroll to find Home, Jobs, Customers, Chat, or More.

Home dashboard

Opening screen after sign-in: today's jobs, open invoice counts, and quick links. Greeting, then the work in front of you.

Jobs on site

Today / Tomorrow toggle. Job detail: status, media, arrival SMS, pay-link email. Call Client opens the phone dialer for the contact or account number. Go To Client opens Apple Maps driving directions from the job address. Schedule or reschedule the next visit on site, prefilled from the current job or customer.

Customers, invoices, chat

Customer list and SMS. Invoices and pay links. Team chat on the same phone UI. More menu reaches Home, invoices, today's jobs, schedule visit, customers, and chat.

08

Book Now and customer portal

Book Now

Public /booknow. Email lookup, self-serve registration (name, phone, company, address), magic-link verify. Services tab: pick service, date, slot, notes. Sales tab: product quantities and order notes when products exist. Company logo on the public page. Customer verified event after email confirmation.

Magic links

Expired portal or Book Now links offer Send a new link for the same email — no retype. Staff never hand a password to a customer for a one-time booking.

Customer portal

Jobs list with title, when, status, media count. Job detail with photos and video. Invoices list. Reviews with 1–5 star ratings. This is the customer-facing product, not a PDF emailed from a personal Gmail.

Reviews

Portal reviews plus Settings → Reviews: moderate submissions, add a review by hand (paste from Picktime and similar), link to an existing customer, optional original date. Copy iframe HTML for a public embed that loads once when the page opens.

Public domain

Company public domain in Settings so Book Now, portal, login URLs, and merge fields like {{login_url}} resolve to your hostname, not localhost leftovers.

09

Campaigns and templates

Mailing lists

Named lists with description and active flag. Add contacts as members. Subscriber counts on the campaign form. Search contacts when adding.

Campaigns

Draft campaigns with list, email template, and subject. Send history. Company physical address must be on file before send (CAN-SPAM-shaped hygiene). Unsubscribe page is public.

Visual email designer

GrapesJS newsletter canvas plus HTML editor. Categories: sales, before visit, pending visit, after visit, general. Merge fields include display name, username, login URL, temporary password, company name, company logo, contact and account fields. Preview with merge applied.

SMS snippets

Same category set as email. Seeded pending, after-visit, sales, and Payment link snippets. Settings filters, merge insert, length preview. The Payment link snippet is reserved for workflows; manual Send SMS pickers disable it so {{payment_link_url}} is not sent empty.

10

Workflows and webhooks

Triggers (workflows and outbound webhooks share this catalog):

EventWhen it fires
invoice.status_changedInvoice status changes
invoice.paidInvoice paid
invoice.sentInvoice sent
invoice.payment_linkInvoice payment link opened
customer.status_changedCustomer archived or restored
customer.updatedCustomer updated
customer.verifiedBook Now email confirmation
contact.created / updatedContact writes
contacts.importedCSV import (workflows skip send — no single recipient)
account.updatedAccount updated
deal.wonDeal marked won
appointment.created / updatedJob writes
appointment.pendingStatus is/becomes pending
appointment.confirmedStatus is/becomes scheduled
appointment.arrivedTechnician arrived
appointment.completedJob completed
job.payment_linkJob payment link emailed or opened

Workflow steps

Multiple ordered call-to-action steps: email template, SMS snippet, Zulip stream/topic/content. Each channel is only available when that integration is ready. Run log with timestamps.

Webhooks

Outbound HMAC-signed posts to Make.com or any URL you own. Inbound POST /api/v1/webhooks/inbound with a shared secret. UI warns if a live webhook and a live workflow overlap on the same action.

11

Users, roles, teams

Users

Staff accounts with display name, username, role, email. Invite-style workflow merge fields: display name, username, login URL, temporary password. Must-change-password on first login when issued.

Roles

Administrator always has every permission and cannot be locked out. Edit Manager, Sales, and Staff on a permission grid. Navigation and APIs both honor the matrix — hiding a menu is not security theater.

Teams and chat

Named staff work groups with descriptions and members. Per-team messaging with photo and video attachments. Other members are emailed when a new message arrives, including a message preview. Chat bubbles follow light and dark theme tokens.

Round-robin staff

Appointment assignment rotates among active users whose role is Staff. Applies to Book Now and to staff-created jobs left unassigned.

12

Reports, export, audit

Canned reports

Invoice aging. Revenue by month. Jobs by technician. Open pipeline. Campaign delivery. Each view exports CSV with the same auth as the UI.

Data export

Settings → Export. Select modules: contacts, customers, vendors, invoices, email templates, appointments, deals, SMS snippets, custom field definitions. One module as CSV; several as ZIP.

Activity log

Create, update, archive, restore, invoice, import, and user actions. Search by action, user, or summary. Pagination. Successful email sends log email.sent; SMS logs sms.sent — from workflows, campaigns, Book Now alerts, portal links, and manual sends.

About

In-app changelog for the running release. Version in the sidebar. Changelog is baked into Docker Hub images via APP_VERSION.

13

Settings and integrations

Company

Name, address, city, state, postal code, phone, email, website, tax ID, public domain. Logo upload. Merge field {{company_logo}} uses the logo or initials.

Theme

Palettes: Lightserve (teal/slate), Midnight, Ocean, Forest, Sand, Rose, High contrast. Modes: light, dark, system. No emoji chrome. Text actions: Edit, Delete, Logout.

SMTP / IMAP

Detect provider from an email address: Google Workspace, Microsoft 365, Zoho Mail, Fastmail, Yahoo, iCloud, filtered inbound MX, domain mail host. Host, port, STARTTLS or TLS, username, password. CRM from name and from address. Send test. IMAP host/port/security stored for later inbound mail.

Twilio and Zulip

Twilio account SID, auth token, from number, test SMS. Zulip site URL, bot email, API key, test message to a stream and topic. Workflows only offer those steps when the integration is ready.

Reviews

Moderate portal reviews, add reviews by hand, link to a customer, set the public embed, and copy iframe HTML for your marketing site.