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 appointments, 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 appointments with status badges. Charts you can add in Customize: workspace mix pie with counts, paid revenue bar (six months), invoices and appointments 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

Switch between CRM and HRM workspaces when you have HRM permission. Sidebar navigation is permission-filtered, with outline icons beside every label. Initials avatars. My profile: display name, email, phone, password, and per-user appointment reminders (email and/or text, up to three lead times). Theme cycle without a page reload. 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 Merge selected: pick a master, compare side by side, choose field values; duplicates are archived and their appointments, invoices, contacts, and plans move to the master. Administrators can permanently delete archived contacts, customers, vendors, catalog items, and deactivated users (related documents removed or unlinked). Book Now lookup matches contact email or the active customer account email.

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 appointments 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, legend, and staff time-off blocks. 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). Book Now same-day toggle. Round-robin assigns among users marked Can take appointments (a profile flag, not a role). Customer portal reschedule window in hours before the visit (0–720). Company timezone drives {{appointment_date}}, {{appointment_time}}, and booking emails — not UTC.

Notifications and pay links

Company email and SMS alerts when a customer is created and when a booking is made (CRM or Book Now), in the company timezone. Round-robin emails the assigned technician. Merge field {{tech_name}} is the assignee. Appointments and invoices show catalog payment-link buttons: open or Email. Default Payment link email and SMS workflows on job.payment_link and invoice.payment_link.

Appointment photos and videos

Photos and videos on the appointment. 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>.

AI field notes

Photograph the AC nameplate, then Analyze labels. Settings → Integrations picks OpenAI or Anthropic and an API key. AI Notes stay separate from the technician’s manual notes. A short chat on the appointment answers follow-up questions from those photos. Desktop and mobile appointments both have the panel.

Consultant share links

Create or revoke a token URL from the appointment (desktop or mobile). The public page shows visit time, manual notes, AI Notes, customer, contact, phone, email, address, and field photos/videos — no CRM login. Set how many days the link stays valid (1–90). Media loads with a query token so images actually display.

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, Appointments, Customers, Chat, or More.

Home dashboard

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

Appointments on site

Today / Tomorrow toggle. Appointment detail: status, media, arrival SMS, pay-link email, editable notes. Call Client opens the phone dialer. Go To Client opens Apple Maps driving directions. Schedule or reschedule the next visit on site, prefilled from the current appointment or customer. Analyze labels + AI Notes and a consultant share link sit on the same screen.

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 appointments, schedule visit, customers, and chat.

08

Book Now and customer portal

Book Now

Public /booknow. Sign-in or signup by email, or by text message when Twilio is configured. Self-serve registration, magic-link verify. Services tab: pick service, date, slot, notes. Sales tab: product quantities when products exist. Company logo. Customer verified after confirmation. URLs keep ?nocache=1 so phones do not show a stale page.

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

Appointments list with title, when, status, media count. Appointment detail with photos and video. Invoices. Reviews with 1–5 star ratings. Reschedule on an appointment when it is still inside the company reschedule window. Header link back to Book Now. Email lookup matches contact email or the active customer account email.

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

E-signing

Signing desk

CRM Signing and HRM Signing share one designer. Upload a PDF or start from an IRS form. Place text, date, signature, and initials fields. Multi-party packets with a sign order. Full-screen designer.

Send and collect

Pick signers from contacts, customers, or HRM people. Email a unique public sign link (/sign/…). Track sent, viewed, and signed. Store the executed PDF with the signer list and timestamp.

On signed

HRM templates can run an action when the packet completes (for example attach a W-9). CRM packets stay on customer and contact work without opening HRM.

10

HRM

People

Employees and contractors with status, title, department, start date, address, TIN type / last four, linked staff user or customer account. Filter by type and status. Send signing packets from the person record.

W-9 / 1099

Year-by-year tax summary: missing W-9, 1099 drafts, payouts. Upload W-9 documents. Record contractor payouts. Track 1099 draft vs filed for the tax year. HRM Home shows active employees, contractors, missing W-9s, and draft 1099s.

Access

HRM is its own workspace with hrm.read / hrm.write. The CRM sidebar stays the operations product. Signing appears in both workspaces.

11

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.

12

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 / updatedAppointment writes
appointment.assignee_changedTechnician assigned or reassigned
appointment.pendingStatus is/becomes pending
appointment.confirmedStatus is/becomes scheduled
appointment.arrivedTechnician arrived
appointment.completedAppointment completed
appointment.deletedAppointment deleted (customer cancellation notices)
job.payment_linkAppointment payment link emailed or opened

Workflow steps

Multiple ordered call-to-action steps: email template, SMS snippet, Zulip stream/topic/content. Zulip steps include a Merge fields popup to insert tokens. Add Zulip appears after the bot keys are saved. 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.

13

Users, roles, teams

Users

Staff accounts with display name, username, role, email, phone. Can take appointments flag for round-robin and the calendar assignee list. Administrators can permanently delete deactivated users. Invite-style merge fields. Must-change-password on first login when issued. My profile reminders: email and/or text, up to three lead times (1–720 hours).

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

Assignment rotates among active users marked Can take appointments. Applies to Book Now and to staff-created appointments left unassigned. Time-off blocks hide those hours on the calendar and on mobile.

14

Reports, export, audit

Canned reports

Invoice aging. Revenue by month. Appointments 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.

15

Settings and integrations

Company

Name, address, city, state, postal code, phone, email, website, tax ID, public domain, timezone (default America/Chicago). Logo upload. Merge field {{company_logo}} uses the logo or initials. Appointment dates and booking emails use the company timezone.

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. Enables Book Now sign-in by text. Zulip site URL, bot email, API key, default channel and topic. Send test message is one click after the keys are saved. Workflows only offer Zulip steps when that integration is ready.

AI field notes

Settings → Integrations: OpenAI or Anthropic, optional model (defaults gpt-4o or claude-sonnet-4-20250514), API key. When a key is saved, Analyze labels is ready on desktop and mobile appointments.

Reviews

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

Questions

Is the features page a roadmap?

No. This is the product as shipped, not a roadmap slide.

Where do technicians work on a phone?

Staff use a dedicated mobile-friendly page at /mobile, linked from desktop login. Bottom tabs are Home, Appointments, Customers, Chat, and More.