SnapDragon Dental Labs pairs certified technicians with a fully digital workflow — scan to ship — so every crown, denture, and appliance leaves on schedule and true to shade, margin, and bite.
Every case is matched using the Ivoclar shade guide under D65 standard light and cross-checked against the digital scan before milling begins.
No black box. Your case status updates in real time through the client portal, from intake to the moment it leaves our dock.
Digital impressions accepted from all major intraoral scanners, or physical impressions logged on arrival.
CAD technicians build the restoration to your Rx, margins and occlusion checked against the scan.
Wet-milled zirconia, PMMA, or cast framework, produced in-house on calibrated equipment.
A second technician verifies fit, shade, and contact points before sign-off.
Packed and shipped with tracking, or staged for local pickup on your schedule.
Fixed, removable, and appliance work under a single roof — so your practice isn't juggling three vendors and three turnaround times.
Crowns, bridges, and veneers built for a tight, verified margin.
Dentures and appliances designed for fit and long-term comfort.
Implant-supported restorations across major platform systems.
Hard, soft, and dual-laminate guards, clasped or clasp-free.
Fast turnarounds to get patients back in their appliance.
When the schedule can't move, most case types can.
Digital cases carry PHI. We treat the pipeline that carries a scan file with the same rigor we apply to the fit of a crown.
Scan files and case notes move over TLS-encrypted connections from your operatory to our design queue.
Access to patient records is role-restricted and logged, with signed BAAs available for every practice.
Your case dashboard requires authenticated login — no case links floating in open email threads.
Case files and scans are purged on a defined retention schedule, not kept indefinitely by default.
Digital scan or physical impression — we plug into what you're already doing.
Every case has a live status in the portal instead of a phone call to find out.
If a case doesn't meet spec, we remake or adjust it at no charge — no negotiation needed.
Published price lists with volume tiers — no quote-per-case guesswork.
Business days from case receipt, not from "whenever we get to it." Rush cases are confirmed before you ship.
| Case Type | Standard | Rush |
|---|---|---|
| Zirconia Crown / Bridge Unit | 2–4 business days | 24–48 hrs (+$75/restoration) |
| Complete Denture | 5–7 business days | 3–4 days (+$75/restoration) |
| Partial / Flipper | 4–6 business days | 2–3 days (+$75/restoration) |
| Night Guard | 2–3 business days | 24 hrs (+$75/restoration) |
| Implant Bar / Bridge | 6–8 business days | 4–5 days (+$75/restoration) |
| Reline / Repair | 1–3 business days | Same day, select cases |
Print, fill, and include with your next physical case — or reference while placing a digital order.
Install these on the machines the lab supports. Ask us for your clinic ID before setting up SnapClear.
New doctors get a walkthrough of digital submission, a shipping label, and a direct line to your account manager — before your first case ships.
Real accounts, real access control. New sign-ups start unapproved until an administrator approves them.
SUPABASE_URL and SUPABASE_ANON_KEY near the bottom of the script.
You were signed out automatically after 8 hours of inactivity to protect patient information. Please log in again.
Accounts are by invitation only.
✓ Almost there
We sent a confirmation link to . Click it to confirm your email, then come back here and log in.
Your account is created but hasn't been approved by an administrator yet. Check back soon, or ask your admin to approve you in the Staff panel.
Signed in as
Loading…
Something wrong with a computer, a printer, or this portal? Send it straight to the lab’s IT team — no clinic ID to look up, no phone call. You’ll see it below with its ticket number once it’s in.
None yet.
Internal apps on the clinic network. You'll only be able to open the ones your Tailscale connection can reach.
Per-clinic patient-experience survey links — copy one and send it to your evaluator. Each opens the survey pre-branded for that clinic.
Scan a code with your phone's camera, or tap the link, to install the app.
Ambient scribe for the operatory. Record an encounter and it drafts the SOAP note, treatment plan, assistant sheet and lab prescription. The recording is transcribed on your own computer and never leaves it — only the transcript is sent out for drafting.
Test build — not for clinical use
How to install — Windows
How to install — macOS
If you already have an older SnapThink (macOS)
Who is using it
Loading…
The billing team's worklist app. Signs in with this same SnapWeb account, reads A/R, statements, Claim Check and call sheets straight out of Curve, and keeps nothing on the machine — sign out and it forgets everything.
How to install — macOS
How to install — Windows
Connect the lab's Google account (snapdragondentallab@gmail.com) and every case's due date will show up as an event on one shared calendar there — not per practice. Case class, practice, and patient are included on the event.
Checking connection…
Loading…
No requests yet.
Loading…
Cases moved out of the main Case Status list — still here, not deleted.
Loading…
Upload a SnapSync export (.xlsx — Practice, Patient, Case #, Arrival, Due, Notes, Status columns) and choose which rows to bring in as cases. Arrival becomes the case's submitted date, so history/calendar views reflect when it actually happened, not today.
| Spreadsheet Column | Goes Into | |
|---|---|---|
| Practice | → | Auto-matched to an existing Clients record if the name matches exactly — override with the "Matched Client" dropdown per row below if it's wrong, ambiguous, or unmatched. Staff/User accounts are never offered here, only Clients. Also always kept as Practice Name (dedicated field, printed on Labels & Receipts) + Notes |
| Patient | → | Patient Reference |
| Case # | → | Original Order Number, also appended onto this app's own tracking # with a hyphen (e.g. QWERT82931-1042) |
| Arrival | → | Submitted Date (backdated, drives history/calendar) |
| Due | → | Notes (for context — not stored as its own field) |
| Notes | → | Notes |
| Status | → | Not applied — every imported case always starts at Submitted (shown here for reference only) |
| (chosen below, once per batch) | → | Case Type & Case Class |
Select one or more cases below, then print a physical case label (one per case, sized for a DYMO-style label printer) or a receipt (all selected cases on one thermal-roll strip, with a signature line — selected cases must all share the same submitter, same as the desktop label tool). Print Rx gives a prescription sheet per case on plain Letter paper, for the patient chart.
Loading…
Every physical pan (with its NFC tag) gets registered here once — the UID becomes that pan's permanent serial number and can never be changed afterward, even by an Administrator. Only the label is editable, for renaming a pan later. Register a pan by scanning its tag on the SnapDragon status device, then typing the UID it displays into the field below.
Loading…
Texts the lab has sent and received on the toll‑free line. Newest first.
Loading…
Practice records for clients who don't have (or don't need) a portal login of their own — mainly for Import Cases, so an imported case can be attributed to a real, renameable client instead of always falling back to whichever admin ran the import. Renaming a client here updates the name shown on every case already attributed to them.
The price catalog used when adding line items to a case (Case Status tab). "Remove" deactivates a product rather than deleting it — it drops out of the picker for new line items but stays intact on any case/statement that already used it. "Download Fee Schedule" builds a client-facing price sheet (Fixed + Removable only, Supply items excluded) to send to prospective practices. Optionally address it to a specific doctor/practice, and apply a custom discount — every discounted fee schedule is logged below so there's a record of what was offered to whom.
Loading…
Upload a price list (.xlsx/.xls) with Description, Category, and Price columns (case-insensitive — "Normal Price" also matches). Pick which rows to bring in below before importing; nothing is added until you click Import Selected.
Bills a client directly for something that isn't tied to any case — Supply-category items sold to a partner lab, for example. Shows up as an unbilled line item for that client the same as a case-based one, and gets swept in the next time a statement is generated for them. Not in the product catalog? Check "Custom line item" and type a description/price directly instead of picking a product.
Sweeps unbilled line items across a client's cases into one new statement. Add line items to a case from its "Line Items" button on the Case Status tab first. Leave the dates blank to roll up everything unbilled, or set a From/To range to invoice just that period (a line item's date is its case's arrival date).
Tick every doctor to include. Each doctor keeps their own discount — it is applied to their own line items and the results added together, so nobody’s agreed rate changes by being put on a shared bill.
Doctors marked Billed by hand are skipped by the monthly automatic run, so their work is still here when you cut the grouped bill. Set that on the Clients tab.
Loading…
Every paid statement stays here so an old invoice can be re-downloaded any time — search by clinic name if it's not on the first page.
Loading…
Voiding releases the statement's line items back to unbilled, so they're swept into the next statement generated for that client automatically.
Loading…
The cases the techs need to fix, as two reports — Fixed and Removable — each in four lists. The lab printer prints both on 608SD every Monday at 7:00 AM Mountain; each report's Print on 608SD prints that report again now.
Ignores the Revenue Report's date range below — it is always today's open work, plus anything delivered or shipped in the last 90 days and anything sent to Mind that never reached SnapWeb. Click a case number to open and fix it.
Click Run.
Click Run.
Open cases that are overdue, then everything due each day of this week, Monday to Sunday (Mountain) — as two reports, Fixed and Removable. The lab printer prints both on 608SD every Monday at 7:00 AM Mountain; each report's Print on 608SD prints that report again now.
Overdue means due before this Monday and still open. Click a case number to open it.
Click Run.
Click Run.
Billed vs. paid totals over a date range, broken down by client and by product category. A statement counts by when it was generated; a line item counts by when it was added to the case (not by when it was eventually billed) — so the category breakdown reflects work done in the range even before it's invoiced.
Pick a date range and click Run Report.
Pick a date range and click Run Report.
Cases submitted in this range (excluding Cancelled) that never got a single line item — work that's likely going out unbilled. Click a case's tracking number to open and fix it, or send the list to an Approved Staff member to review.
Pick a date range and click Run Report.
Cases carrying unbilled line items but no client. These can never appear on a statement — billing matches on a client, and the monthly run skips a case without one — so the money sits unbilled indefinitely with nothing else flagging it. Assign a client and the value moves into Projected.
Deliberately ignores the date range above, for the same reason the duplicate report does: unbillable work does not stop being unbillable because it fell outside the month you happened to be looking at. Sorted by value, largest first.
Click Run.
Finds the same patient entered twice. Deliberately ignores the date range above — “do we have duplicates” is a question about the whole book, not a period.
Names are matched after lowercasing, stripping punctuation and sorting the words, so Doe Jane and Jane Doe are treated as one person.
Same patient, same case type, submitted the same day — the shape a double entry actually takes. A patient with several cases months apart is normal and is not listed here.
Click Run.
One patient, several spellings. Not duplicate cases in themselves, but they are how a duplicate hides from a search — and why the matching above ignores case and word order.
Click Run.
Secret-shopper scores submitted through the public ceat.html form. Public can submit; only Administrators and VIEW-ALL see results.
Loading…
—
Loading…
Invited emails skip the pending queue entirely — they're approved the moment they sign up, with the role and specialty set below.
People who asked for access from the login page. Click Invite to prefill their email above (pick a role, then Send Invite), or Dismiss to clear the request.
Loading…
Sent but not yet signed up for. Resend if the email got lost or the link expired — it re-sends the exact same invite, role and specialty included.
Loading…
Loading…
Hourly rate per employee — used to calculate wages when a pay period is generated below. Staff with no rate set are skipped (with a warning) rather than silently left out of a pay period. Click "Schedule" to set each employee's usual weekly start times, day by day — a reference value only for now, not yet tied to any attendance rule.
Loading…
Loading…
Loading…
Review logged hours before generating a pay period — fix an obvious mistake (wrong clock-in time, forgot to clock out) or remove a bad entry. Only entries not yet on a pay period can be edited.
Pick a date range and click Load.
Sweeps every completed, not-yet-paid time entry in this date range into one new pay period, totaled per employee at their current hourly rate.
Loading…
Loading…
Shared PDFs shown on the public Resources section of the marketing site (Rx forms, prep guides, etc.) — visible to everyone, upload/remove is Administrator-only.
Loading…
Location updates only while a driver is clocked in (Payroll Time Clock) and has opted in from their own driver app — tracking can never be turned on remotely, only the driver themselves can enable it.
Loading…
Shows each currently clocked-in, opted-in driver's latest position and their trail for the current shift. Updates live — no refresh needed.
No clocked-in, opted-in drivers right now.
The current build for the Farset F7 rugged driver scanner handheld only. Regular staff/practice phones get the app from the Profile tab.
How to install
The current build for the 10.1" lab-station tablet (USB-camera image capture) only. Regular staff/practice phones get the app from the Profile tab.
How to install
The current build for the operatory tablet that records a visit and sends it to SnapThink for the note and treatment plan. Sign in with your usual 6-digit staff PIN; the tablet must be on the clinic's Tailscale network first. After this first install it updates itself — Settings › Check for update.
How to install
Tray app for every clinic computer — wipes and updates Chrome on a fixed daily schedule so it never interrupts an X-ray in progress, tidies the X-ray temp folder, and lets the front desk report an IT problem straight to the lab. It keeps itself up to date after the first install.
How to install
The lamp in the lab that flashes green on a new case and orange on a DS Core order, then returns to teal. It is driven through the SmartThings cloud, which needs a connected account.
This used to run on a SmartThings Personal Access Token. Those now expire about a day after they are created — the light stopped working on 2026-07-26 for exactly that reason, with nothing on screen to say why. Connecting below uses OAuth instead: the token refreshes itself, and a nightly job keeps it from going stale.
Checking connection…
Each physical clinic pickup kiosk gets a unique code (PK-###) tying it to one or more practices — a kiosk covering a shared lobby can be assigned to several clinics at once. Provision the device with its code, and it looks up its own assigned clinic(s) from that. "Last check-in" shows whether a unit is actually reaching the server, not just whether it's plugged in.
Loading…
Every successful sign-in, most recent first. Session restores/app relaunches don't count — only an actual login. IVF-duty users are tagged.
Loading…
Every status change across every case, most recent first.
Loading…
Every insurance plan created, edited or deleted — who, when, and what it looked like before. Clinic staff can correct their own insurance data, so this is the record of what they changed. Expand a row for the exact fields that differed.
Loading…
Every integration reports here each time it runs. Red means its last run failed, or it has gone quiet for longer than it should; grey means it has not reported yet, is paused, or is a sandbox test that is not counted; green says when it last worked. A scheduled database job only says the scheduler ran - the work it starts reports under its own name above.
Loading…
Every scheduled background job on the server. Disabling a job pauses it in place — the schedule stays saved, nothing runs until it's re-enabled.
Loading…
Only picks a time for one of this app's own already-built background tasks — there's no free-text SQL entry here. Time is in UTC, not Mountain Time.
Every business rule already baked into this app — trigger, check, or client-side logic — in plain English, so it doesn't have to be re-discovered by re-reading the code. Edit or add to this list any time.
Loading…
IT problems reported by the practices. Practices submit these from the public IT support form using their clinic ID — no portal login needed, since the person with the broken machine often can’t get into one. The ID is what gates the form — a submission quoting one we don’t recognise is refused and logged under Refused Submissions below, never filed as a ticket. Each accepted submission emails every Administrator and anyone with the InfoTech duty. The tiles below are open tickets per location — click one to see just that site.
Loading…
One ID per location — the code that location quotes on the IT support form. Give it to the office once; it both proves the request came from them and files the ticket against the right site. Treat it as a shared password: anyone who has it can open a ticket.
Loading…
The password is only used by the SnapClear tray app on that location’s computers — it’s never needed on the web form. It is shown once when generated and cannot be read back afterwards, so write it down before closing the box.
Every PC running the SnapClear tray app, and what it last reported. A machine that stops checking in has stopped clearing Chrome — which otherwise only surfaces when the clinic complains.
Loading…
What Microsoft is offering the clinic PCs, and nothing installs until you say so. Approve an update here and every computer that was offered it installs it at 8pm that evening, then restarts if it has to. Anything you leave unapproved is left alone, night after night, until you decide otherwise.
Loading…
The desktop background on every computer at a location. Upload once, assign per clinic, change it whenever — each PC picks up a change on its next check-in, within about five minutes. Nothing needs reinstalling and nobody has to touch the machine.
Loading…
Assigned to
Loading…
Five wrong workstation passwords in a row locks that address out for 24 hours. Usually it’s one of ours with a stale password saved — lift it, then reinstall with the current one. Locking out never blocks the public IT form, so a clinic can always still report a problem.
Loading…
The clinic ID is what keeps the public form from being open to the whole internet, so a submission quoting an ID we don’t recognise is refused outright — no ticket is created. Those attempts are listed here. After every five from the same address in a day, every Administrator gets an email. A handful from one address usually means a practice was given the wrong ID; a long run of different IDs means someone is guessing.
Loading…
The insurance plans each clinic's Insurance Verification form pulls from — seeded from the blank-IVF documents. Add, edit, deactivate, or remove them here (no SQL needed). Each clinic has its own library — coverage differs by clinic (zip/region), so create a clinic, then build its own plan set below.
Choose a clinic.
Staging area for the DS Core integration — kept out of the normal Account tab on purpose so it can be fully tested against DS Core's sandbox environment before anything goes near production. Connecting here only ever touches sandbox test data (DS_CORE_ENVIRONMENT is hardcoded to 'sandbox' below, not switchable from this UI). Reference spec: supabase/dscore-reference/DS_Core_LAB_API.swagger.json.
Checking connection…
A worklist, not a ledger. It shows only orders whose scan has not reached Ceramill Mind yet — the ones somebody may need to chase. An order disappears from here the moment its scan lands in Mind's import folder, which is the normal ending, so an empty list is the healthy state rather than a sign nothing is happening. Read-only: ds_core_orders is a staging table, not `cases`. The SnapWeb case is created later, by SnapSync, once the job reaches the mill. New orders arrive via DS Core's webhook, backed up by a poll every 3 minutes and by the 15-minute pull on mini1 — "Poll Now" runs that check immediately instead of waiting.
Loading…
Direct messages between approved staff. Only you and the recipient can read a conversation.
Loading…
Select a teammate to start messaging.
Clinic-wide "cases are ready" pings from a clinic's own portal login or kiosk device — not tied to specific cases, just a count and a timestamp. Mark one picked up once handled.
Loading…
Loading…
Scan a case's QR code to mark it delivered. Same action as the Android/iOS apps' own scan-to-deliver screens — the camera only runs while this tab is open.