Medspa EMR Phase 3 Design Preview
9:41
My Schedule Sarah M.
Thursday, April 24 — 3 appointments
10:00 AM En Route

Jennifer K.

Botox — Forehead & Crow's Feet

2847 Westover Hills Blvd, Richmond, VA 23225

Navigate
1:30 PM Confirmed

Marcus T.

Filler — Lips & Nasolabial

1105 Forest Hill Ave, Richmond, VA 23225

Navigate
8:00 AM Completed

Aisha W.

Microneedling

914 Huguenot Rd, Midlothian, VA 23113

390px · iPhone 15 viewport

Nurse Dashboard

Mobile-first. Nurses access this on their phone throughout the day.

1

Today's jobs only

Shows appointments for the current day, sorted by time. Completed jobs fade out. Future days aren't visible.

2

One-tap navigation

Navigate opens Apple Maps with the client's address pre-loaded. Uses lat/lng if available, falls back to address string.

3

Status progression

Each card shows one action button based on current status. Tapping On My Way mints the tracker token and fires the "on the way" SMS with a live tracking link.

Confirmed En Route In Progress Completed
4

Ownership guard

Nurses can only see and action their own appointments. API verifies nurseId = userId on every mutation.

9:41
GS

Glow Studio

Sarah is on the way

On the way
Live tracking active

Estimated arrival

~12 min

Public link — no login required

Client Tracker

Sent via SMS when nurse taps "On My Way". Public URL — no login needed.

1

Branded header

Shows the org's logo, name, and primary brand color. The "On the way" pill uses the org's configured color.

2

Live Mapbox map

Nurse's phone posts GPS coordinates every 5 seconds via WebSocket. Marker moves smoothly with map.easeTo().

3

Arrival transition

When nurse taps Arrived, a WebSocket broadcast replaces the map with a full-screen celebration state.

🎉

Your provider has arrived!

4

Token security

Each tracker link is a UUID token minted at "On My Way" time, expires after 4 hours. Only the nurse who holds the token can post positions.

app.glowstudio.com/admin/schedule
GS
Glow Studio
Thu, Apr 24
3 appointments
Time
Sarah M.
Jordan R.
Taylor K.
8:00
Aisha W.
Microneedling · 90min
Completed
Chris B.
Hydrafacial · 60min
Completed
10:00
Jennifer K.
Botox · 45min
En Route
Morgan L.
Filler · 60min
Confirmed
1:30
Marcus T.
Filler · 90min
Confirmed
Priya N.
PRP · 120min
Confirmed

Admin view — desktop

Admin Schedule

Day-view grid showing all nurses and their appointments side by side.

1

Multi-nurse view

Each nurse gets a color-coded column. Admin can see all appointments across all nurses for any day.

2

Live status updates

Status badges update in real-time as nurses progress through their jobs (revalidated on each nurse action).

3

Built in Phase 2

This screen was completed in Phase 2. Phase 3 added the status transitions that make the badges here meaningful.

9:41
GS

Glow Studio

SMS

Today 9:47 AM

Hi Jennifer! Your Botox appointment with Glow Studio is confirmed for Thu, Apr 24 at 10:00 AM. We'll come to you — no need to travel! Reply STOP to opt out.

Today 9:00 AM (24hr reminder)

Hey Jennifer! Just a reminder that your appointment with Glow Studio is tomorrow, Thu Apr 24 at 10:00 AM. See you then! Reply STOP to opt out.

Today 8:00 AM (2hr reminder)

Hi Jennifer! Your Glow Studio appointment is in 2 hours at 10:00 AM. Our nurse will be on their way soon. Reply STOP to opt out.

Today 9:52 AM

Hi Jennifer! Sarah from Glow Studio is on the way to you. Track your provider live:

Track Sarah

app.glowstudio.com/track/abc123

Client's iPhone — Messages app

SMS Notifications

Automated via Twilio + BullMQ. All queued at booking time, fired on schedule.

Booking Confirmed

Immediate

Fires the moment Stripe webhook confirms payment. Queued via BullMQ with 0ms delay.

24-Hour Reminder

scheduledAt − 24h

Queued with delay = scheduledAt − 24h − now. Skipped if appointment is under 24h away at booking time.

2-Hour Reminder

scheduledAt − 2h

Same pattern. Only queued if delay > 0.

On My Way + Tracker Link

Nurse taps button

Fired immediately when nurse taps "On My Way". Includes the live /track/[token] URL.

Queue architecture

All SMS jobs go through BullMQ + Upstash Redis. 3 retry attempts with exponential backoff. Queue failures never block the booking or nurse flow — they're wrapped in try/catch and logged.