Internal Review
Features Overview
All features built into the Apex Lab Group platform — for internal review only.
Rx Wizard (Doctor Submission)(19)
Rx Wizard (13-step)
Multi-step prescription submission with autosave to localStorage, draft saving, and PDF download on completion.
My Cases Tab
Historical view of all submitted Rx cases with status badges, keyword search, refresh, and PDF download per case.
Case Status Tracking
Status pipeline: draft → submitted → received → in_production → shipped → delivered → remake.
RxStep1 – Doctor Info
Captures doctor name, email, phone, NPI, license, and practice name.
RxStep2 – Select Lab
Lab selector with live data from LabLocation entity; pre-fills from ?lab= URL param.
RxStep3 – Case Type
Selects from: fixed crown/bridge, implant, removable, guard, aligner, Snap-On Smile, Lumineers, LumiSmile, Kinder Krown, surgical guide, other.
RxStep4 – Patient Info
First name, last initial, DOB, sex, chart ID, age, phone, prep date, seating appointment date/time.
RxStep5 – Teeth & Restorations
Interactive universal tooth chart with per-tooth restoration type selection.
RxStep6 – Implants
Per-implant details capture.
RxStep7 – Removables & Appliances
Removable prosthetics and appliance options including brand upsells.
RxStep8 – Add-On Services
Additional services, enclosed items, occlusal notes, and 'please send' options.
RxStep9 – Impression
Impression type (digital/PVS/alginate/physical model), scanner type, scan link ID.
RxStep10 – Instructions
Free-text special instructions field.
RxStep11 – Due Date
Target due date with rush order toggle.
RxStep12 – Shipping
Shipping label request option.
RxStep13 – Review & Submit
Full Rx summary view with PDF export; submits to RxSubmission entity.
Rx PDF Generation (Server-Side)
Backend Deno function (generateRxPdfServerSide) generates a branded, two-column PDF matching the original Robertson Lab form layout, uploaded to storage and linked on the submission.
Doctors Resources Page
Resource hub at /doctors/resources with clinical guides, case submission instructions, training videos, and lab contact directory.
Send a Case Page
Portal at /send-a-case with submission method cards (digital, physical, walk-in) and embedded lab locator.
Dentist Portal (/doctors/portal)(11)
Cases Module
Full case history for the logged-in dentist: status filters, keyword search, case detail expand, PDF download, and remake initiation.
Approvals Module
Queue of pending lab approvals (Photo Review, 3D Render, Try-In Sign-off, Final Approval) with attachment viewer, comment field, approve/request changes/reject actions.
Lab Chat Module
Per-case threaded messaging between doctor and lab; unread badge per thread, mark-as-read, attachment support.
Billing Module
Invoice list with status badges (Open/Partial/Paid/Overdue), Pie chart of balance by status, 6-month bar chart of payment history, summary KPI cards, and invoice detail modal with Pay Now action.
Aging Report Module
Accounts receivable aging buckets (Current, 1–30, 31–60, 61–90, 90+ days) with totals, drill-down per bucket, and CSV export.
Coupons Module
Lab credit coupon wallet: available balance, expiry dates per coupon, applied and expired history, sourced from CouponLedger entity.
Remake Cases Module
Lists active remakes and allows submitting a new remake request against a previous case with reason selection.
CE Courses Module
Dentist's CE credit tracker: annual credit summary, upcoming registered courses, attended course archive with certificate download links.
Equipment Module
Practice equipment inventory: add/edit/delete items by category (Imaging, Milling, Scanning, Sterilization, Handpiece, Other), warranty tracking, service due dates, and CSV export.
Sidebar Navigation
Responsive navy sidebar with notification badges for pending approvals, unread messages, and overdue invoices; mobile hamburger toggle.
Real-Time Notifications
Loads live counts for pending approvals, unread chat messages, and overdue invoices on portal load.
Scanner Finance Program(14)
Scanner Finance Page
Public landing page at /scanner-finance with program options and apply CTA.
Scanner Apply Page
Application form at /scanner-apply for new scanner loan requests.
Scanner Program Dashboard
Doctor-facing portal at /doctors/scanner-program with loan overview, payment history, coupon wallet, and tech support.
ScannerLoan Entity
Tracks loan amount, APR (3.9%), 48-month term, monthly payment, status, and payments completed.
ScannerPayment Entity
Records individual payments with principal/interest split, coupon issuance flag, and status.
CouponLedger Entity
Tracks earned coupons with 90-day expiry; statuses: Available, Applied, Expired.
TechSupportTicket Entity
Video-call support ticket system with scheduling, status tracking, and session notes.
Coupon Wallet Component
Displays available coupon balance, expiry dates, and applied/expired history.
Scanner Stats Row
Summary stats row showing total paid, coupons earned, remaining balance.
Scanner Timeline
Visual loan timeline showing payment milestones and coupon issuance dates.
Scanner Tech Support
In-app video call request form for scanner software assistance.
issueMonthlyCoupons function
Scheduled backend function that issues lab credit coupons on each loan payment.
couponUtils.js
Centralized library for coupon math: available balance, FIFO redemption, expiry handling.
Scanner Admin Portal
Admin dashboard at /admin/scanner-program with overview, loan management, coupon controls, and support queue.
Lab Network(8)
Lab Locator
Searchable/filterable lab finder with service filters (fixed, removable, implants, guards, aligners, etc.) and scanner filters (iTero, Trios, Medit, etc.).
Geolocation / ZIP Search
Detects user location or geocodes ZIP/address via Nominatim; sorts labs by distance in miles.
List / Map Toggle
Switches between card list view and interactive Leaflet map with clickable lab pins.
Lab Map
react-leaflet map showing all labs as markers; popups with Submit Rx and Details links; auto-fits bounds.
Lab Detail Page
Per-lab profile at /labs/:slug with services, turnaround times, scanners, team lead, certifications, and reviews.
Lab Cards
Show name, city/state, phone, turnaround, scanner chips, Submit Rx and Details links.
Real Lab Locations
LabLocation entity pre-populated with verified Apex Lab Group addresses across the US; duplicates and inactive locations removed.
Labs Page (/labs)
Full searchable lab directory with list and map toggle, service/scanner filters, and distance sorting.
Product Category Pages(6)
Fixed Restorations (/products/fixed)
e.max, Zirconia, PFM, Cast Gold — service descriptions and lead capture.
Removable (/products/removable)
Dentures, partials, overdentures, and flippers.
Implants (/products/implants)
A-Zir crowns, abutments, overdentures, and All-on-X hybrids.
Guards & Appliances (/products/guards-appliances)
Night guards, sports guards, bleaching trays, and retainers.
Clear Aligners (/products/clear-aligners)
In-house aligner service with digital case planning and practice support.
ART Service (/products/art)
Artist characterization, custom staining, smile makeovers, and digital smile design.
Brand Pages(9)
Lumineers Page
Brand landing at /lumineers with product info, FAQ, and lead capture.
Snap-On Smile Page
Brand landing at /snap-on-smile with prescription-only notice and patient testimonials.
Kinder Krowns Page
Brand landing at /kinder-krowns with Shopify product grid and lead capture.
Kinder Krowns Catalog
Product catalog at /kinder-krowns/shop pulling from Shopify 'kinder-krowns' collection.
Surgical Guides Page
Brand landing at /surgical-guides with turnaround tiers, tech specs, and product grid.
Surgical Guides Catalog
Product catalog at /surgical-guides/shop.
LumiSmile Page
Brand landing at /lumismile with portal workflow and lead capture.
Brand Carousel (Home)
Auto-rotating animated carousel showcasing all 6 brands with taglines, logos, and CTAs.
Brand CSS Themes
Per-brand CSS variable overrides (kinder-krowns, lumineers, snap-on-smile, lumismile, surgical-guides).
Shopify Integration(3)
ShopifyProductGrid
Fetches products from a Shopify Storefront collection via backend function; supports search and product-type filtering.
shopifyProducts function
Backend Deno function calling Shopify Storefront GraphQL API to return products, variants, images, and pricing.
shopifyWebhook function
Webhook handler for Shopify events.
Homepage(8)
Hero Section
Animated hero with headline, CTAs (Submit Rx, Find a Lab), stats, and brand navigation bar.
Brand Carousel
Rotating full-width carousel for all Apex brands — Lumineers, Snap-On Smile, LumiSmile, Kinder Krowns, Surgical Guides, Scanner Program — with auto-play, manual nav, and Framer Motion transitions.
Why Apex Section
4-column value prop grid (USA-made, fast turnaround, low remake rate, technology); fully i18n.
Rx CTA Banner
Full-width navy call-to-action strip with Submit Rx and Find Labs buttons.
Lab Locator Preview
Embedded LabLocator on homepage with link to full /labs page.
Reviews Carousel
Rotating customer review cards filtered by brand with aggregate star rating display.
Lead Capture Form
Contact/inquiry form saving to LeadCapture entity with brand interest selector, TCPA consent (EN/ES/KO), and portal login shortcut.
Portal Login CTA
Quick-access login button to /doctors/portal embedded within the lead capture form sidebar.
Navigation & Layout(6)
Site Header
Sticky nav with dropdowns for Products, Brands, Doctor Resources; mobile hamburger menu; language switcher; top utility bar.
Site Footer
Footer with links, brand navigation, and contact info.
App Layout
Shared layout wrapper using React Router Outlet with header/footer.
Dentist Finder Page
Search page for finding dentists at /doctors/find-a-dentist from the Dentist entity.
About Page
Company overview at /about with stats, values, and CTAs.
Features Review Page
Internal review page at /features-review listing all platform features by category with live counts.
Internationalisation(3)
LanguageProvider
React context providing t() translation function; language persisted in localStorage.
Language Switcher
UI control to switch between EN, ES, and KO.
Translations
Key-value translation strings for EN/ES/KO covering all major UI copy, carousel content, nav labels, and forms.
CE Events & Education(14)
CE Events Page (/ce-events)
Public-facing page (no login required) with hero stats, upcoming events, past events archive, and local event request form.
CEEvent Entity
Full event record: title, type, status, date/time, venue, speaker, CE credits, agenda items, photos, recording URL, presentation file, and travel info.
CEEventRegistration Entity
Per-attendee registration with confirmed/waitlisted/cancelled status, attendee count, dietary restrictions, and special requests.
CEEventRequest Entity
Tracks practice-submitted Lunch & Learn requests with topics, timing preference, preferred months, and status workflow.
Upcoming Events Section
Filter tabs (All, event type, In-Person, Online), featured card + grid layout, spots-remaining indicator, 'Upcoming Soon' badge within 7 days.
Event Detail Modal
Slide-over panel with Details, Agenda timeline, Location & Travel (Google Maps embed, hotel/flight links), and Register tabs.
Registration Form
In-modal form with auto confirmed/waitlisted logic, confirmation email to attendee, and notification to info@apexlabgroup.com.
Past Events Section
Archive grid with featured most-recent card; Download Slides, Watch Recording, and photo lightbox buttons per event.
Photo Lightbox
Full-screen image gallery for event photos with prev/next navigation.
CE Event Request Form
Public form to request a local Lunch & Learn with topic multi-select, preferred months, and benefit callouts; sends confirmation emails.
CE Events Admin (/admin/ce-events)
Staff portal with event list (create/edit/delete), full event editor with agenda builder, registrations per event with CSV export, and event requests list.
Event Editor
Full form for all CEEvent fields including agenda item builder (add/remove), featured toggle, online/in-person toggle, and file URL inputs.
Registrations List
Per-event registrations with confirmed count vs. max, CSV export, manual add, and cancel actions.
Event Requests List
Sortable request list with status workflow (New → In Review → Scheduled → Declined) and one-click Convert to Event.
Staff Admin(3)
Rx Cases Dashboard (/admin/rx-cases)
Internal staff view of all RxSubmission records with status filter tabs (counts per status), keyword search, expandable case rows, inline status update, and PDF download.
CE Events Admin (/admin/ce-events)
Manage CE events (create/edit/delete), full agenda builder, registrations per event with CSV export, and event requests list with status workflow.
Scanner Admin (/admin/scanner-program)
5-tab admin portal: Overview stats, Loans list (approve/activate/manage), Coupon controls (issue/revoke), Tech support queue, and New Loan creation form.
Data Entities(18)
LabLocation
Lab profiles: name, slug, address, lat/lng, phone, email, services, scanners, turnaround days, team lead, certifications, parent brand. Real verified Apex locations.
RxSubmission
Full prescription record: doctor info, patient info, case type, teeth, shade, impression, shipping, status, PDF URL, Salesforce case ID.
CaseApproval
Lab approval queue item: case ID, dentist ID, approval type (Photo Review / 3D Render / Try-In / Final), status, attachments, lab notes, dentist comments, due date.
CaseMessage
Per-case threaded messages between doctor and lab: sender ID, role, message body, attachments, read/unread flag.
Invoice
Invoice record: line items, subtotal, tax, coupon deduction, total, amount paid, status (Open/Partial/Paid/Overdue), payment history array.
ScannerLoan
Scanner finance loan: model, price, APR (3.9%), 48-month term, monthly payment, status, payments completed, remaining balance.
ScannerPayment
Individual loan payment: principal/interest split, coupon issuance flag, linked CouponLedger ID, status (Scheduled/Processed/Failed).
CouponLedger
Lab credit coupons: earned date, 90-day expiry, status (Available/Applied/Expired), linked loan and order IDs.
TechSupportTicket
Video call support tickets: video channel (FaceTime/Zoom/Meet/Teams), issue type, scheduling, tech assignment, session notes, recording URL.
Equipment
Practice equipment inventory: category, manufacturer, model, serial number, purchase date, warranty expiry, service dates, archive flag.
CERecord
Dentist CE record: course name, provider, type (Attended/Upcoming), date, credit hours, format, certificate URL, expiry, registration status.
Review
Customer reviews: rating, author, brand, lab_slug, featured flag, Google review ID.
LeadCapture
Inquiry leads: name, email, phone, zip, brand interest, lead type, message, source URL, Salesforce lead ID, sync status.
SalesforceConnection
Stores Salesforce OAuth tokens (access, refresh, instance URL, expiry) per dentist user.
Dentist
Dentist directory: NPI, practice, address, lat/lng, brand certifications (Lumineers, Snap-On Smile, LumiSmile, Kinder Krowns), membership tier, Google rating.
CEEvent
CE event: title, type, status, date/time, timezone, venue, speaker (name/title/bio/photo), CE credits, max attendees, cover image, event photos, agenda items, travel info, Zoom link.
CEEventRegistration
Attendee registration: linked event, name, email, practice, NPI, attendee count, dietary restrictions, status (Confirmed/Waitlisted/Cancelled).
CEEventRequest
Practice Lunch & Learn request: contact info, topics of interest, preferred timing/months, attendee count, status workflow (New → In Review → Scheduled → Declined).
Integrations & Backend(7)
generateRxPdfServerSide
Deno backend function that builds and uploads a branded two-column Rx PDF to storage, returning a permanent URL stored on the RxSubmission record.
issueMonthlyCoupons
Scheduled Deno function that creates CouponLedger records with 90-day expiry for each processed ScannerPayment that has not yet had a coupon issued.
salesforceOAuth
OAuth callback handler that exchanges a Salesforce authorization code for tokens and persists the connection to the SalesforceConnection entity.
syncLeadToSalesforce
Maps a LeadCapture record to the Salesforce Lead schema and posts it via the Salesforce REST API using the stored OAuth tokens.
shopifyProducts
Deno function calling the Shopify Storefront GraphQL API to return products, variants, images, and pricing for a given collection handle.
shopifyWebhook
Webhook handler for inbound Shopify events.
couponUtils.js
Frontend utility library for all coupon math: available balance (excluding expired), FIFO redemption ordering, UTC-safe expiry calculation.
