A telepathology workspace in the browser: deep-zoom slides, annotation and measurement, cases, consultations and reports.
Project Summary
- Client: Personal R&D
- Industry: healthcare
- My role: Creator & Developer
- Core tasks: Product design, Viewer & annotation tools, Tiling pipeline, Web app
- Appointed date: Jan 2026
- Completion: Jan 2026
- Team size: 1
PathView is my second take on browser-based digital pathology, building on what I learned making TPN's WSI Viewer. This time it's a full telepathology workspace, not just a viewer.
What I built
- Deep-zoom viewer. OpenSeadragon with a navigator minimap, scale bar, rotation, 0.5× to 40× zoom, go-to-region and screenshot capture.
- Annotation and measurement. Rectangle, ellipse, polygon, freehand and arrow tools plus a ruler, with pathology labels (tumour, margin, inflammation, necrosis, artefact) and threaded comments.
- Case workflow. A case queue, slides, consultations for second opinions, and reports with sign and amend permissions.
- Roles. Separate permissions for administrators, pathologists, physicians and technicians.
- Ready for a global audience. Four languages (English, French, Spanish and Chinese) and dark mode.
Under the hood
A Python tiler reads Aperio SVS slides with OpenSlide and writes Deep Zoom pyramids of 256-pixel JPEG tiles in parallel, with per-slide metadata. A 98,304 × 75,264-pixel test slide becomes 18 zoom levels and about 46,000 tiles, and the viewer only ever fetches the handful on screen. The front end is SvelteKit with Svelte 5 and TypeScript, Annotorious for drawing, and Playwright and Vitest for tests.
Where it stands
PathView is a working prototype running on public research slides and demo data, ready to be wired to a production backend.
Tech stack
- SvelteKit 2
- Svelte 5
- TypeScript
- OpenSeadragon 5
- Annotorious 3
- Tailwind CSS 4
- Python
- OpenSlide
- Deep Zoom (DZI) tiles
- Paraglide i18n
- Playwright
- Vitest
Challenges
- Generating tile pyramids for gigapixel slides quickly
- Precise annotation and measurement at every zoom level
Have a similar problem to solve? Let's talk.
Start a conversation