evaldoc 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.env.staging.example +19 -0
  2. package/.firebaserc +6 -0
  3. package/.github/workflows/auto-merge-to-main.yml +28 -0
  4. package/.github/workflows/ci.yml +27 -0
  5. package/.github/workflows/npxhub-publish.yml +170 -0
  6. package/.prettierignore +4 -0
  7. package/.prettierrc.json +7 -0
  8. package/README.md +142 -0
  9. package/SRS.md +448 -0
  10. package/apphosting.staging.yaml +48 -0
  11. package/apphosting.yaml +50 -0
  12. package/bin/evaldoc.cjs +105 -0
  13. package/cors.json +8 -0
  14. package/docs/ARCHITECTURE.md +769 -0
  15. package/docs/ARCHITECTURE_SUMMARY.md +323 -0
  16. package/docs/DEPLOYMENT.md +86 -0
  17. package/docs/DEPLOYMENT_STEPS.md +373 -0
  18. package/docs/DEPLOY_FIRESTORE_RULES.md +239 -0
  19. package/docs/DEPLOY_STORAGE_RULES.md +82 -0
  20. package/docs/DOCTOR_TUTORIAL.md +467 -0
  21. package/docs/FIREBASE_STORAGE_CORS_FIX.md +131 -0
  22. package/docs/FIXES_APPLIED.md +128 -0
  23. package/docs/IMPLEMENTATION.md +498 -0
  24. package/docs/IMPLEMENTATION_COMPLETE.md +317 -0
  25. package/docs/LLM-SETUP.md +216 -0
  26. package/docs/MANUAL_TEST_GUIDE.md +327 -0
  27. package/docs/PATIENT_GUIDE.md +451 -0
  28. package/docs/PLATFORM_OVERVIEW.md +194 -0
  29. package/docs/QUICKSTART.md +252 -0
  30. package/docs/QUICK_REFERENCE.md +222 -0
  31. package/docs/READY_TO_TEST.md +383 -0
  32. package/docs/RUN.md +237 -0
  33. package/docs/START_TESTING.md +130 -0
  34. package/docs/STRIPE_CONNECT_SETUP.md +454 -0
  35. package/docs/SYSTEM_READY.md +345 -0
  36. package/docs/THREADS_IMPLEMENTATION_COMPLETE.md +431 -0
  37. package/docs/THREAD_IMPLEMENTATION_GUIDE.md +345 -0
  38. package/docs/firebasefiles.md +21 -0
  39. package/docs/homepage.md +1208 -0
  40. package/docs/payments.md +159 -0
  41. package/eslint.config.js +76 -0
  42. package/firebase.json +27 -0
  43. package/firestore.indexes.json +88 -0
  44. package/firestore.rules +125 -0
  45. package/functions/package-lock.json +2884 -0
  46. package/functions/package.json +20 -0
  47. package/functions/src/analytics.js +101 -0
  48. package/functions/src/audit.js +28 -0
  49. package/functions/src/auth.js +19 -0
  50. package/functions/src/drafts.js +128 -0
  51. package/functions/src/feedback.js +164 -0
  52. package/functions/src/firebase-init.js +29 -0
  53. package/functions/src/i18n.js +134 -0
  54. package/functions/src/limits.js +27 -0
  55. package/functions/src/llm.js +271 -0
  56. package/functions/src/ner.js +162 -0
  57. package/functions/src/notifications.js +273 -0
  58. package/functions/src/orgs.js +127 -0
  59. package/functions/src/patient-api.js +545 -0
  60. package/functions/src/payment.js +830 -0
  61. package/functions/src/safety.js +188 -0
  62. package/functions/src/stripe-config.js +33 -0
  63. package/functions/src/topics.js +94 -0
  64. package/functions/src/triage.js +191 -0
  65. package/functions/src/utils.js +28 -0
  66. package/functions/src/validate.js +177 -0
  67. package/functions/test-firebase.js +36 -0
  68. package/jest.config.js +18 -0
  69. package/package.json +52 -0
  70. package/public/404.html +93 -0
  71. package/public/app/analytics.html +336 -0
  72. package/public/app/analytics.js +177 -0
  73. package/public/app/app.css +1400 -0
  74. package/public/app/app.js +1754 -0
  75. package/public/app/config.js +14 -0
  76. package/public/app/inbox-threads.js +843 -0
  77. package/public/app/inbox.html +598 -0
  78. package/public/app/inbox.js +397 -0
  79. package/public/app/index.html +612 -0
  80. package/public/assets/logo.jpg +0 -0
  81. package/public/chat.html +137 -0
  82. package/public/css/chat.css +870 -0
  83. package/public/css/landing-enhance.css +298 -0
  84. package/public/css/styles.css +1198 -0
  85. package/public/favicon.svg +5 -0
  86. package/public/find-doctor.html +220 -0
  87. package/public/index.html +399 -0
  88. package/public/js/chat-threads.js +513 -0
  89. package/public/js/chat.js +832 -0
  90. package/public/js/search.js +41 -0
  91. package/public/privacy.html +101 -0
  92. package/public/robots.txt +6 -0
  93. package/public/site.webmanifest +12 -0
  94. package/public/terms.html +110 -0
  95. package/scripts/create-test-provider.js +55 -0
  96. package/scripts/deploy-staging.sh +51 -0
  97. package/scripts/fix-provider.js +39 -0
  98. package/scripts/quick-test.sh +37 -0
  99. package/scripts/test-chat.sh +54 -0
  100. package/scripts/test-multi-turn.js +137 -0
  101. package/scripts/test-ner-simple.js +28 -0
  102. package/scripts/test-ner.js +60 -0
  103. package/scripts/test-stripe-connect.js +304 -0
  104. package/scripts/test-webhook-secret.sh +24 -0
  105. package/server.js +3864 -0
  106. package/storage.rules +22 -0
  107. package/test-api.json +1 -0
  108. package/tests/emulator/README.md +38 -0
  109. package/tests/emulator/counters.emulator.test.js +81 -0
  110. package/tests/integration/api-account-selfserve.test.js +312 -0
  111. package/tests/integration/api-admin-digest.test.js +202 -0
  112. package/tests/integration/api-chat-satisfaction.test.js +259 -0
  113. package/tests/integration/api-doctor-drafts.test.js +236 -0
  114. package/tests/integration/api-doctor-inbox.test.js +401 -0
  115. package/tests/integration/api-org.test.js +328 -0
  116. package/tests/integration/api-payment.test.js +664 -0
  117. package/tests/integration/api-provider-settings.test.js +475 -0
  118. package/tests/integration/api-qr.test.js +121 -0
  119. package/tests/integration/api-security.test.js +241 -0
  120. package/tests/integration/api-stripe-search.test.js +303 -0
  121. package/tests/integration/api-webhook-deletion.test.js +231 -0
  122. package/tests/mocks/firebase-admin.js +220 -0
  123. package/tests/unit/analytics.test.js +151 -0
  124. package/tests/unit/audit-bugs.test.js +203 -0
  125. package/tests/unit/chat-ui-logic.test.js +283 -0
  126. package/tests/unit/drafts.test.js +104 -0
  127. package/tests/unit/feedback.test.js +148 -0
  128. package/tests/unit/i18n.test.js +229 -0
  129. package/tests/unit/llm-retry.test.js +122 -0
  130. package/tests/unit/notifications.test.js +155 -0
  131. package/tests/unit/orgs.test.js +328 -0
  132. package/tests/unit/payment.test.js +889 -0
  133. package/tests/unit/safety-edge-cases.test.js +509 -0
  134. package/tests/unit/safety-srs-compliance.test.js +252 -0
  135. package/tests/unit/safety.test.js +291 -0
  136. package/tests/unit/server-helpers.test.js +774 -0
  137. package/tests/unit/topics-limits.test.js +158 -0
  138. package/tests/unit/triage.test.js +152 -0
  139. package/tests/unit/validate.test.js +408 -0
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="EvalDoc">
2
+ <rect width="64" height="64" rx="14" fill="#0e1a14"/>
3
+ <path d="M16 20a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v14a6 6 0 0 1-6 6H28l-9 8v-8h-3a6 6 0 0 1-6-6z" fill="#4fb3a4"/>
4
+ <path d="M31 21h4v5h5v4h-5v5h-4v-5h-5v-4h5z" fill="#0e1a14"/>
5
+ </svg>
@@ -0,0 +1,220 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Find Your Doctor - EvalDoc</title>
7
+ <meta name="description" content="Search for healthcare providers by name, specialty, or location.">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
11
+ <link rel="stylesheet" href="/css/styles.css">
12
+ <style>
13
+ .directory-hero {
14
+ padding: 3rem 0;
15
+ background: linear-gradient(180deg, var(--light-gray) 0%, var(--white) 100%);
16
+ text-align: center;
17
+ }
18
+
19
+ .directory-hero h1 {
20
+ font-size: 2.5rem;
21
+ margin-bottom: 1rem;
22
+ }
23
+
24
+ .directory-search {
25
+ max-width: 800px;
26
+ margin: 2rem auto;
27
+ padding: 0 2rem;
28
+ }
29
+
30
+ .directory-search input {
31
+ width: 100%;
32
+ padding: 1rem 1.5rem;
33
+ border: 2px solid var(--border);
34
+ border-radius: var(--radius);
35
+ font-size: 1.1rem;
36
+ font-family: inherit;
37
+ }
38
+
39
+ .directory-search input:focus {
40
+ outline: none;
41
+ border-color: var(--primary);
42
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
43
+ }
44
+
45
+ .directory-results {
46
+ max-width: 1200px;
47
+ margin: 3rem auto;
48
+ padding: 0 2rem;
49
+ }
50
+
51
+ .provider-card {
52
+ background: var(--white);
53
+ border: 2px solid var(--border);
54
+ border-radius: var(--radius);
55
+ padding: 2rem;
56
+ margin-bottom: 1.5rem;
57
+ display: flex;
58
+ justify-content: space-between;
59
+ align-items: center;
60
+ transition: var(--transition);
61
+ cursor: pointer;
62
+ }
63
+
64
+ .provider-card:hover {
65
+ border-color: var(--primary);
66
+ box-shadow: 0 4px 12px var(--shadow);
67
+ transform: translateY(-2px);
68
+ }
69
+
70
+ .provider-details h3 {
71
+ font-size: 1.5rem;
72
+ margin-bottom: 0.5rem;
73
+ color: var(--dark);
74
+ }
75
+
76
+ .provider-details p {
77
+ color: var(--gray);
78
+ margin-bottom: 0.25rem;
79
+ }
80
+
81
+ .provider-badge {
82
+ display: inline-block;
83
+ background: var(--light-gray);
84
+ padding: 0.25rem 0.75rem;
85
+ border-radius: 6px;
86
+ font-size: 0.875rem;
87
+ margin-top: 0.5rem;
88
+ }
89
+
90
+ .provider-action {
91
+ flex-shrink: 0;
92
+ margin-left: 2rem;
93
+ }
94
+
95
+ .provider-action button {
96
+ padding: 0.75rem 2rem;
97
+ background: var(--primary);
98
+ color: white;
99
+ border: none;
100
+ border-radius: var(--radius);
101
+ font-weight: 600;
102
+ cursor: pointer;
103
+ transition: var(--transition);
104
+ font-family: inherit;
105
+ }
106
+
107
+ .provider-action button:hover {
108
+ background: var(--primary-dark);
109
+ }
110
+
111
+ .loading-state {
112
+ text-align: center;
113
+ padding: 3rem;
114
+ color: var(--gray);
115
+ }
116
+
117
+ .no-results {
118
+ text-align: center;
119
+ padding: 3rem;
120
+ color: var(--gray);
121
+ }
122
+
123
+ .no-results h3 {
124
+ font-size: 1.5rem;
125
+ margin-bottom: 1rem;
126
+ }
127
+ </style>
128
+ <!-- Google tag (gtag.js) -->
129
+ <script async src="https://www.googletagmanager.com/gtag/js?id=G-NPWYSPFSVG"></script>
130
+ <script>
131
+ window.dataLayer = window.dataLayer || [];
132
+ function gtag(){dataLayer.push(arguments);}
133
+ gtag("js", new Date());
134
+
135
+ gtag("config", "G-NPWYSPFSVG");
136
+ </script>
137
+ </head>
138
+ <body>
139
+ <!-- Navigation -->
140
+ <nav class="navbar">
141
+ <div class="nav-container">
142
+ <a href="/" class="logo">
143
+ <div class="logo-icon">ED</div>
144
+ <span>EvalDoc</span>
145
+ </a>
146
+ <div class="nav-links">
147
+ <a href="/#how-it-works">How It Works</a>
148
+ <a href="/#safety">Safety</a>
149
+ <a href="/find-doctor.html">Find Doctor</a>
150
+ </div>
151
+ </div>
152
+ </nav>
153
+
154
+ <!-- Hero Section -->
155
+ <section class="directory-hero">
156
+ <h1>Find Your Healthcare Provider</h1>
157
+ <p>Provider directory is paused until launch. Request early access below.</p>
158
+
159
+ <div class="directory-search">
160
+ <input type="text"
161
+ id="searchInput"
162
+ placeholder="Provider search opens at launch"
163
+ autocomplete="off" disabled>
164
+ </div>
165
+ </section>
166
+
167
+ <!-- Results Section -->
168
+ <section class="directory-results">
169
+ <div id="resultsContainer">
170
+ <div class="loading-state">
171
+ Enter a search term to find providers
172
+ </div>
173
+ </div>
174
+ </section>
175
+
176
+ <!-- Footer -->
177
+ <footer class="footer">
178
+ <div class="footer-container">
179
+ <div class="footer-section">
180
+ <h4>EvalDoc</h4>
181
+ <p>AI-powered patient support with medical safety first</p>
182
+ </div>
183
+ <div class="footer-section">
184
+ <h4>Resources</h4>
185
+ <a href="/#how-it-works">How It Works</a>
186
+ <a href="/#safety">Safety</a>
187
+ <a href="/find-doctor.html">Find Doctor</a>
188
+ </div>
189
+ <div class="footer-section">
190
+ <h4>Legal</h4>
191
+ <p class="small">Β© 2026 EvalDoc. All rights reserved.</p>
192
+ <p class="disclaimer-small">This platform provides educational information only, not medical advice.</p>
193
+ </div>
194
+ </div>
195
+ </footer>
196
+
197
+ <script>
198
+ const searchInput = document.getElementById('searchInput');
199
+ const resultsContainer = document.getElementById('resultsContainer');
200
+
201
+ searchInput.addEventListener('focus', redirectToEarlyAccess);
202
+
203
+ resultsContainer.innerHTML = `
204
+ <div class="no-results">
205
+ <h3>Provider search is coming soon</h3>
206
+ <p>We are onboarding doctors ahead of launch.</p>
207
+ <p><a href="/#waitlist">Request early access now</a></p>
208
+ </div>
209
+ `;
210
+
211
+ function redirectToEarlyAccess() {
212
+ window.location.href = '/#waitlist';
213
+ }
214
+
215
+ function goToProvider() {
216
+ redirectToEarlyAccess();
217
+ }
218
+ </script>
219
+ </body>
220
+ </html>
@@ -0,0 +1,399 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>EvalDoc - Instant Medical Guidance. Doctor-Controlled. Worldwide.</title>
7
+ <meta name="description" content="EvalDoc helps patients access safe medical knowledge instantlyβ€”while keeping doctors focused on real clinical care. Works anywhere, on any device.">
8
+ <meta name="theme-color" content="#0e1a14">
9
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml">
10
+ <link rel="apple-touch-icon" href="/favicon.svg">
11
+ <link rel="manifest" href="/site.webmanifest">
12
+ <meta property="og:type" content="website">
13
+ <meta property="og:title" content="EvalDoc β€” Safe medical guidance, doctor-controlled">
14
+ <meta property="og:description" content="Give patients a safe, topic-based AI health chat under your brand. Set up in minutes.">
15
+ <meta name="twitter:card" content="summary">
16
+ <link rel="preconnect" href="https://fonts.googleapis.com">
17
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
18
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
19
+ <link rel="stylesheet" href="/css/styles.css">
20
+ <link rel="stylesheet" href="/css/landing-enhance.css">
21
+ <!-- Google tag (gtag.js) -->
22
+ <script async src="https://www.googletagmanager.com/gtag/js?id=G-NPWYSPFSVG"></script>
23
+ <script>
24
+ window.dataLayer = window.dataLayer || [];
25
+ function gtag(){dataLayer.push(arguments);}
26
+ gtag("js", new Date());
27
+
28
+ gtag("config", "G-NPWYSPFSVG");
29
+ </script>
30
+ </head>
31
+ <body class="landing-v2">
32
+ <!-- Navigation -->
33
+ <nav class="navbar">
34
+ <div class="nav-container">
35
+ <a href="/" class="logo">
36
+ <img src="/assets/logo.jpg" alt="Logo" class="logo-img-nav" />
37
+ <span>EvalDoc</span>
38
+ </a>
39
+ <div class="nav-links">
40
+ <a href="#how-it-works">How It Works</a>
41
+ <a href="#platform">Built for You</a>
42
+ <a href="#safety">Safety</a>
43
+ <a href="/app" class="nav-cta">Doctor Sign Up</a>
44
+ </div>
45
+ </div>
46
+ </nav>
47
+
48
+ <!-- Hero Section -->
49
+ <section class="hero">
50
+ <div class="hero-container">
51
+ <div class="hero-content">
52
+ <div class="hero-badge">Built for real healthcare. Not a chatbot. Not a diagnosis engine.</div>
53
+
54
+ <h1>Instant medical guidance.<br>Doctor-controlled.<br>Available worldwide.</h1>
55
+
56
+ <p class="hero-subtitle">EvalDoc helps patients access safe medical knowledge instantlyβ€”while keeping doctors focused on real clinical care.</p>
57
+
58
+ <!-- Primary Search Box -->
59
+ <div class="search-box-hero">
60
+ <h3>Find your doctor</h3>
61
+ <div class="search-form">
62
+ <input type="text"
63
+ id="providerSearch"
64
+ placeholder="Provider search opens at launch"
65
+ autocomplete="off" disabled>
66
+ <button onclick="searchProvider()">Request Early Access</button>
67
+ </div>
68
+ <p class="search-hint">Provider search is temporarily disabled. Request early access to join launch.</p>
69
+ <div id="quickResults" class="quick-results"></div>
70
+ </div>
71
+
72
+ <div class="hero-trust-line">AI handles routine questions. Doctors handle medicine.</div>
73
+ </div>
74
+
75
+ <div class="hero-visual">
76
+ <div class="visual-card">
77
+ <div class="visual-header">
78
+ <div class="visual-avatar-container">
79
+ <img src="/assets/logo.jpg" alt="Logo" class="visual-logo" />
80
+ <div class="visual-avatar">Dr. Amina</div>
81
+ </div>
82
+ <div class="visual-status">
83
+ <div class="status-text">Family Medicine</div>
84
+ <div class="status-indicator">● Online</div>
85
+ </div>
86
+ </div>
87
+ <div class="chat-demo">
88
+ <div class="chat-bubble patient">
89
+ <p>What should I do about my child's fever?</p>
90
+ </div>
91
+ <div class="chat-bubble ai">
92
+ <p>For a child with fever, monitor temperature and hydration. If fever exceeds 38.5Β°C or persists beyond 3 days, please contact Dr. Amina directly.</p>
93
+ </div>
94
+ <div class="chat-bubble patient">
95
+ <p>What about over-the-counter medication?</p>
96
+ </div>
97
+ <div class="chat-bubble ai">
98
+ <p>🚨 This requires medical advice. Dr. Amina has been notified and will respond soon.</p>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ </div>
103
+ </div>
104
+ </section>
105
+
106
+ <!-- Context Strip -->
107
+ <section class="context-strip">
108
+ <div class="context-container">
109
+ <div class="context-text">
110
+ <p class="context-headline">Everywhere, doctors are overwhelmed. Patients are waiting.</p>
111
+ <p class="context-stats">Billions underserved globally &bull; Too few doctors &bull; Too much waiting</p>
112
+ </div>
113
+ </div>
114
+ </section>
115
+
116
+ <!-- The Problem -->
117
+ <section id="problem" class="section">
118
+ <h2>Healthcare demand has outgrown doctor availability</h2>
119
+
120
+ <div class="problem-grid">
121
+ <div class="problem-col">
122
+ <h3>πŸ‘₯ Patients</h3>
123
+ <ul class="problem-list">
124
+ <li>Wait hours or days for appointments</li>
125
+ <li>Travel long distances to clinics</li>
126
+ <li>Google symptoms β†’ misinformation</li>
127
+ <li>Delay care until it's too late</li>
128
+ </ul>
129
+ </div>
130
+ <div class="problem-col">
131
+ <h3>πŸ‘¨β€βš•οΈ Doctors</h3>
132
+ <ul class="problem-list">
133
+ <li>Endless WhatsApp messages</li>
134
+ <li>Repetitive explanations</li>
135
+ <li>Burnout from non-clinical work</li>
136
+ <li>Less time for real diagnoses</li>
137
+ </ul>
138
+ </div>
139
+ </div>
140
+
141
+ <p class="problem-bold">Doctors are becoming support agents. Patients are becoming guessers.</p>
142
+ </section>
143
+
144
+ <!-- The Solution -->
145
+ <section id="solution" class="section section-light">
146
+ <h2>EvalDoc is the AI front desk for modern healthcare</h2>
147
+
148
+ <p class="solution-intro">EvalDoc gives every doctor a <strong>personal AI assistant link</strong> that patients can use to get safe, non-urgent medical guidanceβ€”instantly.</p>
149
+
150
+ <div class="features-grid">
151
+ <div class="feature-card">
152
+ <div class="feature-icon-large">πŸ”—</div>
153
+ <h3>One Link</h3>
154
+ <p>Doctors share one secure link via WhatsApp, SMS, or QR code. Zero apps. Zero friction.</p>
155
+ </div>
156
+ <div class="feature-card">
157
+ <div class="feature-icon-large">πŸ€–</div>
158
+ <h3>Safe AI Support</h3>
159
+ <p>AI answers non-urgent questions, explains symptoms, and detects red flags automatically.</p>
160
+ </div>
161
+ <div class="feature-card">
162
+ <div class="feature-icon-large">πŸ‘©β€βš•οΈ</div>
163
+ <h3>Doctor in Control</h3>
164
+ <p>Doctors review, escalate, and decide. AI never diagnoses. AI never prescribes.</p>
165
+ </div>
166
+ </div>
167
+ </section>
168
+
169
+ <!-- How It Works -->
170
+ <section id="how-it-works" class="section">
171
+ <h2>How EvalDoc Works</h2>
172
+
173
+ <div class="flow-diagram">
174
+ <div class="flow-step">
175
+ <div class="flow-number">1</div>
176
+ <h4>Doctor creates EvalDoc link</h4>
177
+ <p>Sign up in 2 minutes</p>
178
+ </div>
179
+ <div class="flow-arrow">β†’</div>
180
+ <div class="flow-step">
181
+ <div class="flow-number">2</div>
182
+ <h4>Patient asks a question</h4>
183
+ <p>Via WhatsApp or web</p>
184
+ </div>
185
+ <div class="flow-arrow">β†’</div>
186
+ <div class="flow-step">
187
+ <div class="flow-number">3</div>
188
+ <h4>AI responds safely</h4>
189
+ <p>Educational, not diagnostic</p>
190
+ </div>
191
+ <div class="flow-arrow">β†’</div>
192
+ <div class="flow-step">
193
+ <div class="flow-number">4</div>
194
+ <h4>Doctor steps in if needed</h4>
195
+ <p>Review & escalate</p>
196
+ </div>
197
+ </div>
198
+
199
+ <p class="flow-caption">Zero apps. Zero friction. One trusted pathway.</p>
200
+ </section>
201
+
202
+ <!-- Platform Features -->
203
+ <section id="platform" class="section section-dark">
204
+ <h2>Designed for real healthcare, anywhere</h2>
205
+
206
+ <div class="platform-grid">
207
+ <div class="platform-feature">
208
+ <div class="platform-icon">πŸ“±</div>
209
+ <h3>Mobile-first</h3>
210
+ <p>Works on any phone, any browser</p>
211
+ </div>
212
+ <div class="platform-feature">
213
+ <div class="platform-icon">πŸ“Ά</div>
214
+ <h3>Low data usage</h3>
215
+ <p>Optimized for any network condition</p>
216
+ </div>
217
+ <div class="platform-feature">
218
+ <div class="platform-icon">πŸ’¬</div>
219
+ <h3>Share anywhere</h3>
220
+ <p>WhatsApp, SMS, email, or QR code</p>
221
+ </div>
222
+ <div class="platform-feature">
223
+ <div class="platform-icon">πŸ₯</div>
224
+ <h3>Scales with you</h3>
225
+ <p>Solo doctors to multi-clinic networks</p>
226
+ </div>
227
+ </div>
228
+
229
+ <p class="platform-tagline">EvalDoc scales without increasing doctor workload.</p>
230
+ </section>
231
+
232
+ <!-- Safety -->
233
+ <section id="safety" class="section">
234
+ <h2>Medical-first. Safety-first.</h2>
235
+
236
+ <div class="safety-checklist">
237
+ <div class="safety-item no">
238
+ <span class="safety-icon">❌</span>
239
+ <span class="safety-text"><strong>No diagnoses</strong> – AI never tells patients what disease they have</span>
240
+ </div>
241
+ <div class="safety-item no">
242
+ <span class="safety-icon">❌</span>
243
+ <span class="safety-text"><strong>No prescriptions</strong> – AI never recommends specific medications</span>
244
+ </div>
245
+ <div class="safety-item yes">
246
+ <span class="safety-icon">βœ…</span>
247
+ <span class="safety-text"><strong>Red-flag detection</strong> – Chest pain, breathing issues β†’ instant escalation</span>
248
+ </div>
249
+ <div class="safety-item yes">
250
+ <span class="safety-icon">βœ…</span>
251
+ <span class="safety-text"><strong>Doctor oversight</strong> – Every conversation logged for provider review</span>
252
+ </div>
253
+ <div class="safety-item yes">
254
+ <span class="safety-icon">βœ…</span>
255
+ <span class="safety-text"><strong>Clear patient education</strong> – AI explains when to seek in-person care</span>
256
+ </div>
257
+ </div>
258
+
259
+ <p class="safety-disclaimer">EvalDoc supports careβ€”it does not replace a medical professional.</p>
260
+ </section>
261
+
262
+ <!-- Who It's For -->
263
+ <section id="who" class="section section-light">
264
+ <h2>Built for doctors and patients</h2>
265
+
266
+ <div class="who-grid">
267
+ <div class="who-card">
268
+ <h3>πŸ‘¨β€βš•οΈ For Doctors & Clinics</h3>
269
+ <ul class="who-list">
270
+ <li>Reduce burnout from repetitive questions</li>
271
+ <li>Focus on real clinical cases</li>
272
+ <li>Serve more patients safely</li>
273
+ <li>Earn ethically with transparent pricing</li>
274
+ </ul>
275
+ <a href="/app" class="btn-secondary">Register as a Doctor</a>
276
+ </div>
277
+ <div class="who-card">
278
+ <h3>πŸ‘₯ For Patients</h3>
279
+ <ul class="who-list">
280
+ <li>Get faster answers to non-urgent questions</li>
281
+ <li>Reduce anxiety before appointments</li>
282
+ <li>Make better healthcare decisions</li>
283
+ <li>Stay connected to trusted doctors</li>
284
+ </ul>
285
+ <a href="#waitlist" class="btn-secondary">Request Early Access</a>
286
+ </div>
287
+ </div>
288
+ </section>
289
+
290
+ <!-- Business Model -->
291
+ <section id="model" class="section">
292
+ <h2>Simple pricing. Scale as you grow.</h2>
293
+
294
+ <div class="model-cards">
295
+ <div class="model-card">
296
+ <div class="model-icon">πŸ†“</div>
297
+ <h4>Free</h4>
298
+ <p>50 chats/month. Perfect for trying EvalDoc risk-free.</p>
299
+ </div>
300
+ <div class="model-card" style="border: 2px solid #4fb3a4; border-radius: 12px;">
301
+ <div class="model-icon">⚑</div>
302
+ <h4>Pro β€” $49/mo</h4>
303
+ <p>500 chats/month. CSV export. Priority support. Full branding.</p>
304
+ </div>
305
+ <div class="model-card">
306
+ <div class="model-icon">πŸ₯</div>
307
+ <h4>Clinic β€” $149/mo</h4>
308
+ <p>5,000 chats/month. Multi-provider. API access. Dedicated manager.</p>
309
+ </div>
310
+ </div>
311
+
312
+ <div class="model-cards" style="margin-top: 1.5rem;">
313
+ <div class="model-card">
314
+ <div class="model-icon">πŸ’³</div>
315
+ <h4>Patient payments (optional)</h4>
316
+ <p>Doctors can charge per-chat or subscription. 25% platform fee on patient payments.</p>
317
+ </div>
318
+ <div class="model-card">
319
+ <div class="model-icon">🌍</div>
320
+ <h4>Multi-currency support</h4>
321
+ <p>Accept payments in USD, EUR, GBP, CAD, AUD, and 30+ currencies via Stripe.</p>
322
+ </div>
323
+ <div class="model-card">
324
+ <div class="model-icon">🀝</div>
325
+ <h4>Referral program</h4>
326
+ <p>Refer doctors, earn credits. Both you and your referral get 1 month free Pro.</p>
327
+ </div>
328
+ </div>
329
+
330
+ <div class="model-principles">
331
+ <p><strong>No ads. No data selling. Healthcare trust comes first.</strong></p>
332
+ </div>
333
+ </section>
334
+
335
+ <!-- Feyti Brand -->
336
+ <section class="feyti-strip">
337
+ <div class="feyti-container">
338
+ <img src="/assets/logo.jpg" alt="Feyti Medical Group Logo" class="feyti-logo" />
339
+ <div class="feyti-text-container">
340
+ <p class="feyti-text">A product of <strong>Feyti Medical Group, Inc.</strong></p>
341
+ <p class="feyti-tagline">Healthcare. Compliance. Trust.</p>
342
+ </div>
343
+ </div>
344
+ </section>
345
+
346
+ <!-- Final CTA -->
347
+ <section id="get-started" class="final-cta">
348
+ <div class="final-cta-container">
349
+ <div class="waitlist-launch-badge">βœ… Now live</div>
350
+ <h2>Get started today</h2>
351
+ <p>Doctors: launch your AI assistant in minutes. Patients: find your provider and start chatting.</p>
352
+
353
+ <div class="final-cta-buttons">
354
+ <a href="/app" class="btn-large-primary">Join as a Doctor</a>
355
+ <a href="#" onclick="document.getElementById('providerSearch').focus(); window.scrollTo({top:0,behavior:'smooth'}); return false;" class="btn-large-secondary">Find Your Doctor</a>
356
+ </div>
357
+
358
+ <p class="final-cta-footer">Built for doctors. Built for patients. Everywhere.</p>
359
+ </div>
360
+ </section>
361
+
362
+ <!-- Footer -->
363
+ <footer class="footer">
364
+ <div class="footer-container">
365
+ <div class="footer-section">
366
+ <h4>EvalDoc</h4>
367
+ <p>Instant medical guidance for healthcare providers worldwide.</p>
368
+ <p class="footer-brand">A product of Feyti Medical Group, Inc.</p>
369
+ <p class="footer-address">
370
+ 1111B S Governors Ave STE 21329<br>
371
+ Dover, DE 19904 US
372
+ </p>
373
+ </div>
374
+ <div class="footer-section">
375
+ <h4>Product</h4>
376
+ <a href="#how-it-works">How It Works</a>
377
+ <a href="#platform">Built for You</a>
378
+ <a href="#safety">Safety & Compliance</a>
379
+ <a href="/app">For Doctors</a>
380
+ <a href="https://evaldoctor.ai" target="_blank">Website</a>
381
+ </div>
382
+ <div class="footer-section">
383
+ <h4>Contact</h4>
384
+ <a href="mailto:helpme@evaldoctor.ai">helpme@evaldoctor.ai</a>
385
+ <a href="https://evaldoctor.ai" target="_blank">evaldoctor.ai</a>
386
+ <a href="https://feytimedicalgroup.com" target="_blank">Feyti Medical Group</a>
387
+ <a href="/privacy.html">Privacy Policy</a>
388
+ <a href="/terms.html">Terms of Service</a>
389
+ </div>
390
+ </div>
391
+ <div class="footer-bottom">
392
+ <p>Β© 2026 Feyti Medical Group, Inc. All rights reserved.</p>
393
+ <p class="footer-disclaimer">EvalDoc provides educational information only, not medical advice. Always consult a licensed healthcare provider for medical decisions.</p>
394
+ </div>
395
+ </footer>
396
+
397
+ <script src="/js/search.js"></script>
398
+ </body>
399
+ </html>