ClinicFlow Walkthrough

How the three roles — super admin, clinic admin/staff, and patient — actually use ClinicFlow day-to-day. Each role gets its own section with the URLs they hit, the steps they take, and the gotchas to avoid.

The model in 60 seconds

ClinicFlow is a multi-tenant platform — one codebase serves many clinics. There are three audiences, and they live at different layers of the system:

┌─────────────────────────────────────────────────────────────────────┐ │ Platform layer (you, the operator) │ │ ─ One Super Admin (Mia) creates and bills clinics │ └────────────────────────────┬────────────────────────────────────────┘ │ creates ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ Clinic layer (Sunrise, Clearwater, Horizon, …) │ │ ─ Each clinic = one Tenant │ │ ─ Has its own staff (admin, doctors, front desk) │ │ ─ Sees only its own patients, charts, billing │ └────────────────────────────┬────────────────────────────────────────┘ │ enrolls ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ Patient layer │ │ ─ Self-registers at <clinic-slug>.your-domain.com/register │ │ ─ Sees only their own appointments, notes, prescriptions, bills │ └─────────────────────────────────────────────────────────────────────┘

The cleanest mental model: platform owns clinics; clinics own patients. The super admin never sees individual patient charts; a clinic never sees another clinic's patients. Each layer can only reach down one level.

URLs at a glance

URLAudienceWhat's there
/setupFirst-ever super adminOne-time bootstrap form. Locks itself the moment a super admin commits.
/loginEveryoneSingle sign-in form. The tenant slug + email decides where you land.
/registerPatientSelf-registration for a patient portal account. Requires a clinic slug.
/admin/*Super adminTenants, plans, audit logs, AI monitoring, platform settings.
/clinic/*Clinic staffCalendar, patients, encounters, prescriptions, labs, billing, AI skills.
/portal/*PatientTheir own appointments, lab results, prescriptions, invoices, messages.

Who creates whom

RoleHow the account is created
Super Admin platform Self-registers once at /setup on a fresh deploy. Endpoint locks afterwards.
Clinic Admin clinic Created by the super admin via /admin/onboard in the same form that creates the clinic.
Clinic Staff (doctors, nurses, front desk) clinic Invited by an existing clinic admin via /clinic/staff → "Invite staff". The invitee gets an emailed link, sets their own password.
Patient patient Self-registers at <clinic-slug>.your-domain.com/register. Open enrollment — anyone can become a patient at any clinic that's accepting registrations.
Important: roles aren't picked from a dropdown. The role you become depends on which URL gate you walked through. That's a security choice — public forms can never escalate themselves to privileged roles.

Super Admin walkthrough

You operate the ClinicFlow platform itself. You don't see PHI, you don't write notes, you don't bill patients. You create clinics, manage their plans, and watch the platform.

First-run setup (you, once per deployment)

https://your-domain.com/setup

On a brand-new deployment, the database is empty. The first person to visit /setup registers as platform super admin. The endpoint then locks itself forever.

1
Open /setup in your browser. If a super admin already exists, the page shows "Setup complete" and links to /login.
2
Fill in your name, email, and a strong password (12+ chars).
3
If SETUP_TOKEN is set in your env, paste it. (See callout below.)
4
Submit. You're signed in and redirected to /admin.
Race-window safety. If your deployment is publicly reachable before you visit /setup, set SETUP_TOKEN to a long random string in your environment. The form will then require that string, and only you have it. After the first admin commits, SETUP_TOKEN stops mattering — the endpoint is closed regardless.

Signing in afterwards

https://your-domain.com/login
  • Tenant slug: leave blank — super admins are tenant-less
  • Email + password: what you set at setup
  • Lands at /admin

Onboarding a clinic

/admin/onboard

Creates a Tenant plus the first clinic admin user in one form. After this, the clinic is self-serve — you don't add their staff, they do.

  1. Tenant name (e.g. "Sunrise Family Clinic")
  2. Tenant slug (URL-safe, e.g. sunrise) — they'll live at sunrise.your-domain.com
  3. Time zone, locale, plan
  4. Clinic admin's name, email, and a temporary password
  5. Submit → tenant + clinic admin created. Hand the credentials to the clinic over a secure channel.
Optional: if your DNS has a wildcard CNAME for *.your-domain.com, the new tenant subdomain works immediately. Otherwise you'll need to add a per-tenant CNAME.

Managing tenants

From /admin/tenants:

Audit & monitoring

PageWhat it shows
/admin/audit-logsEvery authentication, configuration change, and admin action across all tenants. Filter by tenant, actor, or action type.
/admin/ai-monitoringAI invocations per tenant — model used, tokens billed, average latency, approval rates, pending actions awaiting human review.
/admin (Stats)Platform-wide counts: tenants, users, patients, appointments-this-month, AI runs, pending actions.

Feature flags & platform settings

+

Clinic Admin & Staff walkthrough

You work at a specific clinic — Sunrise, Clearwater, etc. You see only that clinic's patients, schedule, and billing. Inside, your specific role (admin, doctor, front desk) decides which screens and actions are available.

Accepting your invite (first time only)

Your clinic admin sends you an invitation email with a one-time link. Click it, set your own password, you're in. The clinic admin never sees your password.

Signing in after that

https://<your-clinic-slug>.your-domain.com/login

If you visit your clinic's subdomain directly, the slug field is hidden — we already know which clinic you're signing in to. From the apex domain, type your clinic's slug.

You land at /clinic with the sidebar showing every section your role has permission for.

Adding a patient

/clinic/patients/new

Create a chart for a new patient. The form has eight sections:

  1. Identity — MRN (auto-assigned if blank), legal name, preferred name, DOB, sex, gender identity
  2. Contact & address — email, phone, full address
  3. Insurance — carrier, member ID, group
  4. Care team — primary provider (searchable dropdown of clinic providers)
  5. Emergency contact — name + phone
  6. Risk flags — tag chips like fall_risk, blood_thinner
  7. Allergies — searchable common-allergens list + free-text
  8. Active medications — repeatable rows with name, dose, frequency
  9. History & internal notes — encrypted at rest

Submit creates the chart. Note: this doesn't create a portal login for the patient. They self-register separately, or your clinic admin can wire up a portal-invite flow.

Scheduling appointments

/clinic/calendar/new

Click a slot on the calendar or use the dedicated form. Fields:

  • Patient + provider (both searchable)
  • Date (calendar widget) + time + duration
  • Type (consultation, follow-up, physical, telehealth, procedure, …)
  • Mode (in-person / telehealth / phone)
  • Room + location notes (if in-person)
  • Chief complaint + pre-visit notes for the AI brief
  • Reminder toggles (24h, 1h)
  • Prep flags (fasting, bring ID, bring insurance)
  • Recurring series (weekly / biweekly / monthly + count)

Encounters & notes

From /clinic/encounters or directly from a patient's chart:

Writing prescriptions

/clinic/prescriptions/new

Multi-medication Rx writer. Each row supports:

  • Drug name (with autocomplete on common drugs), strength, form
  • Dose, frequency (QD/BID/TID/QID/etc.), route
  • Days supply, dispense quantity, refills (0–11)
  • Toggles: controlled substance, dispense-as-written, PRN
  • Patient instructions (auto-generated sig, override-able)

The patient's allergies surface in a banner at the top so you cross-check before signing. After signing, you can send to the configured eRx provider in one click.

EPCS: controlled substances need a DEA-certified second factor at signing. The eRx send may fail from this UI alone for Schedule II–V — finalize from your EPCS device.

Lab results

/clinic/labs/new

Pick a panel template (CBC, CMP, Lipid, A1C, TSH, UA) to pre-fill standard tests with LOINC codes and reference ranges, or build a custom set row by row. Fill in the value column; the abnormal flag auto-derives from numeric value vs reference range. Each row saves as its own structured lab attachment.

Billing

Inviting more staff admin only

/clinic/staff → "Invite staff"
  1. Click the Invite staff button
  2. Enter their email, full name, role (Doctor / Nurse / Front Desk / Clinic Admin)
  3. System emails them a one-time link
  4. They click, set their own password, you never see it
  5. They land at /clinic with permissions matching their role

AI Skills

Fifteen specialized AI skills are available at /clinic/ai. Every skill produces a draft; tenant policy decides which can auto-apply versus which need clinician review. Highlights:

Every invocation is logged: model, prompt version, tokens, reviewer, outcome. Auditors can replay anything.

Patient walkthrough

You're a patient at one of the clinics on ClinicFlow. The portal is where you book visits, fill out forms before your appointment, message your care team, and view your records. You only see your own data.

Creating your account

https://<your-clinic-slug>.your-domain.com/register

Your clinic gives you the URL — usually printed on intake docs, in a confirmation email, or linked from their website. The clinic name will already be filled in if you click the link from there.

  1. Full name, email, phone
  2. Password (at least 12 characters, mix letters/numbers/symbol)
  3. Submit — you're signed in immediately at /portal
  4. You'll get a verification email shortly. Click the link to confirm your address.
If a chart already exists for you: the system tries to match your registration to it by email. If it can't, your clinic will reconcile during your first visit.

Filling out intake

/portal/intake

Five sections, none required but all useful for your provider:

  • Medical history — checklist of common conditions, surgeries, recent hospitalizations
  • Current medications — drug, dose, frequency (including OTCs and supplements)
  • Allergies — drug, food, environmental — plus the reaction
  • Family & social history — lifestyle, smoking, exercise, occupation
  • Mental health check-in — quick PHQ-2 + GAD-2 screen (4 questions, ~30 seconds)

Plus a documents section for uploading insurance cards, prior records, referrals.

Requesting a visit

/portal/booking

You don't book the visit directly — you submit a request, and reception confirms a time and follows up.

The form covers reason for visit, symptom duration + severity, scheduling preferences (calendar widget for date, time-of-day window, optional backup date), insurance, language & accessibility needs, and any notes for the team.

Joining a telehealth visit

/portal/telehealth

The "Join visit" button activates 10 minutes before your scheduled start time. We recommend joining 5 minutes early to test your camera and microphone.

The page also shows a short prep checklist: stable internet, good lighting, quiet private space, your meds nearby.

Prescriptions & refills

/portal/prescriptions

See active and past prescriptions. Each shows the drug, dose, instructions, refills remaining, pharmacy, and a downloadable PDF.

Need a refill? Click Request refill on any active prescription. Your provider must review and authorize before the pharmacy is notified — refills aren't auto-approved.

Reading lab results

/portal/labs

Released results, grouped by date, with reference ranges and abnormal flags. Critical values trigger a banner at the top of the page along with notification to your provider.

We don't auto-interpret values. The reference ranges are shown for context, not as a diagnosis. If a result worries you, message your provider rather than self-interpreting.

Paying invoices

/portal/invoices

Outstanding balances total at the top. Click Pay now on any payable invoice — we redirect you to the clinic's payment provider (Stripe or Square) over a secure connection. ClinicFlow never sees your card number.

You can also view paid invoices for tax/insurance purposes.

Profile & security

Note: your legal name, date of birth, and MRN are managed by your clinic, not by you. If anything's wrong, message your care team.

Cross-cutting

Forgot password

From /login, click Forgot password. Enter your email. If an account exists, we send a reset link valid for 60 minutes. The response is the same whether your email matches or not — that's intentional, so attackers can't enumerate accounts.

Multi-factor auth (TOTP)

Available for all roles. From your profile page, scan the QR code with any authenticator app (1Password, Authy, Google Authenticator, etc.). After enabling, every sign-in asks for a 6-digit code in addition to your password. Recovery codes are issued — store them somewhere offline.

Common issues

ProblemLikely causeFix
Login says "Account does not have access to this tenant" Wrong slug for your account, or your account isn't linked to that clinic Double-check the slug; if you're a patient, register at the clinic's URL
"Account is temporarily locked" 8 failed sign-in attempts Wait 15 minutes, or use Forgot password
"MFA code required" You enabled MFA earlier Enter the 6-digit code from your authenticator app
Patient registers but can't see their existing chart Their portal email differs from the chart email Front desk reconciles during the first visit
Session expired after 30 minutes of inactivity HIPAA technical safeguard Sign in again; not a bug
Verification email never arrives Email transport not configured (or domain not verified in Resend) Operator: verify your sending domain. User: check spam, or ask the clinic to resend.