Skip to content
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.

No credit card
Cancel anytime
9:41
Phone number, an optional name, and Send code. The customer types the 6-digit code from the text and lands on their own home screen.

The quick version

Customer login: Customers sign in to the same app with their name and phone.

  • 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

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.

A closer look

01

One app for techs, sales and customers

The mobile app lives in the App Store / Play Store as a single brand. The first-launch splash shows two big buttons: 'I'm a Teammate' and 'I'm a Customer'. Customers sign in with name + phone + a texted code; staff sign in with their usual email + password. Whichever sign-in is on the phone decides which screens open next time — the customer screens (Home / Garage / Profile) or the staff screens for that person's role.

  • Single iOS + Android app, single brand on both stores
  • Splash picker on first launch — no friction to find the right path
  • Staff and customer sign-ins are stored separately — if both are on one phone, the staff side opens
  • Push notifications work today on the staff side (new-job alerts, team voice messages); customer-side push isn't wired up yet
9:41
The mobile app lives in the App Store / Play Store as a single brand. The first-launch splash shows two big buttons: 'I'm a Teammate' and 'I'm a Customer'.

02

Why name + phone is safer than it sounds

Most apps use email + password (forgettable) or magic links (bounces in spam). Phone-based passwordless is the right shape for a service-business customer who probably booked their original appointment over the phone anyway. Three layers keep it secure: a 6-digit code (a million possibilities), a lockout after 5 wrong tries, and a limit of 3 codes per hour per phone. And asking for a code never reveals whether a phone number has an account, so nobody can use it to fish for customers.

  • 10⁶ code space + 5-attempt lockout = effectively guess-proof in the 10-min window
  • Codes hashed (SHA-256) before storage — DB leak doesn't expose codes
  • Phone enumeration prevention (always-ok response) shut at the protocol level
  • Token issued on success has a 30-day expiry and is revoked server-side when the customer signs out
SalesThumb mobile

SalesThumb™

Run, book, and track your jobs from one app.

I'm a customer
I'm a team member

Splash

Customer · Sample Shop LLC

See your job

Enter the phone number on your account.

(555) 014-2821
Helps us find your account
Send code

Sign in

Code sent to ···2821

Enter the 6-digit code

Arrived in 4 seconds. Expires in 10 minutes.

4
1
8
2
9
5

✓ Verified · landing in your portal…

Didn't get it? Resend in 0:42

Verify

Everything it does

The complete list. The plan tag above shows which plans include it.

  • 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
  • Constant-time hash comparison (SHA-256, no plaintext at rest)
  • Mobile session auto-expires after 30 days; re-auth via the same flow

A tour of the screens

Every meaningful view, the path through it, and the moments that matter — so you know exactly what you're buying.

One app, two login paths

Customer flow uses passwordless SMS code; staff flow uses email + password.

Both live in the same app on the same App Store listing.

9:41
Customer flow uses passwordless SMS code; staff flow uses email + password. Both live in the same app on the same App Store listing.

Customer home — their stuff only

Active job progress, upcoming appointments, quotes and invoices.

No staff data leaks; the portal token only authorizes the customer's own records.

9:41
Active job progress, upcoming appointments, quotes and invoices. No staff data leaks; the portal token only authorizes the customer's own records.

Who it's for

Built specifically for…

  • Shops whose customer base is phone-first (not email-first)
  • Shops who want their customer portal to feel like an app, not a magic link in SMS
  • Multi-location franchises where one customer might use 2-3 shops in the chain

What it replaces

The old way…

  • 'Send me the link again' phone calls when the magic-link SMS got buried
  • Customer-facing apps with email + password (forgotten passwords are a common support issue)
  • Two separate apps (customer app + employee app) for the same brand

Setting it up

  1. 1

    1. Splash → role pick

    First launch: 'Are you a customer or team member?' Two big buttons. Customer route asks name + phone; staff route asks email + password.

  2. 2

    2. Code arrives by text

    Customer types their phone number and gets a 6-digit code by text. They type it in, and SalesThumb checks it and keeps them signed in on that phone for 30 days.

  3. 3

    3. Customer tabs render

    On launch, the app sees the customer sign-in and opens the customer screens: Home (active job progress, appointments, quotes, invoices, loyalty), Garage (per-vehicle warranty status), Profile (account + sign out).

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.

Good to know

Which plan includes customer login?
Growth and Pro include it. See the Pricing page for everything in each plan.
What if a phone matches two shops in my chain?
The code request picks one customer record: an active shop's record first, then the one whose first name matches the name they typed, then the oldest match. The code and the sign-in it creates stay tied to that one shop. Future enhancement: a shop picker on the second login if multi-shop is common in your customer base.
What if texting is down?
The app moves to the code-entry screen either way (we don't surface delivery failures, by design — that would leak which phones are registered). They can tap Resend code (up to 3 codes per phone per hour). Operator can also generate a fallback magic-link from /app/customers/<id> and SMS it manually.
Can a staff member also be a customer?
Yes — the two sign-ins are stored separately, but when both are on one phone the staff side opens, so they'd sign out of the staff account to see the customer side.
Is this PCI / SOC 2 compliant?
The auth flow itself doesn't touch payment data. The codes are hashed at rest, transmitted over TLS, expire in 10 minutes, and rate-limited. SalesThumb doesn't have its own SOC 2 report yet — see the Security page.

Works with your stack

Tw

Twilio

Delivers the 6-digit SMS code

Be

Better-Auth

Powers the staff email+password side

Ex

Expo SecureStore

On-device token storage, encrypted at rest

Try customer login — no credit card.

Pick Basic, Starter, Growth or Pro on the pricing page and it's free for 30 days, no credit card. Some features need a higher plan; the pricing page shows which. Import your old data and be running by tomorrow.