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:
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
| URL | Audience | What's there |
|---|---|---|
/setup | First-ever super admin | One-time bootstrap form. Locks itself the moment a super admin commits. |
/login | Everyone | Single sign-in form. The tenant slug + email decides where you land. |
/register | Patient | Self-registration for a patient portal account. Requires a clinic slug. |
/admin/* | Super admin | Tenants, plans, audit logs, AI monitoring, platform settings. |
/clinic/* | Clinic staff | Calendar, patients, encounters, prescriptions, labs, billing, AI skills. |
/portal/* | Patient | Their own appointments, lab results, prescriptions, invoices, messages. |
Who creates whom
| Role | How 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. |
First-run setup (you, once per deployment)
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.
/setup in your browser. If a super admin already exists, the page shows "Setup complete" and links to /login.SETUP_TOKEN is set in your env, paste it. (See callout below.)/admin./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
- Tenant slug: leave blank — super admins are tenant-less
- Email + password: what you set at setup
- Lands at
/admin
Onboarding a clinic
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.
- Tenant name (e.g. "Sunrise Family Clinic")
- Tenant slug (URL-safe, e.g.
sunrise) — they'll live atsunrise.your-domain.com - Time zone, locale, plan
- Clinic admin's name, email, and a temporary password
- Submit → tenant + clinic admin created. Hand the credentials to the clinic over a secure channel.
*.your-domain.com, the new tenant subdomain works
immediately. Otherwise you'll need to add a per-tenant CNAME.
Managing tenants
From /admin/tenants:
- List, search, and inspect every clinic on the platform
- Suspend a tenant — patients and staff can't sign in until reactivated
- Change their subscription plan, mid-cycle
- Reset a clinic admin's password if they're locked out
Audit & monitoring
| Page | What it shows |
|---|---|
/admin/audit-logs | Every authentication, configuration change, and admin action across all tenants. Filter by tenant, actor, or action type. |
/admin/ai-monitoring | AI 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
/admin/feature-flags— toggle features per tenant or globally (e.g. enable beta marketplace skills for a single clinic)/admin/plans— define the price tiers tenants can subscribe to/admin/settings— global key/value config that every tenant inherits (branding defaults, AI quota policy, etc.)
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
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
Create a chart for a new patient. The form has eight sections:
- Identity — MRN (auto-assigned if blank), legal name, preferred name, DOB, sex, gender identity
- Contact & address — email, phone, full address
- Insurance — carrier, member ID, group
- Care team — primary provider (searchable dropdown of clinic providers)
- Emergency contact — name + phone
- Risk flags — tag chips like
fall_risk,blood_thinner - Allergies — searchable common-allergens list + free-text
- Active medications — repeatable rows with name, dose, frequency
- 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
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:
- Capture vitals (BP, HR, temp, weight, etc.)
- Use the Clinical Note Drafter AI skill — feed it bullets + vitals, get a SOAP draft
- Edit the draft, then lock the note. Locked notes are immutable; corrections are addenda
- Attach lab orders, prescriptions, and documents to the encounter
Writing prescriptions
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.
Lab results
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
/clinic/billing— invoices, payments, AR aging- Issue invoices from completed encounters; AI suggests line items
- Accept patient payments via Stripe or Square (hosted checkout — you never see card details)
- The overdue-invoice sweeper marks unpaid invoices as overdue automatically
Inviting more staff admin only
- Click the Invite staff button
- Enter their email, full name, role (Doctor / Nurse / Front Desk / Clinic Admin)
- System emails them a one-time link
- They click, set their own password, you never see it
- They land at
/clinicwith 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:
- Clinical Note Drafter — bullets + vitals → SOAP draft
- Pre-visit Brief — summarizes the patient's chart for the upcoming visit
- Intake Summarizer — turns intake form answers into a draft note
- Schedule Optimizer — suggests better slot assignments
- Billing Suggestion — drafts invoice line items from a completed encounter
- Document Classifier — auto-routes uploaded docs to the right chart section
Every invocation is logged: model, prompt version, tokens, reviewer, outcome. Auditors can replay anything.
Creating your account
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.
- Full name, email, phone
- Password (at least 12 characters, mix letters/numbers/symbol)
- Submit — you're signed in immediately at
/portal - You'll get a verification email shortly. Click the link to confirm your address.
Filling out 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
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
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
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
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.
Paying 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
/portal/profile— edit your preferred name, contact info, address, emergency contact- Change your password
- Enable multi-factor authentication (TOTP via any authenticator app)
- Sign out — bottom of the sidebar
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
| Problem | Likely cause | Fix |
|---|---|---|
| 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. |