March 19th, 2026
New

CareNova is the first public release of a full-featured, production-ready Clinic Management System built on Next.js 14 App Router, Supabase, Drizzle ORM, and TypeScript. Designed as a modern, "Apple-like" alternative to legacy clinic systems — with a clean codebase, role-aware dashboards, and a configurable public landing page out of the box.
Multi-role authentication via Supabase Auth: admin, doctor, receptionist, nurse
Role-based dashboards tailored per role — full admin overview, doctor schedule view, receptionist front desk, nurse clinical view
Permission-based navigation and Server Actions — every mutation enforced server-side
Admin-configurable role–permission matrix with 50+ permission keys
Pending approval flow — new self-signup accounts require admin approval before dashboard access
Admin accounts auto-approved on signup — no chicken-and-egg lockout
Demo login shortcuts on the login page for all four roles
Rate limiting — 5 failed attempts by email, 10 by IP within 15 minutes
Brute-force protection — blocked attempts never reach Supabase Auth
Auth audit log — every login, logout, failed attempt, approval, and rejection recorded
Session tracking — active sessions stored with expiry and revocation support
Password policy — minimum 8 characters, uppercase, lowercase, number, special character, blocked common passwords
License activation system at /setup — Envato purchase code verification before dashboard access
Full patient CRUD with search, filters, pagination, and bulk actions
Complete patient profiles — demographics, blood group, height, weight, address, medical history, allergies, emergency contacts
Primary doctor and department assignment
360° Full Profile Sheet — 6-tab patient overview: profile, appointments, prescriptions, medical records, invoices, test reports
CSV export for patient records (requires patients.export permission)
Full appointment workflow — create, reschedule, cancel, update status
Four statuses: pending, confirmed, completed, cancelled
Doctor and service assignment per appointment
Calendar view with drag-and-drop rescheduling via @dnd-kit — day, week, and month views
Today's schedule and upcoming appointments per role on dashboard
CSV export for appointments (requires appointments.export permission)
One invoice per appointment enforced via unique database constraint
Medical records — overview with vitals, clinical notes, diagnoses, attachments, and visit timeline per patient
Vitals — blood pressure (systolic/diastolic), heart rate, temperature, weight, height, BMI auto-calculated
Clinical notes — free text, attributed to author with timestamp
Diagnoses — ICD codes, active/resolved status
Attachments — PDF, DOC, DOCX, JPEG, PNG, GIF, WebP up to 10MB via Supabase Storage
Visit timeline — card view and Gantt view across all patient encounters
Odontograms (dental clinic type only) — 32-tooth universal numbering, condition tracking per tooth, treatment history, versioning per examination
Full prescription CRUD — medication, dosage, frequency, duration, drug interactions
Link to appointment, inventory item, and pharmacy details
Issued date tracking
Test reports — patient lab results with 4 statuses: pending, recorded, verified, delivered
Laboratory tests — test definitions with code, category, sample type, methodology, turnaround time, and price
Test categories, methodologies, sample types, and turnaround times — fully configurable
Lab vendor assignment per test report for traceability
Invoices — create, edit, list; 3 statuses: paid, unpaid, cancelled
Invoice line items — description, type, quantity, unit price
Discount (flat) and tax (percentage, applied post-discount) calculation server-side
Insurance billing fields — provider and policy number
Auto-generated invoice numbers
Payments — record payments against invoices; 4 statuses: completed, pending, failed, refunded
Multiple payments per invoice for partial payment workflows
Expenses — track by date, category, department, and vendor; 5 statuses: pending, approved, paid, rejected, cancelled
12 default expense categories
Receipt URL storage
Revenue vs expenses chart, appointment activity chart, appointment status distribution chart on admin dashboard
Overdue invoice banner on admin dashboard
Services — name, price, duration, category, department, max bookings per day, follow-up required, prerequisites
Departments — code, location, budget, annual budget, head of department
Inventory — stock levels, min-stock alerts, expiry tracking, batch numbers, supplier and lab vendor linking
Low stock alerts on admin and nurse dashboards
Staff — HR records with role, salary, qualifications, work schedule (JSON), department assignment
Staff records and user accounts managed independently
Lab vendors — full supplier profiles, tiers, ratings, contract dates, accreditations, specialties
Payroll — salary periods, bonuses, deductions, net amount, status tracking
Per-user notification drawer in the dashboard header — slides in from the right
Unread badge count on bell icon
Mark individual or all notifications as read
Optional deep link to relevant module or record per notification
Configurable public landing page per clinic type — dental, ophthalmology, general
Separate component sets per clinic type: hero, services, pricing, footer
Admin-configurable branding — clinic name, logo (light + dark), favicon, tagline, hero subtitle, CTA button
Admin-configurable colors — primary, accent, hero background via CSS variables
Admin-configurable content — hero layout, animation, section spacing, button style
SEO settings — meta title and description
Contact details and social media links
Multi-locale landing page — en, fr, es, ar
Blog — publish and manage posts with categories, tags, SEO fields, cover image, custom author, reading time, comments
Comment moderation via Supabase SQL Editor
Public appointment booking page at /appointment
Profile — avatar upload, name, email, password change, account status, member since
Clinic settings (admin) — clinic name and type (general, dental, ophthalmology)
Preferences — theme (light/dark/system), display language, display currency (USD, EUR, GBP, CHF, CAD)
Version tab — current version and release history in collapsible card
Three clinic types: general, dental, ophthalmology
Navigation adapts per type — Odontograms for dental, Medical Records for general and ophthalmology
Landing page components, theme providers, and copy adapt per clinic type
Demo mode via ?clinic= URL parameter — persisted in cookie for 7 days
Next.js 14 App Router — Server Components, Server Actions, streaming, Suspense boundaries
TypeScript strict mode throughout — zero any types
Drizzle ORM — type-safe queries, migrations included
Supabase PostgreSQL with transaction pooler support (port 6543 + pgbouncer)
React cache for per-request deduplication
Module-level clinic cache with 5-minute TTL
Dashboard admin queries batched via Promise.all in two batches to avoid connection pool exhaustion
Server-side Zod validation on every mutation
Dynamic imports for heavy landing page sections
Singleton DB client for dev HMR stability
Security headers — X-Frame-Options, X-Content-Type-Options, HSTS, Referrer-Policy, Permissions-Policy
Dashboard routes set to no-store, no-cache
i18n via next-intl — en, fr, es, ar for dashboard and landing page
Cron job at /api/cron/cleanup-auth — cleans login attempts, audit log, and expired sessions daily
Multi-tenancy not included — one installation serves one clinic; separate installations required for multiple locations
No Stripe or payment gateway integration — payments are recorded manually by staff
Patient self-booking is a request form only — no real-time availability or automatic appointment creation
Comment moderation has no dashboard UI — managed via Supabase SQL Editor
Calendar and Reports pages exist but are not linked in the sidebar navigation (MVP)
RLS not enabled by default — access control enforced at application layer via Server Actions