pediatric-ai-scribe-v2/server.js
ifedan-ed 1c2098d1dd v2.0.0: Pediatric AI Scribe
Features:
- Live encounter recording → HPI (outpatient/inpatient)
- Voice dictation → HPI / SOAP note
- Hospital course generator (prose/day-by-day/organ system/psych)
- Chart review / precharting (outpatient/subspecialty/ED)
- SOAP note generator (full/subjective only)
- Developmental milestones (AAP/Nelson) with narrative + 3-sentence summary
- AI refine & shorten for all outputs
- Ask AI what's missing (clarification)
- Authentication (email/password, email verification, 2FA)
- Nextcloud integration with auto date folders
- PWA support (installable on phone)
- 18+ AI models via OpenRouter
- HIPAA compliance guidance
- Docker support
2026-03-21 16:55:50 -04:00

71 lines
2.2 KiB
JavaScript

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const cookieParser = require('cookie-parser');
const path = require('path');
const http = require('http');
const app = express();
const server = http.createServer(app);
// Security
app.use(helmet({
contentSecurityPolicy: false,
crossOriginEmbedderPolicy: false
}));
app.use(cors());
app.use(cookieParser());
app.use(express.json({ limit: '50mb' }));
// Rate limiting
const apiLimiter = rateLimit({
windowMs: 1 * 60 * 1000,
max: 60,
message: { error: 'Too many requests, slow down' }
});
app.use('/api/', apiLimiter);
// Static files (login page accessible without auth)
app.use(express.static(path.join(__dirname, 'public')));
// Routes
app.use('/api/auth', require('./src/routes/auth'));
app.use('/api', require('./src/routes/transcribe'));
app.use('/api', require('./src/routes/hpi'));
app.use('/api', require('./src/routes/hospitalCourse'));
app.use('/api', require('./src/routes/chartReview'));
app.use('/api', require('./src/routes/milestones'));
app.use('/api', require('./src/routes/soap'));
app.use('/api', require('./src/routes/tts'));
app.use('/api', require('./src/routes/nextcloud'));
app.use('/api', require('./src/routes/refine'));
// Models endpoint
const { AVAILABLE_MODELS } = require('./src/utils/models');
app.get('/api/models', (req, res) => res.json({ models: AVAILABLE_MODELS }));
// Health
app.get('/api/health', (req, res) => {
res.json({
status: 'running',
timestamp: new Date().toISOString(),
openrouter: process.env.OPENROUTER_API_KEY ? 'configured' : 'missing',
whisper: process.env.OPENAI_API_KEY ? 'configured' : 'missing'
});
});
// SPA fallback
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log('');
console.log('==========================================');
console.log('🏥 PEDIATRIC AI SCRIBE v2.0');
console.log('==========================================');
console.log(`🌐 http://localhost:${PORT}`);
console.log('==========================================');
});