An AI-powered radiology reporting platform designed to streamline reporting through voice transcription, automatic template selection and formatting.
FOR EDUCATIONAL AND RESEARCH PURPOSES ONLY
Wilhelm is designed for educational and research purposes. It is not intended for clinical use and should not be used for actual patient care. Always consult with qualified healthcare professionals for medical decisions.
- AI-Powered Transcription: Voice-to-text conversion using Groq's Whisper API
- Intelligent Report Generation: AI-generated radiology reports with template matching
- Advanced Template Management: Organize templates by folders with drag-and-drop functionality
- Rich Text Editor: Full-featured editor with formatting, colors, and styling options
- Multi-language Support: Generate reports in 8 languages (English, French, German, Hindi, Italian, Spanish, Portuguese, Thai)
- Real-time Chat Interface: Interactive AI assistant for report generation
- Responsive Design: Mobile-optimized interface with NHS blue theme
- Secure Authentication: Replit Auth with OpenID Connect integration
- Enterprise Security: Production-ready security with HTTPS enforcement, CSP headers, and rate limiting
- Frontend: React 18 with TypeScript, Vite build tool
- Backend: Express.js server with TypeScript
- Database: PostgreSQL with Drizzle ORM
- Authentication: Replit Auth with OpenID Connect
- AI Services: Groq API for transcription and report generation
- Styling: Tailwind CSS with shadcn/ui components
- State Management: React Query for server state management
wilhelm/
├── client/ # React frontend application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Application pages
│ │ ├── hooks/ # Custom React hooks
│ │ └── lib/ # Utility functions
├── server/ # Express.js backend API
│ ├── services/ # Business logic services
│ ├── middleware/ # Express middleware
│ └── routes.ts # API route definitions
├── shared/ # Shared TypeScript schemas
│ └── schema.ts # Database schema and types
└── public/ # Static assets
- Node.js 16 or higher
- PostgreSQL database
- Groq API key
-
Clone the repository
git clone https://github.com/yourusername/wilhelm.git cd wilhelm -
Install dependencies
npm install
-
Set up environment variables Create a
.envfile in the root directory:DATABASE_URL=postgresql://username:password@localhost:5432/wilhelm GROQ_API_KEY=your_groq_api_key_here SESSION_SECRET=your_session_secret_here
-
Initialize the database
npm run db:push
-
Start the development server
npm run dev
The application will be available at http://localhost:5173 (development) or https://your-domain.replit.app (production)
- Voice Recording: Use the microphone to record clinical findings
- AI Transcription: Automatic conversion of speech to text
- Template Selection: AI intelligently selects appropriate templates
- Report Generation: AI generates comprehensive radiology reports
- Review and Edit: Use the rich text editor to refine reports
- Save and Manage: Organize reports with categorization and search
- Upload Templates: Support for .docx, .doc, and .txt files
- Folder Organization: Organize templates by imaging modality or anatomy
- Drag and Drop: Intuitive template management interface
- Rich Text Editing: Full-featured editor for template customization
- High-Quality Transcription: Optimized for medical terminology
- Context Isolation: Each recording session is independent
- Multiple Audio Formats: Support for various audio file types
npm run dev- Start development servernpm run build- Build for productionnpm run db:push- Push database schema changesnpm run db:generate- Generate database migrations
- Drizzle ORM: Type-safe database operations with PostgreSQL
- React Query: Efficient server state management
- Wouter: Lightweight client-side routing
- Zod: Runtime type validation
- Tailwind CSS: Utility-first CSS framework
- shadcn/ui: High-quality React components
- HTTPS enforcement with automatic redirect
- Content Security Policy (CSP) headers
- HTTP Strict Transport Security (HSTS)
- Rate limiting on all API endpoints
- Input validation and sanitization
- Secure session management
- File upload security with MIME type validation
GET /api/auth/login- Initiate authenticationGET /api/auth/callback- Handle OAuth callbackPOST /api/auth/logout- Logout user
GET /api/templates- Get all templatesPOST /api/templates- Create new templatePATCH /api/templates/:id- Update templateDELETE /api/templates/:id- Delete templatePATCH /api/templates/:id/folder- Move template to folder
GET /api/reports- Get user reportsPOST /api/reports- Create new reportPATCH /api/reports/:id- Update reportDELETE /api/reports/:id- Delete report
POST /api/ai/transcribe- Transcribe audio to textPOST /api/ai/generate-report- Generate radiology reportPOST /api/ai/select-template- AI template selection
Wilhelm welcomes contributions from the medical and developer communities!
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript best practices
- Use the existing component patterns
- Write comprehensive tests
- Update documentation for new features
- Ensure accessibility compliance
This project is licensed under the MIT License - see the LICENSE file for details.
Ameya Kawthalkar
- Created Wilhelm as an educational tool for radiology trainees and radiologists
- Wilhelm is intended to spur the creation of more open source solutions to streamline medical imaging workflows
Built with ❤️ by a radiologist for radiologists and professionals practising medical imaging around the world
For questions, feedback, or contributions:
- Open an issue on GitHub
- Contact through the application's contact form
- GDPR and HIPAA compliant local free and open source model
- DICOM reader integration
- In-built template library
Remember: Wilhelm is for educational and research purposes only. Always consult qualified healthcare professionals for medical decisions.