Customer mobile app — login flow
Your customers log into the same app your team uses. Name + phone. Done.
The all-in-one mobile app means your customer base doesn't need to download a second app to track their job or check their warranty. They open SalesThumb, type their name + phone, get a 6-digit SMS code, and land on a portal showing only their stuff. Staff get a different login (email + password) and each employee's mobile role (installer, sales, both or none) decides which screens appear. No app-switching, no second download, no separate brand.
- Passwordless SMS-code login (6 digits, 10-min TTL, 5-attempt lockout)
- Re-uses the existing 30-day customer portal token format
- Multi-shop disambiguation: active shops first, then the name hint, then the oldest matching record
- Phone numbers matched the same way as incoming customer texts
- Enumeration-safe: requestCode always returns ok:true regardless of phone match
- 3-codes-per-hour rate limit per phone
What this looks like in a shop
Illustrative scenario: Sarah just got her Tesla tinted at Sample Shop LLC. The shop rang her up, she paid via pay link in the lobby. Two days later she remembers Mike said something about checking her warranty in the app, but she lost the SMS link. She downloads SalesThumb, taps 'I'm a customer', types Sarah Chen + 555-0142, gets a text with a 6-digit code, and lands on her account with the appointment history and the warranty cert for her Tesla. No password, no support call to the shop.

Customer login flow
Customer portal — magic link
Text or email a link and they land in their portal, no password
The fastest path to put a customer in their own self-serve portal: text or email them a magic link from the customer detail page. They tap once, they're in. No password setup, no app install, no forgotten-credentials tickets to your front desk. Every send mints a fresh 30-day token — the old one keeps working too, it isn't revoked. The mobile app's SMS-code login mints a similarly-shaped token into the same table, though the two flows currently generate different-length hex strings under the hood.
- 'Portal link' dropdown on the customer detail page — Copy link / Text to customer / Email to customer
- 30-day token expiry — sending again mints a new token, it doesn't revoke the old one
- SMS or email delivery (operator picks per send)
- Lands at /portal/<token> — no password, no signup
- Customer sees: appointments, invoices, quotes, warranties, vehicles, loyalty card
- Token-scoped — no auth bleed between customers
What this looks like in a shop
Illustrative scenario: Sample Shop LLC just finished a $1,840 ceramic coating. Mike opens Sarah's customer page, clicks 'Portal link' → Text to customer. She gets an SMS with a link to view her job. She taps it, sees her warranty status and her invoice. No account creation, no support call, and Mike never had to email her a PDF.

Operator sends the portal link
Job Photos (Before / After / Damage)
Before and after photos, with AI that writes up the damage.
Photos are the most under-used tool in a tint shop. Shot right, they win disputes and turn every install into shareable content. SalesThumb captures before and after photos from the installer's phone (damage shots are tagged on the appointment's photo tab in the web app), links each shot to the appointment (and through it to the customer and vehicle), and gives the customer a branded gallery URL they can share. On the Pro plan, AI helps with damage too: mark an inspection item as an issue, snap a photo, and the AI writes up what it sees (the kind of damage, where it is, and how bad) as a draft note the tech can review, edit, or clear. When something goes wrong six months later — 'was that scratch there?' — you open one screen, see the pre-install damage-tagged photo with the timestamp, and the conversation's over.
- One-tap shortcut from today's schedule to the active appointment
- Before / After tabs on the job screen — pick one, then snap
- Photos stage on the job, then upload in one batch — a failed upload stays staged for a retry
- AI-suggested caption per photo in the web app (Pro plan) — edit or accept
What this looks like in a shop
Illustrative scenario: Black Tesla comes in, has a small scratch on the front bumper. Installer tags it as damage with a photo + caption. Three hours later the ceramic coat is done, installer captures 8 after-shots. Customer gets a laid-out gallery URL they can share with friends. The tagged, timestamped damage photo is there if a 'did you do this?' question comes up.

Gallery view

Also on mobile
Photo → Quote and Install QC — the two AI photo tools, on the Pro plan — sit right on the mobile app's Today screen, one tap from the installer's job queue.
Live job tracker
Customer follows the job in real time. No 'where's my car?' calls.
Generate a tracker link for an appointment and text it to the customer. The page shows a live status — Confirmed, Checked in, In progress (with the current stage name), Ready for pickup, or Complete — and refreshes every 30 seconds while the job is active. They don't need to call you, you don't need to call them. Once the job is marked complete, the page links out to the photo gallery, which also hosts a tip-the-crew card.
- Public /track/<token>?appt=<id> URL, generated per appointment
- Live status: Confirmed / Checked in / In progress / Ready for pickup / Complete
- Auto-refresh every 30s while the job is active — stops once it's done
- ETA estimate in minutes remaining, computed from stage timestamps
- Post-completion: links to a separate photo gallery + tip-the-crew page
- Token-scoped — no login, no app install
What this looks like in a shop
Illustrative scenario: Marcus drops his F-150 for a full ceramic. He gets a tracker link via SMS. Throughout the day he glances at the tab — Checked in → In progress (Film cut, ~40 min remaining) → Ready for pickup. Marcus never called the shop. Pickup is smooth, and afterward he taps into the photo gallery to leave a tip.
Customer's tracker view
Customer CRM
Every customer, vehicle, and history in one place.
Your shop's five-year memory, in one searchable place. Every customer, every vehicle they've owned, every appointment you've done, every quote, every payment, every photo, every SMS — all reachable from their profile the second someone walks in the door. Search by plate, VIN, phone, or a guess at the name. No more spreadsheets, no more paper folders, no more asking the tech if you've done this car before. The record stays clean because the product forces it to.
- Unlimited customers on every plan — never archived, never charged per-contact
- Multi-vehicle per customer
- Notes, tags, and VIP / referral-source / fleet / do-not-book labels
- Marketing opt-in per customer, plus a hard SMS opt-out (STOP) with the consent source and date recorded — TCPA-ready
- Customers with any quote, invoice, appointment, or warranty can't be deleted — merge duplicates instead
- Per-customer portal link — they see their own quotes, invoices, warranties
What this looks like in a shop
Illustrative scenario: Jessica rolls into the shop in a blacked-out G-Wagen. You punch in 'BLK4U' — the plate pops right up. You see she was in 18 months ago for ceramic, there's a scratch she noted last time, her phone is on file, and she's tagged 'VIP Referral Source.' Her notes and past jobs are right there when you start her install quote.

Customer profile

Also on mobile
The mobile app's Customers tab lists every customer with lifetime value at a glance — the same CRM data as the web app, in your pocket.
Sales playbook engine
Every paid invoice fires a 12-month sales sequence. Hands-off.
Your busiest day is the day you don't follow up. The Sales Playbook does it for you: when an invoice flips PAID, a six-step nudge sequence enqueues against the customer — t+24h review, t+7d warranty registration, t+30d cross-sell, t+90d maintenance check, t+180d win-back with a discount, t+365d anniversary — each delivered by SMS (the only channel — there's no email variant) at the scheduled time, except the review step, which is logged on the timeline while the review ask itself goes out through your separate review-request automation. Five of the six steps use editable template copy with merge fields ({{firstName}}, {{shopName}}, etc.); only the cross-sell step's pitch line is written per-customer by AI, using the customer's real purchase history. Replies are AI-classified and acted on. Operator opt-outs honored. Per-shop kill switch, per-customer opt-out, full timeline view per invoice.
- Six-step sequence per paid invoice (t+24h → t+365d)
- SMS only — no email channel for playbook nudges
- AI-written pitch line for the cross-sell step, using real purchase history
- AI reply intent classifier — auto-marks DONE / SKIPPED / opts customer out (confidence-gated, 0.7 floor)
- Per-shop master kill switch + per-customer opt-out (NUDGES OFF keyword)
- Per-shop template editor: edit the copy, change the delay, disable a step
What this looks like in a shop
Illustrative scenario: a month after a shop starts using the playbook, the first +30d cross-sell texts go out and three customers reply 'yes pls send PPF quote' to the +30d cross-sell — the owner sees them flagged FOLLOW UP MANUALLY in the next-morning replies digest and sends quotes the same day. The shop had been doing zero post-paid follow-up before this; the only ongoing operator time it costs is reading the digest.

Playbook timeline · invoice #2841
Online Booking
A booking page that actually fills your slow days.
Your booking page is your salesperson at 11 PM. It lives at your own link (salesthumb.com/book/midnight-tint), works from any phone, and is branded to your colors, your logo, your services. Customers walk a 4-step flow — pick a service, choose a time, enter their info, review and confirm — see your real availability pulled from the same calendar you run the shop on, and pay a deposit if you require one. Every booking creates a customer record, an appointment on your calendar, and a confirmation. You sleep, the funnel works.
- Branded mobile page — your logo, accent color, welcome message
- Service picker with name, category, description, duration, and price
- "Describe what you need" helper matches plain-English requests to the right service
- Calendar + time-of-day grouped slot list (morning / afternoon / evening) pulled from real availability
- Optional preferred-installer picker, showing pinned award badges
- Vehicle year/make/model/color — optional text fields, no scan required
What this looks like in a shop
Illustrative scenario: Thursday at 11pm a customer finds your shop on Instagram. They tap your bio link, pick ceramic tint, see your real availability, and book a Saturday slot. If your policy requires it, they pay a deposit right there. You wake up to a confirmed booking on your calendar and a new customer record — no DM back-and-forth.

Booking landing
Employee + owner recognition
Milestones, badges, and a wall they actually care about.
Tint and detail shops are full of installers who quietly close their 100th job or rack up years of tenure — and nobody notices. SalesThumb's Awards system makes recognition automatic. A daily job checks the numbers your shop already tracks (completed jobs, tenure, revenue and five-star reviews from customers each tech served, and weeks with 5+ completed jobs) and grants milestone badges on its next run after criteria are met. Each employee gets a collection wall on their profile. HQ rolls every shop's awards into one chain-wide leaderboard. And the awards an employee chooses to pin show up publicly on your booking page — turning recognition into a sales tool.
- 15 starter templates (10/50/100/250/1,000 completed jobs, 1/3/5/10-year anniversaries, $25k/$100k/$500k revenue, 10 five-star reviews, a Perfect Week, and a manual Founder's Award)
- Auto-grant cron — nightly job evaluates criteria DSL per template
- Auto-grant metrics: jobs_closed, tenure_days, revenue_cents, five_star_reviews, perfect_weeks (one threshold per starter template)
- Per-employee collection wall at /app/profile/awards showing earned badges
- HQ org-wide rollup at /app/hq/[orgId]/awards — leaderboard across every shop
- Pinned awards surface publicly on the booking page as live social proof
What this looks like in a shop
Illustrative scenario: Marco at Sample Shop LLC closed his 250th job on a Tuesday afternoon. The next daily auto-grant run caught it, awarded the 'Quarter Master' badge, and dropped it on his profile wall. Wednesday morning Mike (the owner) saw the new badge on the team awards wall and texted Marco a congrats, and Marco pinned the badge so it shows beside his name on the shop's public booking page.

Awards collection wall

Also on mobile
The mobile app's Awards tab shows the team awards wall — milestone, tenure, and manager-pick badges — right on the phone in a tech's pocket.
Lifecycle kanban
Every customer, on a board your team actually moves.
Most shops know who their VIPs are and who they haven't seen in a year, but there's no single screen that shows the relationship, not just the appointment. The Customer Pipeline seeds six starter stages (rename, recolor, add, or remove any of them), and every customer's card shows real signals at a glance — last visit, lifetime spend (computed live from actual payments, not a stale cached total), vehicle count, last contact. On Basic and Starter, new customers you add with a phone or email (and new web-form leads) land in your default stage automatically; on Growth and Pro those leads go to the Workflow board instead and new customers wait in an 'unplaced' tray until someone places them. Every move after that is a deliberate drag — or an auto-stage rule you defined yourself, with your own thresholds, that runs once a day or on demand.
- 6 starter stages: Lead, Prospect, Active, At Risk, Won Back, Churned — fully renameable, recolorable, and reorderable
- Card data computed live: lifetime spend from actual completed payments, last visit, last contact, vehicle count
- Optional auto-stage rules you configure: no-visit-days, no-contact-days, lifetime-spend thresholds, first-visit-within-days — each with its own destination stage
- Auto-stage rules run once a day (15:00 UTC), or on demand via 'Run rules now'
- Range presets (Today / week / month / 30d / 90d / YTD / 12mo) drive the stats strip — Total, Active-in-range, At Risk, Avg time in stage
- Drag-and-drop between stages; click a card to open the full customer record
What this looks like in a shop
Illustrative scenario: Sample Shop LLC's manager set up two auto-stage rules a while back — no visit in 90 days moves a customer to At Risk, and a first visit within the last 30 days moves a customer to Active. She opens the pipeline Monday morning, sees the latest daily rule run already surfaced 6 newly-At-Risk customers with a lifetime spend north of $1,000 each, and drags two of them straight into a follow-up conversation she starts from their customer record.

Pipeline kanban — 6 bands at a glance
More in customer experience
Supporting tools that round out the pillar.
Tip-the-tech
On the photo gallery, customers can tip the team — chip presets + custom amount. 100% goes to the shop, no platform cut.
Pickup-ready · one-tap SMS
Job hits COMPLETED → dashboard surfaces a 'Notify ready' button that texts the customer with a deep link to the photo gallery. Closes the loop.
Auto-SMS at status changes
Work moves to IN_PROGRESS → customer is texted that work has started, with a link to track it live. Moves to READY → texted that it's ready for pickup. No manual messaging discipline required.
Reputation module
Collected Google + Yelp reviews on a single page, AI reply-draft queue, auto-republish to your booking page footer for fresh social proof.
No-show recovery auto-SMS
Mark an appointment as a no-show and SalesThumb automatically texts the customer that you missed them; rebooking is a staff follow-up.
Loyalty + gift cards + coupons
Stamp-card style loyalty programs, sellable gift cards, single-use + multi-use coupon codes — coupons apply as a discount line when you build the invoice.
Lobby kiosk check-in
Tablet at the front desk: customer types last-4 of phone, system finds their appointment, marks them checked in. No staff intervention.
Other pillars
The full feature taxonomy.