Dillard's Digital Instant website checkup
Case study · Custom CRM

One CRM. Three businesses. Built to fit, not configured to compromise.

A custom field-service CRM that replaced off-the-shelf software and runs three service businesses from one app: quotes, jobs, routes, invoices, payments, subscriptions, texting, payroll exports and owner dashboards.

ProjectMacomb HQStatusIn production
crm · pipeline
Open quotes14
Jobs this week23
Unpaid$3,120
Test Client · Gutter guard installQ-1088Viewed
Sample Co. · Spring cleanupJ-2041Scheduled
Example Home · Furnace tune-upI-3310Overdue
Demo Account · House washI-3311Paid
Example data. Every CRM we build is shaped around the client's own workflow.

We don't show screenshots of this system because it holds real customer records. The illustration above uses made-up data.

The brief

What needed solving.

Three owner-run service companies (exterior cleaning, lawn and snow, and a subscription pet-waste service) were paying for generic field software that didn't match how they quote, schedule, bill, sell door to door or pay their crews. Every mismatch became a workaround, and every workaround became a spreadsheet.

The goal was one owned system, on the owners' own domains, where each business keeps its own branding, numbering and Stripe account, and the owner sees all three at once.

What we built

The work, in detail.

Quotes customers approve online

Good, better and best packages, optional add-ons the customer ticks, and online approval with a drawn signature. The server re-prices on approval, so a tampered form can't change the price.

Jobs, recurring work and job costing

Checklists, recurring jobs and job profit and margin, so the owner sees what each job actually made.

Invoices, deposits and payment schedules

Batch invoicing, statements, refunds, deposits and payment schedules, with card and bank payments through each business's own Stripe account.

Card on file, autopay and subscriptions

Recurring customers can be billed automatically, and subscription plans re-price from the website's own published price list.

Online booking and a client portal

Public booking and request pages, plus a customer hub for quotes, invoices and payments.

Two-way texting with opt-out handling

A threaded inbox and broadcasts over business numbers, with STOP and START handled automatically.

Route board

Stops ordered automatically and routed over real roads, with done or skipped recorded per stop and proof photos.

Door-to-door tracker

An offline-first phone app for knocks and yard signs that syncs when signal returns and hands interested homeowners straight into the CRM.

Timesheets and payroll export

Activity-based timesheets with paid rest breaks, unpaid meals and weekly overtime rules, exported as a payroll file.

Owner metrics and an AI analyst

One metrics layer behind every owner screen, plus an assistant that answers questions about the business using read-only tools over that data.

Security

Two-factor sign-in, passkeys, recovery codes, account lockout, per-user business access and an audit log of every change to every record.

Nightly backups

A consistent snapshot of the database every night, kept for 30 days.

Stack
  • Next.js 16 and React 19
  • Postgres (Neon) with Drizzle ORM
  • Stripe, Twilio and Resend
  • Passkeys (WebAuthn) and TOTP
  • OpenStreetMap routing
  • Claude API for the owner assistant
  • Netlify with scheduled functions
Principles
  • Every business keeps its own branding, numbering and payments
  • Every change to every record is logged
  • Owned code, owned data, owned domains
Design

Outfit. Each business keeps its own color and logo inside one app, with a switcher to move between them and a dark mode for the office.

Want one built for you?

Get a free system quote: we look at your site, your Google profile, how your calls get answered and what you spend on leads, then put what we'd build and what it costs in writing.

Get a free system quote