Here’s the thing about blood tests: you get them done, you wait for results, and then you get a PDF that looks like it was designed in 1987.
Rows of numbers. Reference ranges that may or may not apply to you. Abbreviations you need to Google. And if something’s out of range? Good luck figuring out what it means.
I got my own blood work back last month. The PDF sat on my desktop for three days before I actually opened it. Not because I was scared of the results. Because I knew opening it meant committing to a half-hour of detective work.
That’s the problem. Not the labs — they do their job fine. The problem is the gap between “here’s your data” and “here’s what it means.”
The Insight
I’m a Product Owner. I see gaps like this and my brain does this thing where it won’t let me sleep until I’ve designed a solution.
The gap here wasn’t medical advice. Let me be crystal clear: Blood doesn’t diagnose. It doesn’t treat. It doesn’t replace your doctor.
The gap was translation.
Your lab results are written in Labinese. You speak Human. There should be something in between that helps you understand what you’re looking at before you book an appointment.
Day One Decisions
I started a new Git repo on May 11th, 2026. The first commit message says it all: ”🀄 Initial project briefing for blood.insightlab.be”
Before writing a single line of code, I made three non-negotiable decisions:
1. Privacy by Architecture, Not Policy
Health data is special category data under GDPR Article 9. That means I can’t just throw it in a database and hope for the best.
So I decided: your blood test data never touches a server.
The PDF goes to AWS Lambda for processing (more on that later), but the results come back to your browser and live in IndexedDB. Local storage only. No cookies. No accounts. No server-side database with your health data.
If you clear your browser cache, it’s gone. If you want to keep it, you export it. Your data, your device, your control.
This isn’t a privacy policy you have to trust. It’s privacy enforced by the architecture itself.
2. EU Data Residency
I’m in Belgium. My users will mostly be in Europe. That means AWS eu-west-3 (Paris) region, not us-east-1.
The AI provider is Amazon Bedrock Nova 2 Lite, running in Europe, covered by AWS’s DPA for GDPR Article 9 compliance.
European users deserve European infrastructure. No transatlantic data trips.
3. AI as Translator, Not Doctor
This one’s philosophical but critical: AI explains context, not prescriptions.
When a marker is out of range, Blood doesn’t say “you have condition X.” It says “this marker is associated with Y function, and here are some common reasons it might be elevated.”
The AI amplifies human judgment. It doesn’t replace it.
What Blood Is (And Isn’t)
Blood is:
- A translator between lab data and human understanding
- A privacy-first tool that keeps your data on your device
- A way to track trends across multiple tests over time
- An educational resource about what your markers mean
Blood isn’t:
- A diagnostic tool
- A replacement for medical advice
- A treatment recommendation engine
- A way to self-diagnose or avoid seeing a doctor
The Longitudinal Advantage
Here’s where it gets interesting. Single blood tests are snapshots. But most health questions aren’t about snapshots — they’re about movies.
Is your cholesterol trending up or down? Is that slightly elevated liver enzyme a blip or a pattern? Are your supplementation efforts actually moving the needle?
Blood tracks this. Every test you upload gets stored locally. The Trends page shows you per-marker evolution over time. Worsening, improving, stable — classified automatically.
This is the feature I think people might actually pay for. Not the analysis itself (that’s table stakes), but the memory across tests.
Technical Preview
I’m building this in public. That means:
- Stack: Svelte 5 + Vite (frontend), Python Lambda + AWS SAM (backend), Bedrock Nova 2 Lite (AI)
- Deployment: GitLab CI/CD, auto-deploy to test on
develop, manual gate for prod - Cost: Running at about €22/month in AWS costs during development
- Timeline: 20 days from concept to production-ready (67 commits)
Future posts will dive into each of these. Architecture decisions, AI prompt engineering, user feedback loops, scaling challenges.
What’s Next
Post #2 covers the architecture decisions in detail. Why Svelte over React? Why Lambda over containers? How do you handle a 5-minute AI job when API Gateway times out at 30 seconds?
Spoiler: constraints shape better architecture than freedom.
This is post #1 in the Blood Development Log series. Read the series index →