Work
Two decades of .NET work, concentrated in healthcare data platforms and legal technology. The projects below are public. The case studies that follow them are not — legal and enterprise engagements are described by the problem and the architecture, without the client name.
Healthcare & Public Health
Federally mandated registries, clinical outcome reporting and patient-facing decision tools. These platforms publish data that patients use to choose a transplant center and that policymakers use to evaluate performance, which sets the bar for how carefully the statistics have to be handled.
SRTR / HRSA
SRTR.org Patient-Friendly Website
Overhaul of the Scientific Registry of Transplant Recipients website, including a transplant journey map and educational resources built for patients and families rather than researchers.
Stack: C#/.NET, Umbraco, SQL Server, JavaScript
SRTR
SRTR Interactive Reports
Interactive charts presenting transplant program outcomes from R-generated datasets, replacing static reports with filterable center-level comparisons.
Stack: C#/.NET, React, HighCharts, SQL Server, Mapbox
USRDS / NIDDK / NIH
USRDS Annual Data Report
Interactive data visualization platform for the United States Renal Data System Annual Data Report, used by clinicians and researchers working with national kidney disease data.
Stack: C#/.NET, HighCharts, SQL Server, Tableau
SRTR / HRSA
Organ Procurement Report
Interactive OPO performance reporting that turns dense organ procurement data into visualizations clinicians and policymakers can actually navigate.
Stack: C#/.NET, HighCharts, SQL Server, Mapbox
SRTR / HRSA
Liver Waiting List Outcomes Calculator
A decision tool visualizing two years of actual patient outcomes, built so that patients and providers can weigh waiting list decisions against real data rather than averages.
Stack: C#/.NET, React, SQL Server, R
Transplant Center Search
Transplant Center Search
Search platform letting patients and providers compare transplant center outcomes, with interactive visualizations over center-level performance data.
Stack: C#/.NET, React, MySQL, Azure
Government & Media
Public-sector platforms and publisher properties where uptime, accessibility and editorial workflow matter as much as the code underneath.
Minnesota Secretary of State
Umbraco 7 to 14 Migration
Led the full migration of Minnesota's official state website from Umbraco 7 to 14 and .NET Framework to .NET Core — a seven-major-version jump with no supported upgrade path, modernized for security, performance and long-term maintainability.
Stack: C#/.NET, Umbraco, SQL Server, CI/CD
AGC of Minnesota
Event & Membership Management
Custom frontend and backend for Minnesota's leading construction trade association, covering event registration and membership management with QuickBooks and Constant Contact integrations.
Stack: C#/.NET, SQL Server, AWS, QuickBooks
Regional Media Company
Local Media Network
Ten managed websites on a unified CMS with synchronized content distribution and centralized hosting, so a single editorial team could operate the whole network.
Stack: C#/.NET, WordPress Multisite, SQL Server, Azure
Artful Living
Website Management & Development
Ongoing management and custom development for an upscale lifestyle magazine, covering performance, custom templates and the editorial tooling the newsroom runs on.
Stack: WordPress, MySQL, WP Engine, JavaScript
E-Commerce
Storefronts where the interesting work sits behind the checkout — inventory, fulfillment and the pipelines connecting a commerce platform to systems that were never designed to talk to it.
Master Supplements
Shopify Storefront & Catalog
Full Shopify build for a health supplement brand: product catalog, custom checkout flows and Klaviyo integration for lifecycle marketing.
Stack: Shopify, Liquid, JavaScript, Klaviyo
US Enzymes
Shopify + Fulfillment ETL Pipeline
Shopify storefront with a custom Python ETL pipeline connecting to shipping and fulfillment systems, automating what had been a manual daily process.
Stack: Shopify, Liquid, Python, SQL Server
Case studies
Confidential engagements, described in detail. Client names are withheld; the problems, architecture and outcomes are not.
AmLaw 200 Firm, Confidential
Bidirectional System Integration
Stack: .NET 6, SQL Server, Azure App Service, REST API
The Problem
The organization operated a custom application for client records, contacts and transaction metadata alongside a separate document management platform. The two systems had no common identifiers: different naming conventions, inconsistent record numbering and in some cases a single client mapped to multiple workspaces in the document system.
Staff navigated between the systems manually, running searches in both and routing document requests through support staff when records couldn't be located directly. The document platform was the system of record but was operationally disconnected from the application where day-to-day work happened.
What Was Built
An integration layer that resolved entity matches between client records in the operational application and workspace structures in the document platform. The matching logic handled name variations, partial record number matches and the cases where a single client had been set up differently across offices or practice groups.
The integration surfaced document access within the existing application. Users accessed documents directly from the client record without switching to the document platform. The document system remained the system of record; the integration made it accessible from within the existing workflow.
Outcome
Document retrieval moved from a multi-step manual process into the record workflow. The entity-matching work also surfaced data quality gaps between the two systems — records present in one but not the other — which the client used to reconcile both datasets.
Research Organization, Confidential
Domain-Specific Full-Text Search Platform
Stack: .NET 6, SQL Server Full-Text Search, Azure Cognitive Search, React, REST API
The Problem
The client needed to locate documents based on specific language and phrasing rather than structured metadata. Standard search tools index around attributes like assignee, classification and date. They are not designed to find documents that contain overlapping language from a source text, particularly when the relevant content appears in specific sections of lengthy filings. Research that required that kind of language-based matching was going to outside vendors or taking days of manual work per engagement.
What Was Built
A full-text search platform against an indexed document corpus. The interface accepted free-form text — a phrase or technical description — and returned results ranked by language overlap, with source excerpts visible in the results list. Users could paste directly from a source document without reformulating the query into Boolean syntax.
The indexing pipeline separated document sections so relevance scoring weighted primary content differently from background prose. Exact phrase matches in substantive sections ranked above partial matches in introductory or supporting text.
Outcome
Language-based document searches that previously required manual review or outside research firms were handled by the platform. Turnaround on searches dropped from hours to seconds, and the platform returned results on queries that conventional metadata search could not address.
Healthcare, Confidential
National Health Registry Data Visualization Platform
Stack: ASP.NET Core, SQL Server, Azure, interactive charting, REST API
The Problem
A federally-mandated healthcare registry collected, validated and published outcome data covering survival rates, waitlist statistics and center-level performance metrics. The data was published through static reports — structured tables and PDF exports formatted for statistical consumption. The primary users of those reports were patients evaluating treatment options and clinicians comparing center performance, and the static format was not designed for that audience.
What Was Built
A web-based data visualization platform that presented the registry's validated data through interactive charts, filterable views and outcome comparisons. Patients could explore survival curves and compare performance across care centers. Clinicians could filter center-level metrics by time period, patient population and procedure type. All visualizations drew from the same data as the published statistical reports; the platform was a presentation layer on top of existing validated data, not a separate data source.
Display logic for statistical confidence intervals and cohort sizes required explicit design decisions. Results from low-volume centers were flagged or suppressed rather than displayed as equivalent to data from higher-volume centers, where the same chart would carry different statistical weight. The platform also supported a separate patient-facing report format — a simplified view of the same underlying data, with statistical notation removed and the information organized around the questions a patient is likely to bring to it. The clinical and patient-facing views shared the same data pipeline with different rendering logic.
Outcome
The registry's public-facing reporting moved from a manual PDF publication process to a maintained web application. Outcome data that had been accessible primarily to researchers became navigable by patients, families and clinical staff through a public-facing platform.
Multiple Engagements
Enterprise CMS Platform
Stack: .NET, Umbraco CMS, C#, SQL Server, Azure, custom integrations
The Problem
Large enterprise websites aren't standard CMS installations. They sit on top of staff profile systems, department taxonomies, alumni portals and in some cases recruiting workflows and client portal integrations. An organization with hundreds of staff across multiple offices needs structured content types, location-level filtering, credential data and editorial workflows that non-technical staff can operate without breaking the taxonomy.
These platforms also carry reputational weight. Structured navigation, performance and content quality matter at this scale in ways that a standard agency build doesn't account for.
What Was Built
Public-facing platforms on a .NET CMS with custom content types for staff profiles, practice areas, news and publications. Each implementation included integrations with the organization's HR or directory system to sync staff data, editorial approval workflows tailored to the marketing team structure and a content taxonomy that matched how the organization actually organized its work — not a generic hierarchy imposed by the platform.
This is a body of work spanning multiple clients and years, not a single engagement. The implementation pattern evolved across projects. Earlier builds informed later ones on editor workflow, performance and the data quality problems that appear consistently when staff directory data moves into a public CMS.
Scope
This represents a body of work across multiple clients and years rather than a single engagement. The implementation pattern — staff profile systems, content taxonomy, HR integrations and editorial workflows — is consistent across projects and applicable to organizations evaluating a web platform rebuild or CMS migration.
Have a system that needs work?
Describe the problem. We can work through what fixing it actually involves.
Start the conversation