-
Digital Signature
-
-
Click to upload or drag your signature image
-
+
Blocked Dates
+
Select dates you are unavailable for consultations.
+
+
+
+
+
+
+
+
Profile Media (Public)
+
Upload a profile video or image for the patient portal.
+
+
+
Click to upload image or video
+
+
+
+
+
+
+
Q&A (Public)
+
Add common questions patients ask you.
+
+
+
+
+
+
diff --git a/tools/log-viewer/public/index.html b/tools/log-viewer/public/index.html
new file mode 100644
index 0000000..4994f88
--- /dev/null
+++ b/tools/log-viewer/public/index.html
@@ -0,0 +1,183 @@
+
+
+
+
+
+
Curio Live Logs
+
+
+
+
+
+
+
+
+
diff --git a/tools/log-viewer/server.js b/tools/log-viewer/server.js
new file mode 100644
index 0000000..0aa16be
--- /dev/null
+++ b/tools/log-viewer/server.js
@@ -0,0 +1,55 @@
+const express = require('express');
+const { spawn } = require('child_process');
+const path = require('path');
+
+const app = express();
+const PORT = 9999;
+
+app.use(express.static(path.join(__dirname, 'public')));
+
+app.get('/api/logs', (req, res) => {
+ res.setHeader('Content-Type', 'text/event-stream');
+ res.setHeader('Cache-Control', 'no-cache');
+ res.setHeader('Connection', 'keep-alive');
+ res.flushHeaders();
+
+ const service = req.query.service || 'curio-app';
+ let label = 'app=curio-app';
+ if (service === 'curaflow-agent') {
+ label = 'app.kubernetes.io/name=curaflow-agent';
+ }
+
+ // Spawn kubectl logs
+ const kubectl = spawn('kubectl', ['logs', '-f', '-n', 'curio', '-l', label, '--tail=100']);
+
+ kubectl.stdout.on('data', (data) => {
+ const lines = data.toString().split('\n');
+ lines.forEach(line => {
+ if (line.trim()) {
+ res.write(`data: ${JSON.stringify({ text: line, isError: false })}\n\n`);
+ }
+ });
+ });
+
+ kubectl.stderr.on('data', (data) => {
+ const lines = data.toString().split('\n');
+ lines.forEach(line => {
+ if (line.trim()) {
+ res.write(`data: ${JSON.stringify({ text: line, isError: true })}\n\n`);
+ }
+ });
+ });
+
+ kubectl.on('close', (code) => {
+ res.write(`data: ${JSON.stringify({ text: `[Process exited with code ${code}]`, isError: true })}\n\n`);
+ res.end();
+ });
+
+ req.on('close', () => {
+ kubectl.kill();
+ });
+});
+
+app.listen(PORT, () => {
+ console.log(`Curio Log Viewer running at http://localhost:${PORT}`);
+});