<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://openavisio.org/en/blog</id>
    <title>OpenAvisio Blog</title>
    <updated>2026-06-19T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://openavisio.org/en/blog"/>
    <subtitle>OpenAvisio Blog</subtitle>
    <icon>https://openavisio.org/en/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Introducing OpenAvisio: a health record vault built out of necessity]]></title>
        <id>https://openavisio.org/en/blog/introducing-openavisio</id>
        <link href="https://openavisio.org/en/blog/introducing-openavisio"/>
        <updated>2026-06-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[My child has Dup15q syndrome — a rare chromosomal duplication that brings seizures, developmental delays, and a lifetime of specialist appointments. Over the years, the paperwork accumulated: neurology letters, EEG reports, medication plans, therapy assessments, lab results. Each in a different format, from a different clinic, filed in a different folder.]]></summary>
        <content type="html"><![CDATA[<p>My child has Dup15q syndrome — a rare chromosomal duplication that brings seizures, developmental delays, and a lifetime of specialist appointments. Over the years, the paperwork accumulated: neurology letters, EEG reports, medication plans, therapy assessments, lab results. Each in a different format, from a different clinic, filed in a different folder.</p>
<p>When a new doctor asked "what medications has she been on, and when did the seizures start?", I could answer — but only because I had spent hours the night before going through binders. That felt wrong.</p>
<p>So I built OpenAvisio.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-it-does">What it does<a href="https://openavisio.org/en/blog/introducing-openavisio#what-it-does" class="hash-link" aria-label="Direct link to What it does" title="Direct link to What it does" translate="no">​</a></h2>
<p>OpenAvisio is a self-hosted health data vault. You upload medical documents — PDFs, photos of letters, scan results — and the AI-powered processing pipeline takes over. It reads the document, extracts structured data (diagnoses, medications, lab values, measurements, recommendations), and files everything into the patient record automatically.</p>
<p>On top of that:</p>
<ul>
<li class=""><strong>Incident tracking</strong> — log seizures, falls, or allergic reactions with suspected triggers and context. The onset date of any incident type is always derivable from the first recorded event, no separate field needed.</li>
<li class=""><strong>Health log</strong> — daily observations: mood, pain level, sleep quality, medication compliance.</li>
<li class=""><strong>Calendar</strong> — appointments and health events on a timeline, including events proposed automatically from uploaded documents.</li>
<li class=""><strong>AI Health Assistant</strong> — ask questions in plain language across all clinical data and documents. "What did the neurologist recommend in March?" or "How many seizures were there last year?"</li>
<li class=""><strong>Multi-caregiver access</strong> — both parents, a grandparent, a nurse, a therapist — each gets their own login, all seeing the same patient record.</li>
<li class=""><strong>FHIR R4 export</strong> — your data stays yours. Export the full record at any time as a standard FHIR bundle.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-works-technically">How it works technically<a href="https://openavisio.org/en/blog/introducing-openavisio#how-it-works-technically" class="hash-link" aria-label="Direct link to How it works technically" title="Direct link to How it works technically" translate="no">​</a></h2>
<p>The stack is intentionally boring: <strong>FastAPI</strong> backend, <strong>Next.js</strong> frontend, <strong>PostgreSQL</strong> with <strong>pgvector</strong> for semantic search, <strong>Celery</strong> for background processing.</p>
<p>The AI runs locally by default via <strong>Ollama</strong>, which means patient data never leaves your infrastructure. If you want more extraction quality and are comfortable with a EU-based processor, you can point it at Mistral AI instead — but even then, embeddings and vision OCR stay local.</p>
<p>Document files are encrypted at rest with envelope encryption: a random per-document key wrapped under a KEK you control. Rotating the KEK re-wraps the document keys without touching the files.</p>
<p>Authentication is password + optional passkey. Sessions are short-lived JWTs. All mutations are audit-logged.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-self-hosted">Why self-hosted?<a href="https://openavisio.org/en/blog/introducing-openavisio#why-self-hosted" class="hash-link" aria-label="Direct link to Why self-hosted?" title="Direct link to Why self-hosted?" translate="no">​</a></h2>
<p>Health data is special-category data under GDPR Article 9. I did not want to run a service where other people's children's seizure histories sit on my server. Self-hosting means the family, the care home, or the clinic is the data controller — not me.</p>
<p>OpenAvisio is licensed under AGPL-3.0 for self-hosted use. A Commercial license removes the patient and user limits for organisations that need it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it">Try it<a href="https://openavisio.org/en/blog/introducing-openavisio#try-it" class="hash-link" aria-label="Direct link to Try it" title="Direct link to Try it" translate="no">​</a></h2>
<p>The source is on <a href="https://codeberg.org/openavisio/openavisio" target="_blank" rel="noopener noreferrer" class="">Codeberg</a>. Feedback, issues, and pull requests are welcome.</p>]]></content>
        <author>
            <name>Martin Riedel</name>
            <uri>https://openavisio.org</uri>
        </author>
        <category label="Announcement" term="Announcement"/>
        <category label="Open Source" term="Open Source"/>
    </entry>
</feed>