Everything the scanner has ever seen, kept.
The scan is the part clients notice. The part that compounds is the record it leaves behind — structured findings, attribution, contact linkage and full history, in a store that belongs to the salon and exports at any time.
Serverless at the edge. No box to maintain.
The system runs on a global edge network rather than a server in one region. Nothing for a salon to host, patch or restart.
What a single scan actually stores.
Readable identifiers, structured findings, and enough context to reconstruct where the client came from and what they were told.
Phone numbers are normalized to E.164 at write time in every component, which is why one client scanning from two surfaces resolves to one contact rather than two.
- record_id
- NS-260731-4K2QX
- created_at
- 2026-07-31T14:22:07Z
- salon_id
- hou-004
- surface
- paid_lander
- utm
- meta / jul-retarget / mobile-ios
- obs.surface
- Smooth through the free edge
- obs.color
- Clear natural tone, all five
- obs.structure
- Strong side walls, even thickness
- obs.cuticle
- Dry, moderate build-up
- obs.confidence
- 0.88
- wear_type
- gel_recovering
- prep_steps
- none needed
- recommended
- full_gel_set · 95.00
- care_plan
- cal_maintain_v2
- rubric_version
- v2.4
- contact_id
- crm_8f21c4
- sync_state
- synced · 1 attempt
- consent_ref
- cns_260731_0912
Built by people who treat your client list like it is the business.
Not features on a roadmap. Each exists because something failed in production and the fix was made structural rather than manual.
Write before deliver
The record is persisted before any email, SMS or CRM call is attempted. A downstream outage can delay a notification. It cannot destroy a scan.
Bounded retry queue
Failed writes are queued and re-attempted on a fixed schedule, bounded on attempts and age — so a queue cannot grow forever or hammer a recovering service.
No silent expiry
An early build carried a 180-day expiry that quietly deleted completed reports. Found, removed, every affected record migrated. Retention is now explicit and tested.
Post-deploy assertions
Field mappings, workflow state and event wiring are checked automatically after every deployment, because all three have shipped broken before and none fail loudly.
Reconciliation tooling
Records are matched against CRM contacts by identity and timestamp window to find orphans. Run at scale in production: 287 historical records reconciled in one pass.
Environment isolation
Test paths are environment-gated after a hardcoded test address once created a phantom contact in a live CRM. Staging cannot write to production.
Whose data this is, and what happens to it.
Clients are photographing their own hands and handing over a phone number. That deserves a clear answer, not a privacy policy nobody reads.
You can see where people give up.
Every surface is instrumented — clicks, rage clicks, dead clicks, scroll depth, exit points and completion, attributed by campaign and device. The output is not a heatmap you squint at: pages are ranked by a friction score and the findings are written in plain language, because the question a salon owner has is “what is costing me bookings,” not “where is it warm.”
- Ranked by friction, so the worst page is the first thing you see
- Plain-language findings above the visualisation, not buried under it
- Per-step drop-off through the scan flow itself, not just page-level
- Campaign attribution carried to completion, so you know which ad brings people who finish
Ask to see the console, not the brochure.
We open the staff console on the call, look up a live record, show you the sync state, and export it in front of you.