openchair
FeaturesPricingAbout
Sign InStart Free Trial
Help Centre

Customers & Automation

  • Activity Feed
  • AI Booking Enquiry Auto-Responder
  • AI Style Preview
  • Automated Notifications
  • Birthday & Rebooking Automations

Customers & Automation

Treatment Photos

Last updated 19 May 2026

Treatment Photos

Private visual history of each client's treatment progression. Capture before/after pairs for aesthetics, front/back angles for hair colour, single shots for everything else. Filter by treatment area for aesthetics, group across visits into multi-session pieces for tattoo. The customer sees their own progression in their portal; you see it in their profile and on every booking detail.

Where to find it — Web: Customer profile → Photos tab. Mobile: Customer profile → Photos section. Booking detail also shows a chip and rail. Customer view: /your-slug/me?tab=photos.

TL;DR

  • Three capture modes: single, before/after paired, front/back paired (hair colour).
  • Aesthetics gets a treatment area filter (lips, jawline, eyes, etc.); tattoo gets multi-session "pieces" that span visits.
  • Append-only audit log on every photo (note updates, soft-deletes, restores) — required for clinical-record venues.
  • Available on every plan. Wellness & Spa venues have it suppressed by default.

How it's different from Portfolio

Aspect Treatment Photos Portfolio
Audience Private — staff + client only Public — on storefront for prospects
Per-client visibility Each client sees only their own Shared marketing gallery
Default visibility Visible to client and team Hidden until staff publish
Consent One-time per-client (treatment_photo_consent) Per-image consent flow
Retention Indefinite, soft-delete + audit Operator-curated
Promote path Can promote a before_after pair to Portfolio (Not applicable — Portfolio is the public end)

A treatment photo with the right consent can be promoted to Portfolio. Promote is gated on kind: "before_after" only — single and front/back pairs can't promote, because Portfolio needs a pair contract.

Capture modes

The mode you use depends on what you're capturing and (for some) the industry default. All three render the same way on mobile and web.

Single

One photo. Default for hair, barber, beauty, nails. Useful for "before this haircut" or "today's manicure."

Before / After

Paired photos, same view, two timepoints. Default for aesthetics. The "After" photo is taken later (next visit, post-treatment) and joins to the "Before" via the same record.

Front / Back

Paired photos, same timepoint, two angles. Default for hair colour — you take a front shot and a back shot of the same finished look. Convention: the After slot stores the front, the Before slot stores the back. Optional colour_formula_id link back to your colour-formula recipe.

How photos enter the timeline

Staff capture (primary)

From the customer profile Photos tab or the booking detail Take today's photo tile, tap Capture. On mobile, the device camera opens directly; on desktop, a file picker. Pick the mode (single / before-after / front-back) and any contextual tags (treatment area for aesthetics, piece for tattoo). Photos are stored in a private bucket; you'll see them in the timeline within a second.

Rate limit: 5 uploads per venue per hour. Allowed file types: JPEG, PNG, WebP, HEIC, HEIF. Max 10 MB each. Images are auto-converted to WebP at 1920px max width.

Consultation form auto-link

If your consultation form has a photo_capture field (single or paired), photos captured by the client during the form fill are automatically added to their treatment timeline when they sign. The form submission is the audit anchor, so you can always trace a timeline photo back to the form it came from. See Consultation Forms for how to add photo_capture to a template.

The linker runs after AI risk scanning and is non-blocking — if it fails for any reason, the submission still signs successfully and you can re-link from the submission detail.

Booking detail rail

The booking detail page shows a small "Last 3 photos" rail with a "Take today's photo" tile at the start. Use this when you want today's photo to be auto-attributed to this specific booking and stylist (the metadata is preserved for utilisation and audit).

There is no customer-uploaded path. The customer portal is read-only.

Per-vertical behaviour

Aesthetics — treatment area progression

Each photo can carry a treatment area tag (Forehead, Brow, Eyes, Cheek, Lip, Jawline, Chin, Neck, Full face), free-text fallback up to 60 characters.

The timeline shows filter chips for each tagged area so you can isolate a single region's progression. Useful when one client is having lip filler, brow lifts, and jawline work — you can see each region's history independently.

The audit log panel and a required delete-reason prompt are surfaced only for venues with industry "Aesthetics." Soft-delete without a reason is rejected.

Tattoo & Piercing — multi-session pieces

Group photos across visits into a piece that has its own lifecycle (in_progress → completed) and its own publishing consent (separate from the venue-level capture consent). A sleeve tattoo across 6 sessions becomes one piece; touch-ups added later join the same piece.

Each piece has:

  • A name
  • An optional placement (free-text, e.g. "left forearm")
  • A status (in_progress / completed)
  • An independent publishing consent flag

Start a new piece inline from the customer's Photos tab via + Start a new piece.

Hair colour — front/back pairs

Default pair mode for hair colour is front_back. Capture a front-of-head and back-of-head shot of the finished look at the same time. Optional link to the colour formula used (see your colour-formula library).

Wellness & Spa — suppressed

Treatment Photos is disabled by default for Wellness & Spa venues. Clients are often undressed or in low-light rooms; the photo workflow doesn't fit. The booking rail and capture affordances don't render. The day-of reminder SMS also doesn't include the photos link for wellness venues.

This is venue-scoped, not service-scoped. Contact support if you need an exception.

Consent

Two-axis consent:

  1. Capture / store consent (per-client, one-time) — treatment_photo_consent. The first time a client has a photo captured, a banner with a checkbox appears in the capture dialog. The checkbox value is recorded atomically with the first upload. You can also record consent ahead of time during onboarding.
  2. Publishing consent (tattoo pieces only) — publishing_consent. Distinct flag for studio / Instagram portfolio sharing of finished pieces.

Promoting to Portfolio uses Portfolio's existing per-image consent flow — separate from both above.

The customer portal view

Customers visit /your-slug/me?tab=photos and see their own treatment timeline. They can:

  • Browse photos newest-first
  • Tap to zoom (lightbox)
  • Filter by area chip (if aesthetics) or piece chip (if tattoo)
  • See the date label per photo

They cannot download, upload, edit, comment, or remove photos. To request removal, they contact you; you handle the soft-delete through the operator viewer (and supply a reason if you're on Aesthetics).

Notes on photos and any portfolio-promotion state are stripped server-side before the portal sees them.

Day-of reminder deep link

When a customer has a booking tomorrow AND has at least one non-deleted treatment photo, their day-of SMS reminder includes a deep link:

"See your last visit: {portal link}"

The link uses a ?source=reminder parameter so we can distinguish reminder-driven portal views from direct visits in analytics. Wellness venues (suppressed industry) don't get this link.

Failure to look up the photo state is non-fatal — the reminder still goes out without the link.

Audit trail

Every change to a photo is logged in an append-only audit log with:

  • Action: note_update, soft_delete, or restore
  • The staff member who did it
  • Before / after values
  • A free-text reason (required for delete on Aesthetics)
  • Timestamp

The audit log is INSERT-only at the database level — no row is ever updated or deleted. Re-saving an unchanged note is a no-op (doesn't pollute the log).

The audit panel renders inside the photo viewer only for Aesthetics venues to keep the surface lean for other industries. The data is preserved for everyone; the panel is just hidden when clinical-record retention isn't required.

Photos are stored as 30-minute signed URLs from a private storage bucket — short enough to prevent replay, long enough for a session.

Soft-delete and retention

Deleting a photo is a soft delete — the row gets a deletedAt timestamp and is hidden from the timeline. The storage object is preserved for now (cron purge is a planned phase).

To restore a soft-deleted photo, use the audit log entry (operator-only).

Aesthetics venues are required to provide a delete reason; the prompt blocks submission until you type one. The reason is anchored to the audit row for clinical-record compliance.

Mobile parity

The mobile customer profile has the same Photos section as web. Capture from the booking detail with the front camera (selfies) or rear camera (aesthetics, tattoo). Viewer, delete, promote-to-portfolio — all parity. Customer view is the responsive web portal (no native customer app).

Telemetry

Anonymous adoption telemetry events fire to PostHog:

  • treatment_photo_captured — on each successful capture, tagged with kind
  • treatment_photo_portal_viewed — on each portal load, tagged with source: "reminder" | "direct"

No PII, no image data, no notes. Just counters for adoption tracking.

Common mistakes

Problem What to check
The Photos tab isn't on the customer profile Your venue is Wellness & Spa, which has Treatment Photos suppressed by default. Contact support if you need it enabled.
Capture dialog won't accept my photo Check the file type (JPEG/PNG/WebP/HEIC/HEIF only), size (10 MB max), and your hourly rate limit (5 per venue per hour).
Photo from a consultation form isn't on the timeline Re-run the photo-timeline linker from the submission detail. The photo is preserved in the submission record.
Customer says they can see their photos in the portal but can't download By design. The portal is read-only. If they need a copy, send it to them via your normal channel.
Delete didn't work — error about reason You're on Aesthetics. The delete reason is required for clinical-record compliance. Type a reason and try again.
"Promote to Portfolio" button is greyed out Only before_after pairs can be promoted to Portfolio. Single and front/back can't because Portfolio needs a paired contract.
Pieces section isn't visible for my tattoo venue Confirm your venue's industry is set to Tattoo & Piercing. Pieces are enabled per-industry.
Day-of reminder doesn't include the photos link Either the venue is Wellness, the customer has no photos yet, or the venue has no slug.

FAQ

How is this different from Portfolio?

Treatment Photos is private clinical / progression history for a single client — visible to your team and the client through their portal. Portfolio is your public marketing gallery, shown on the storefront. Different consent flow, different retention, different audience. A treatment photo can be promoted to Portfolio if you have the right consent.

Where does the photo come from?

Three ways: staff capture from the booking detail or customer profile, the customer fills a consultation form with a photo_capture field (auto-linked to the timeline), or via the dedicated booking rail. Photos always come from inside OpenChair — customers can't upload from their portal.

Why doesn't my Wellness venue have the photo rail?

Wellness & Spa is intentionally excluded from treatment photos. Clients are often undressed or in low-light rooms, and the photo workflow doesn't fit. Other industries (Hair, Barber, Aesthetics, Nails, Beauty, Tattoo) all have it enabled by default.

Can clients see their own photos?

Yes, in their customer portal at /your-slug/me?tab=photos. The portal is read-only — they can view and zoom but can't download, edit, or remove. To request removal, they contact you and you handle it through the operator viewer.

Do I need PRO?

No. Treatment Photos works on every plan — capture, view, paired modes, area tags, audit log, customer portal, and the day-of reminder deep-link. AI features layered on top (auto-pair, auto-tag, draft caption on promote) require PRO when shipped.

Is there a limit on how many photos I can store per client?

No hard cap. The 10 MB per-image limit and 5-per-hour upload limit are the only constraints. Storage is part of your account; there's no per-photo charge.

Related Articles

  • Customer Profile & History
  • Consultation Forms
  • Portfolio & Gallery
  • Patch Tests
openchair

The operating system for high-end service venues. Built in Australia for the world.

Product

  • Features
  • Pricing
  • AI Features
  • Mobile App
  • Online Booking
  • AI Concierge
  • Sign In

Solutions

  • Hair Salons
  • Barbers
  • Beauty
  • Wellness & Spa
  • Nail Salons
  • Tattoo Studios

Compare

  • All comparisons
  • vs Fresha
  • vs Timely
  • vs Square
  • vs Booksy
  • vs Mindbody
  • vs Boulevard
  • vs Phorest
  • vs Mangomint
  • vs GlossGenius
  • vs Vagaro
  • vs Shortcuts
  • vs Acuity

Resources

  • Blog
  • Help Centre
  • Guides
  • Glossary

Company

  • About
  • Contact
  • Book a Demo
  • Founding Members

Legal

  • Privacy
  • Terms
  • Cookie Policy
  • Sub-processors
  • Accessibility
  • Privacy Request

© 2026 OpenChair Platform. All rights reserved.

Made on the Goldie.