Medical is an open-source health platform designed to give patients a complete, unified view of their own medical history. It's built for people managing long-term conditions who need their health information to be accessible and organized — something that's increasingly hard to come by in a healthcare system where medical staff are stretched thin and overworked.
Built with: C#, Blazor, Entity Framework, Bootstrap, and Microsoft SQL Server (SQL Express)
The app runs on Blazor Web App, supporting both client-side and server-side rendering. Most data currently lives on the server, so the app talks directly to the database instead of routing everything through a separate API layer. Data is stored locally using SQL Express for now.
The system includes full authentication and role-based authorization, so access is controlled both at the login level and by user role. Core functionality — like tracking symptoms per patient — is handled through standard create, read, update, and delete operations.
This project grew out of a deeply personal experience — walking through my wife's cancer diagnosis and treatment alongside her. Even at a strong regional hospital with a genuinely good care team, we constantly ran into communication gaps and information silos, simply because the system itself was overburdened and large organizations naturally create friction.
My goal with Medical is to give patients better visibility into their own care, cut down on the communication breakdowns that add stress to an already difficult situation, and ease some of the documentation burden on medical teams who are already stretched too thin.
- Built on an MVVM architecture
- Model (database entities like Symptom and ApplicationUser)
- ViewModel (logic in Razor files, commands, and service interfaces)
- View (Razor components and HTML templates)
- Account registration with full form validation and error handling
- Full CRUD functionality against the SQL Server database
- Symptoms
- Notes
- ASP.NET Core Identity for authentication and authorization
- User-aware session handling so each person sees their own data
- Appointment scheduling via Syncfusion, viewable in multiple calendar formats
- A doctor-facing dashboard for looking up patients by name and viewing or editing their records
- Models built with backing fields and constructors
- Symptom data managed through a list collection accessed via interface
- A hard-coded list of doctors
- Form validation logic that enables or blocks submission based on model state
- Handling for empty collections, async operations, and JavaScript-driven UI feedback (e.g. when deleting a symptom)
- Base model classes for shared object structure
- Service interfaces that keep components loosely coupled and support async operations
- Foreign key relationships in the SQL Server schema
- Role-based access restrictions on specific pages and components
- Dashboard population driven by the current authenticated user's data
- Automatic database seeding for admin accounts, roles, and required setup in any new environment
- Expanding client-side rendering to more features
- Adding chat functionality
- Moving to cloud-based storage
- Integrating Azure Cognitive Search
- Adding OpenAI integration
Building Medical taught me how to bring C#, Blazor, Entity Framework, and SQL Server together into a real full-stack application — covering everything from application architecture and dependency injection to authentication, authorization, and relational database design with primary and foreign keys.
It also reinforced how much good architecture matters. Designing components to be loosely coupled made the codebase easier to debug and let me work on one part of the system without risking the rest.
More importantly, the biggest lesson was this: there's the technical side of a project — how it's built — and there's the functional side — how it actually feels to use. The real challenge, and the real skill, is connecting the two.