Espejo Labs
Espejo Labs · Product

Espejo Clinic

Dental clinic management software. One workspace for the schedule, the clinical record, the treatment plan and the money.

Built for dental teams English & Spanish A database per clinic
Espejo Clinic practice dashboard
The practice dashboard: today's appointments, revenue, outstanding balance and treatment plans on one screen.
23Functional modules
2Languages, end to end
1Database per clinic
32Teeth, chartable by surface
Overview

Stop running your clinic across four tools

Most dental practices run on three or four disconnected tools: a calendar for appointments, a folder of paper or PDF odontograms, a spreadsheet for treatment budgets, and an invoicing program that knows nothing about either. Every handoff between them is manual, and every manual handoff is where revenue leaks and clinical detail gets lost.

Espejo Clinic replaces that stack with a single system. The receptionist books into the same calendar the dentist works from. The dentist charts findings tooth by tooth on an interactive odontogram. Those findings turn into a treatment plan, the plan turns into invoice lines, and the payments land back on the dashboard the practice owner opens every morning. Patients book themselves online against the clinic's real availability, so the phone stops being the bottleneck.

Delivered as multi-tenant SaaS: each clinic company gets its own dedicated database, so one clinic's records can never be queried alongside another's. The whole interface ships in English and Spanish, switchable at any moment, down to every status label and validation message.

Who it is for

RoleWhat the system gives them
Practice owner / managerA live dashboard: today's appointments, today's revenue against yesterday, outstanding balance, active treatment plans, the 7-day revenue trend and the most-performed treatments.
Receptionist / front deskA day/week/month calendar with colour-coded statuses, room and professional assignment, and booking straight from an empty slot — plus a public booking page that fills the diary without a phone call.
Dentist / specialistAn interactive odontogram with per-surface findings, medical alerts, allergies and conditions on the patient record, and treatment plans that carry straight into billing.
AssistantAppointment detail lines — which services were actually performed, on which tooth, at what price.
Multi-site groupsBranches, rooms and per-professional weekly schedules per branch, with availability computed per site.
What it does

Every clinic detail, in one place

Eleven functional areas, each one a real screen of the running product.

01 · Practice dashboard

The four questions a clinic asks every morning

  • Appointments today — total, split into completed / waiting / cancelled.
  • Today's revenue — with the percentage delta against yesterday.
  • Outstanding balance — billed and not yet collected, plus unpaid invoice count.
  • Active treatment plans — accepted plans in progress, and how many are still drafts.

Below that: the full schedule for today, a seven-day revenue bar chart, total patient count with new patients this month, and a ranked list of the most-performed treatments.

Practice dashboard
02 · Appointment scheduling

A clinical calendar, not a generic one

Day, week and month views. Every appointment is colour-coded by status — Scheduled, Confirmed, In progress, Completed, Cancelled, No-show — so the state of the diary is legible at a glance.

  • Branch, patient, professional, optional room, start time and duration.
  • Filter the whole calendar down to a single professional.
  • Each appointment expands into appointment details: the services performed, the tooth, quantity and unit price — the bridge between the clinical act and the invoice.
Week calendar with colour-coded appointment statuses
Week view. Day and month views are in the gallery below.
03 · Online booking for patients

Let patients book themselves — against real availability

A public, unauthenticated booking page — no patient login, no app to install — in three steps: choose the appointment, enter your details, confirm.

What makes it trustworthy is the availability engine behind it. A slot is offered only when it survives every constraint at once:

  • Inside the clinic's configured opening hours and working days.
  • Inside that professional's weekly schedule for that specific branch and weekday.
  • Outside the configured lunch/break window.
  • The professional is not already booked.
  • A treatment room is free at that branch.

The endpoint returns free time slots and nothing else — never another patient's name, contact details or appointment.

Public booking page showing a live availability calendar and free time slots
04 · Interactive odontogram

The clinical centrepiece

A full adult dentition laid out as upper and lower arches, each tooth clickable.

  • Record a finding per surface — buccal, lingual, mesial, distal, occlusal, or the whole tooth.
  • Assign a status — healthy, caries, filled, extracted, crown, implant, root canal, missing — each with its own colour, so the mouth's history is readable in one look.
  • Attach free-text clinical notes to any finding.
  • Apply one status across every surface of a tooth in a single action.
  • A running tally per status and a per-quadrant summary sit alongside the chart.
  • The whole odontogram prints for the patient file or a referral.
Odontogram with tooth 16 selected and the surface, status and notes panel open
Tooth selected, surface and status panel open. Chart a finding in two clicks.
05 · Patients & medical history

Structured history, not a free-text box

Patients are built on a shared Person record — name, date of birth, gender, document type and number, phone, email, address and photo — the single source of truth reused by users, professionals and patients alike. The patient record adds blood type, preferred language, emergency contact, branch and clinical notes.

  • Allergies with a severity grade (mild / moderate / severe).
  • Medical conditions from a maintained catalogue, grouped into categories, each flagged for dental relevance and for whether it should raise an alert before treatment.
  • Per-patient conditions with diagnosis date, status and notes.
Patient directory in card view
06 · Treatment plans

Quote the whole course of treatment, then watch it convert

A plan groups the work a patient has agreed to: a title, a description, the responsible professional, and a status of draft, active, completed or cancelled.

Each plan item names a service from the catalogue, the tooth it applies to, quantity and estimated price, and tracks its own progress — pending, in progress, completed or skipped.

Treatment plans list
07 · Billing

Partial payments are first-class

Invoices per patient and branch, each with an invoice number, issue date, total, amount paid and a status that moves through draft → issued → partially paid → paid (or cancelled).

Payments are recorded against an invoice with an amount, a date, a reference and a method — cash, card, bank transfer or insurance. Partial payments are supported natively, which is how real dental treatment is actually paid for.

Invoice list with totals, amounts paid and statuses
08 · Service catalogue

Priced, categorised and translated per language

Everything the clinic offers — consultation, cleaning, filling, root canal, extraction, crown, implant, whitening, orthodontics, X-ray — each with a code, a category, a base price, an optional specialty and an active flag.

Service names and descriptions are translated per language, so a clinic serving two languages shows each patient the right wording without duplicating the catalogue.

Service catalogue with codes, categories and base prices
09 · Organisation & team

Multi-site from day one

  • Branches — multiple sites, each with its own address, phone and email.
  • Rooms — treatment rooms per branch, factored into availability.
  • Users — with roles: Admin, Dentist, Assistant, Receptionist.
  • Professionals — licence number, one or more specialties, and a personal colour used across the calendar.
  • Professional schedules — the weekly working pattern per professional, per branch, per weekday, with start and end times and an optional assigned room.
  • Specialties — a translatable catalogue (endodontics, orthodontics, and so on).
Weekly schedules per professional, branch and weekday
10 · Configuration

The booking rules live in one screen

Clinic-wide settings in one place: clinic name and logo, and the online booking rules — opening time, closing time, break start and end, which days of the week are working days, slot duration in minutes, and the IANA time zone used to resolve local clinic hours to UTC.

Clinic settings: branding and online booking hours
11 · Audit trail

Nothing changes without a record

Every create, update and delete across every entity is written to an audit log automatically, recording the table, the record, the action and the timestamp.

The log is read-only through the API — it can be consulted but not edited or deleted from the application. Records that support it are soft-deleted (deactivated rather than destroyed), so history survives.

Read-only audit log
Why it is different

Six things most clinic software gets wrong

🔐

Database-per-tenant isolation

Not a shared table with a tenant_id column and a filter someone might forget. Each clinic company's data lives in its own database, resolved per request from the subdomain or an X-Tenant header. A request without a valid tenant is rejected before it reaches any data.

🎯

Availability that is actually correct

The booking engine intersects clinic hours, per-branch professional schedules, breaks, existing appointments and room occupancy. It does not offer a slot the clinic cannot honour.

🌍

Genuinely bilingual

English and Spanish are both first-class. Every label, button, toast, dialog, placeholder and validation message is a translation key — including enum values like appointment status and tooth status. A user's preferred language follows their account.

🔗

The clinical record drives the money

Odontogram findings feed treatment plans, plan items and appointment details reference the same priced service catalogue, and those lines become invoices and payments. Nothing is re-keyed between clinical work and billing.

🗄️

Runs anywhere

The same build runs on SQL Server for production or on SQLite for a lightweight, dependency-free deployment — chosen purely by configuration, for both the master and every tenant database.

📱

Installable and mobile-ready

The interface is a responsive progressive web app: it works on a phone at the chair side and can be installed to the home screen.

Technical foundation

Built to be maintained, not just demoed

AreaDetail
Backend.NET 10 · ASP.NET Core Web API · EF Core 10 · FluentValidation · Mapster
FrontendReact 19 · TypeScript · Vite · TanStack Query · PWA
DatabasesSQL Server (production) or SQLite (lightweight deploy), selected by configuration
ArchitectureClean / layered — Domain ← Application ← Infrastructure / API
SecurityJWT bearer authentication, role-based authorization, BCrypt password hashing
Multi-tenancyDatabase per tenant; master database holds the tenant and language catalogues
AuditingEF Core interceptor writes an audit row on every persisted change
APIREST, documented with an OpenAPI document and an interactive Scalar UI
QualityxUnit test suite over the application services; analyzer-enforced code standard
Advertising copy

Ready-to-use lines

Drawn from what the product actually does — nothing here is a claim the software cannot back up.

Headlines

  • More time for your patients. Less time managing.
  • Your clinic, in balance.
  • From the first appointment to the last payment — one system.
  • The odontogram, the diary and the invoice finally talk to each other.
  • Stop running your clinic across four tools.

Subheads

  • Scheduling, patient records, odontograms, treatment plans and billing in one workspace built around the real pace of a dental clinic.
  • Let patients book themselves — against your real availability, not a wish list.
  • Every finding, every plan, every payment, on one patient timeline.

Calls to action

  • See your clinic on one screen. → Book a demo
  • Try the live demo — no installation, no card.
  • Register an appointment (patient-facing, for the clinic's own site)

Feature bullets (short form)

🦷Interactive odontogram — findings per tooth and per surface, colour-coded, printable
📅Day / week / month clinical calendar with colour-coded appointment statuses
🌐Public online booking that respects your hours, your team and your rooms
📋Treatment plans that convert into invoice lines
💳Invoices and partial payments — cash, card, transfer or insurance
📊A dashboard that answers “how did today go?” before you finish your coffee
🏢Multiple branches, rooms and per-professional weekly schedules
🔐Your clinic's data in its own database — isolated by design
🌍Full English / Spanish interface, switchable in one click
📱Works on the phone at the chair side; installable as an app

Objection handling

“We already have a calendar.” Your calendar does not know which tooth was treated, what it cost, or whether it was paid.
“Online booking will overbook us.” It cannot. A slot is offered only if the clinic is open, the professional is scheduled at that branch, a room is free and nobody else has it.
“Our data would be mixed with other clinics'.” It would not. Each clinic runs on its own database.
“Half our team prefers Spanish.” So does the software. Every user picks their own language.

Suggested ad layouts

  • Single-image ad — the dashboard, headline “More time for your patients. Less time managing.”
  • Carousel (4 slides) — dashboard → week calendar → odontogram → online booking, one benefit line each.
  • Split “desktop + phone” — the dashboard beside the mobile dashboard, headline “At the front desk. At the chair. On the way home.”
  • Feature grid — odontogram, treatment plans, invoices and online booking in a 2×2 with the short-form bullets.
Next step

See your clinic on one screen

Open the live demo, or talk to Espejo Labs about adapting it to your practice.

Demo credentials: admin@demo.local · Admin12345