Jun 2026 – Jul 2026
Virtual Microscope Admin Panel
An admin panel for a biology virtual microscope, shipped as a one-click Windows app with its own embedded database.
My roleDeveloper on a 3-person team: persistence, the entire frontend and desktop packaging
The panel manages the slide collection of a virtual microscope at UCR: slides grouped by biological group (e.g. bacteria) and storage box, each with an ordered set of microscope images. A teammate had started the API with in-memory repositories; I built most of what turned it into a usable product.
Persistence
- Replaced the in-memory repositories with EF Core over PostgreSQL: a DbContext with Fluent API configurations for boxes, groups, slides and images, value-object conversions, the initial migration and dependency injection wiring.
- A Docker Compose database pinned to Postgres 17 (to match the desktop build), bound to localhost and with a health check.
The whole frontend
- Built the Blazor WebAssembly frontend in clean architecture: a domain with its own value objects, application services, a typed HTTP API client and a MudBlazor UI with UCR's visual identity and an in-app usage guide.
- Server-side pagination and search for slides: the endpoint returns a paged envelope with validated page sizes, and the table loads pages from the server with a debounced search and box filter instead of downloading everything.
- Fixed a bug where creating a slide with 6 images always failed: once the sixth image was picked, the upload input unmounted and the browser invalidated every earlier file handle. Files are now read as soon as they're selected, which also enabled multi-select. Image order now follows list position, which removed duplicate orders.
One-click desktop app
- Packaged everything as a Windows installer: an Electron shell starts an embedded Postgres 17 and the published API, waits for its health endpoint, then opens the app in a native window. No Docker or database install needed.
- The API serves the WebAssembly app with client-side routing fallback and applies migrations on startup with retries for a slow first database boot. A PowerShell script publishes both apps and drives electron-builder.
Built with
C# / .NETBlazor WebAssemblyMudBlazorEF CorePostgreSQLElectronDocker
Next project
ThemePark@UCR →



