What shipped tonight
A one-page recap of every change that went live on May 22, 2026. Designed to be scannable in 60 seconds.
Text pricing sheets to customers
From the Style Database, reps now pick a customer, toggle Email + Text (or either), and send. Customers get a punchy SMS with a link to a mobile-friendly pricing page in our brand aesthetic. Five rotating SMS variants so repeat texts don't feel robotic.
Why it matters: Customers respond to texts way faster than emails. This was the #1 thing slowing down the quote-to-approval handoff.
Pricing links rebuild live every visit
When a customer taps an old pricing link, the page recomputes prices from the current Style Database -- not a snapshot from when we sent it. Update a cost in the admin and every outstanding link reflects the new number, no cleanup.
Why it matters: Means we can confidently leave links out in the wild without stale-pricing risk. No expiration logic to manage.
Customer onboarding flyer at /onboarding
One-page printable customer flyer walking the 6-step journey from first inquiry to pickup, with a rush-order callout and contact footer. Reps can text or email the link, or save the PDF and hand it to anyone. Auto-linked from every proposal review page so first-time customers can scan it before locking in.
Why it matters: Saves the rep from answering "so what happens next?" 50 times a week. Customer feels informed; rep gets their time back.
Full-name search finally works
Typing "Matt Foley" on the customer database (or any other search box in the app) now matches Matt Foley. Previously the search did one literal-string match per column and missed any row where the name split across first_name + last_name.
Why it matters: Reps were saying customers existed and the search said otherwise. Trust in the database is back.
More results, alphabetized
Customer-picker dropdowns now show up to 50 matches alphabetically (was capped at 8 in random order). Header tells you how many matches and nudges "keep typing" when the list hits 50.
Why it matters: Common last names like "Love" or "Smith" used to silently drop people past the 8th match.
Bold order summary on every proposal
Order History and customer-profile cards now lead with a big bold headline like "24 navy hoodies, 12 black hats, 6 white tees" -- auto-generated from the actual line items. Visible from across the room.
Why it matters: Customers describe past orders in plain English ("the hats we did last spring"). Reps no longer have to open every proposal to figure out which one.
Manual notes you can search by
Every proposal can carry a free-text note like "church camp shirts" or "Frontier basketball uniforms" -- rendered in a big readable yellow banner. The search bar matches against the note text too, so typing what the customer said pulls up the right order.
Why it matters: Plain-English customer speak beats proposal numbers. Reps stop hunting through 5 records to find the one.
Three ways out of the slide-out menu
The mobile menu used to be a trap -- once open you couldn't close it without navigating away. Now there's an X in the top-right, tapping outside the panel closes it, and tapping MENU itself is a real button.
Why it matters: It was stuck-on-the-menu the most-cited annoyance on phone and iPad sessions.
Floating refresh button on every page
A small circular refresh button sits bottom-right on phone and tablet only. Tap to do a full reload. Hidden on desktop (Cmd-R works there) and hidden in print so it doesn't end up on saved PDFs.
Why it matters: No browser address bar = no refresh button. Big quality-of-life win on mobile.
- Β·Migration 0052 -- pricing-sheet links table
- Β·Migration 0053 -- proposal manual_summary_note column
- Β·Removed the login gate from /pricing/ so customers don't get asked for a password
- Β·Fixed two Vercel build errors that were silently blocking deploys