- In Queue
-
- 12 Patients
- ↑ 4 since last hour -
- Current Slot (10:00-10:30)
-
-
- Online: 3/3 (CLOSED)
-
-
-
- Walk-in: 4/5
-
-
+
+
+
-
+ In Queue
+
+ 12 Patients
+ ↑ 4 since last hour +
+ Current Slot (10:00-10:30)
+
-
+
+ Online: 3/3 (CLOSED)
+
+
+
+ Walk-in: 4/5
+
+
- Avg. Wait Time
-
-
+ 18 Mins
- Target: 15 Mins -
+ Avg. Wait Time
+
+
- 18 Mins
+ Target: 15 Mins +
-
@@ -33,8 +34,8 @@
+
+
+
+
+
diff --git a/login.html b/login.html
index cbdcad7..ad1be63 100644
--- a/login.html
+++ b/login.html
@@ -7,6 +7,7 @@
+
-
Live Queue
-
- All
- Appointments
- Walk-ins
+
+
+
+
+
+
+
+
+
+
+
+
+ Live Queue
+
+ All
+ Appointments
+ Walk-ins
+
| Token | +Patient Name | +Source | +Lang | +Triage AI | +Status | +Arrival | +Actions | +
|---|---|---|---|---|---|---|---|
| #012 | +Rahul Verma | +Online | +HI | +High Fever / Cough | +In Room | +09:15 AM | ++ |
| #013 | +Anjali Singh | +Walk-in | +TE | +General Checkup | +Unpaid (₹500) | +09:30 AM | ++ |
| #014 | +Suresh Kumar | +Online | +EN | +Back Pain | +Paid (Waiting) | +09:45 AM | ++ |
+
+
+
+ ✨ AI Insights
+Predicted peak time: 11:30 AM. Suggesting 5-min break for staff now.
+
+ No-show Alert
+
+ Token #015 (Vikram) hasn't replied to the 10-min reminder.
+
+
+
-
-
-
+
Patient Records
+| Token | -Patient Name | -Source | -Lang | -Triage AI | -Status | -Arrival | +Patient ID | +Name | +Last Visit | +Visits | Actions | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| #012 | +||||||||||||
| CF-1001 | Rahul Verma | -Online | -HI | -High Fever / Cough | -In Room | -09:15 AM | -+ | +91 98765 43210 | +12 May 2026 | +5 | +||
| #013 | +CF-1002 | Anjali Singh | -Walk-in | -TE | -General Checkup | -Unpaid (₹500) | -09:30 AM | -- | ||||
| #014 | -Suresh Kumar | -Online | -EN | -Back Pain | -Paid (Waiting) | -09:45 AM | -+ | +91 98234 56789 | +Today | +2 | +
-
-
+
+
-
- ✨ AI Insights
-Predicted peak time: 11:30 AM. Suggesting 5-min break for staff now.
-
- No-show Alert
-
- Token #015 (Vikram) hasn't replied to the 10-min reminder.
-
diff --git a/dashboard.js b/dashboard.js
index e4031d4..0dbbc0f 100644
--- a/dashboard.js
+++ b/dashboard.js
@@ -93,3 +93,28 @@ startRecordBtn.onclick = () => {
}
}, 3000);
};
+
+// Section Switching Logic
+window.showSection = (sectionId) => {
+ // Hide all sections
+ document.getElementById('overview-section').classList.add('hidden');
+ document.getElementById('patients-section').classList.add('hidden');
+
+ // Show target section
+ if (sectionId === 'overview') {
+ document.getElementById('overview-section').classList.remove('hidden');
+ } else if (sectionId === 'queue') {
+ document.getElementById('overview-section').classList.remove('hidden');
+ document.getElementById('queue-section').scrollIntoView({ behavior: 'smooth' });
+ } else if (sectionId === 'patients') {
+ document.getElementById('patients-section').classList.remove('hidden');
+ }
+
+ // Update active state in nav
+ document.querySelectorAll('.side-nav a').forEach(link => {
+ link.classList.remove('active');
+ if (link.innerText.toLowerCase().includes(sectionId)) {
+ link.classList.add('active');
+ }
+ });
+};
diff --git a/index.css b/index.css
index 4a14c32..d4d5365 100644
--- a/index.css
+++ b/index.css
@@ -432,3 +432,111 @@ footer {
.chat-container { grid-template-columns: 1fr; }
.phone-mockup { margin: 0 auto; }
}
+
+/* Pricing Section */
+.pricing-section {
+ padding: 100px 0;
+ background: var(--bg);
+}
+
+.pricing-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2rem;
+ margin-top: 4rem;
+}
+
+.pricing-card {
+ background: white;
+ padding: 3rem;
+ border-radius: 24px;
+ box-shadow: var(--shadow);
+ text-align: center;
+ border: 1px solid var(--border);
+ transition: transform 0.3s;
+ position: relative;
+ overflow: hidden;
+}
+
+.pricing-card.featured {
+ border-color: var(--secondary);
+ transform: scale(1.05);
+}
+
+.pricing-card.featured::after {
+ content: "Most Popular";
+ position: absolute;
+ top: 20px;
+ right: -35px;
+ background: var(--secondary);
+ color: white;
+ font-size: 0.75rem;
+ font-weight: 700;
+ padding: 0.5rem 3rem;
+ transform: rotate(45deg);
+}
+
+.pricing-card h3 {
+ font-size: 1.5rem;
+ margin-bottom: 1rem;
+}
+
+.price {
+ font-size: 3rem;
+ font-weight: 700;
+ color: var(--primary);
+ margin-bottom: 2rem;
+}
+
+.price span {
+ font-size: 1rem;
+ color: var(--text-muted);
+}
+
+.pricing-features {
+ list-style: none;
+ text-align: left;
+ margin-bottom: 2.5rem;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+}
+
+.pricing-features li {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ font-size: 0.95rem;
+ color: var(--text-muted);
+}
+
+.pricing-features li::before {
+ content: "✓";
+ color: var(--accent);
+ font-weight: 700;
+}
+
+/* Logout & Shared Nav Utilities */
+.logout-btn {
+ margin-top: auto;
+ padding: 0.75rem 1rem;
+ color: #F87171;
+ text-decoration: none;
+ font-size: 0.875rem;
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ border-radius: 8px;
+ transition: background 0.3s;
+}
+
+.logout-btn:hover {
+ background: rgba(239, 68, 68, 0.1);
+}
+
+.user-actions {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
diff --git a/index.html b/index.html
index 04fcb98..005865a 100644
--- a/index.html
+++ b/index.html
@@ -9,6 +9,7 @@
+
Chaotic OPDs are a thing of the past.
Manage tokens, appointments, and patient records entirely through WhatsApp. Reduce waiting room crowds and automate admin work with AI-powered triage.
-
-
+ Deploy to My Clinic
+ Watch Demo
@@ -135,9 +136,53 @@
Send Razorpay links directly on WhatsApp. Integrated GST billing for pharmacy & labs.
-
+ 📜
- Digital Prescriptions
-Doctors can generate prescriptions that are instantly sent to the patient's WhatsApp.
+🏢
+ Multi-Tenant Branding
+Enterprise ready. Full white-label support for hospital chains with custom logos, themes, and domains.
+
+
diff --git a/lab.html b/lab.html
index 2abc16a..62f1c55 100644
--- a/lab.html
+++ b/lab.html
@@ -25,6 +25,14 @@
👔 Staff & Payroll
⚙️ Settings
+
+
+ Simple, Transparent Pricing
+Choose the plan that fits your clinic's volume.
+
+
+
+ Basic
+₹1,499/mo
+ -
+
- Up to 500 tokens/mo +
- Basic WhatsApp Queue +
- Digital Prescriptions +
- Single Doctor Support +
+
+ Pro
+₹3,999/mo
+ -
+
- Unlimited Tokens +
- AI Triage & Summaries +
- Pharmacy & Lab Integration +
- Multi-Doctor Support +
+
Enterprise
+Custom
+ -
+
- Multi-Clinic Chain +
- Custom AI Training +
- White-label WhatsApp Bot +
- Dedicated Account Manager +
+
LT
+
+ Lab Tech
+ Staff
+ 🚪 Logout
+
+
@@ -37,7 +38,14 @@
diff --git a/pharmacy.html b/pharmacy.html
index 12f347f..f6e10b5 100644
--- a/pharmacy.html
+++ b/pharmacy.html
@@ -25,6 +25,14 @@
👔 Staff & Payroll
⚙️ Settings
+
diff --git a/settings.html b/settings.html
index 257b137..27e12bb 100644
--- a/settings.html
+++ b/settings.html
@@ -25,6 +25,14 @@
👔 Staff & Payroll
⚙️ Settings
+
diff --git a/staff.html b/staff.html
index edb1bca..f2d235d 100644
--- a/staff.html
+++ b/staff.html
@@ -25,6 +25,14 @@
👔 Staff & Payroll
⚙️ Settings
+
diff --git a/tenantLoader.js b/tenantLoader.js
new file mode 100644
index 0000000..ecc28af
--- /dev/null
+++ b/tenantLoader.js
@@ -0,0 +1,47 @@
+/**
+ * tenantLoader.js: Dynamically applies branding and multi-tenant settings.
+ */
+
+async function loadTenantBranding() {
+ // Determine tenant from URL (e.g., ?tenant=sharma-clinic) or localStorage
+ const urlParams = new URLSearchParams(window.location.search);
+ let tenantId = urlParams.get('tenant') || localStorage.getItem('curaflow_tenant') || 'default';
+
+ // Save to localStorage for persistence across pages
+ localStorage.setItem('curaflow_tenant', tenantId);
+
+ try {
+ const response = await fetch(`/api/config/${tenantId}`);
+ const config = await response.json();
+
+ applyBranding(config);
+ } catch (error) {
+ console.error("Failed to load tenant branding:", error);
+ }
+}
+
+function applyBranding(config) {
+ // 1. Apply CSS Variables for dynamic coloring
+ document.documentElement.style.setProperty('--primary', config.primaryColor);
+ document.documentElement.style.setProperty('--secondary', config.secondaryColor);
+
+ // 2. Update UI Elements (Logo, Name)
+ const logoIcons = document.querySelectorAll('.logo-icon');
+ const logoTexts = document.querySelectorAll('.logo-text, .header-title h1, .auth-logo h1');
+ const hospitalNames = document.querySelectorAll('.hospital-name, .logo-text');
+
+ logoIcons.forEach(icon => icon.innerText = config.logo);
+
+ // Update Document Title
+ document.title = `${config.name} | CuraFlow`;
+
+ // Update instances of hospital name in text
+ document.querySelectorAll('[data-tenant-name]').forEach(el => {
+ el.innerText = config.name;
+ });
+
+ console.log(`Branding applied for: ${config.name}`);
+}
+
+// Auto-load on script include
+document.addEventListener('DOMContentLoaded', loadTenantBranding);
+
PH
+
+ Pharmacy Head
+ Staff
+ 🚪 Logout
+
+
+
AD
+
+ Admin
+ Settings
+ 🚪 Logout
+
+
+
SA
+
+ Staff Admin
+ Staff
+ 🚪 Logout
+
+