f.Fabiansoftware developer
← All projects
2026 · Self-hosted

FloreaTech Learning Archive

My own home for study notes, from school topics to medical notes for the ambulance. It runs on my mini PC, works on my phone, and turns notes into Anki decks.

PythonSQLiteOllamaPWADocker
TECH STACK
  • Python
  • Flask
  • SQLite
  • Ollama
  • JavaScript
  • CodeMirror
  • Docker
  • Linux

About the project

I had notes everywhere: some in a desktop app, some on my phone, some in folders I forgot existed. So I built one place for all of them. It runs on the mini PC at home, and I use it on my PC and on my phone as an installable web app. (The screenshots use demo notes. My real ones are a lot messier.)

What it can do:

  • Markdown notes with a proper toolbar: headings, tables, checklists, code blocks, images and footnotes.
  • Categories as deep as you like. Type Science.Biology.Cells and the folders are just there.
  • PDF attachments with a built-in viewer, and notes export to clean PDFs.
  • Anki decks straight from my notes. Pick the notes, set a question, download an .apkg. Studying for a test got a lot less tedious.
  • Search that understands what I mean. Besides normal and fuzzy search, there’s an AI meaning search: I describe an idea and it finds the notes that are about it, even if they use different words. It runs completely on my own machine with Ollama, so my notes never leave the house.
  • Backup and restore into a single .learnbak file, because I’ve lost notes before and I’m not doing that again.

Under the hood it’s Python and SQLite in Docker, behind a Cloudflare tunnel. Since it’s on the internet, I took security seriously: login throttling, CSRF checks, sanitised Markdown, and conflict detection, so an old draft on my PC can’t quietly overwrite what I just wrote on my phone.

Case study

The problem

My study notes were spread across a desktop app, my phone and folders I forgot about. I wanted one place I could reach from both PC and phone, without handing my notes to a cloud service.

Decisions I made

  • Self-host it on my mini PC with Docker and reach it through a Cloudflare tunnel, so it works anywhere and the data stays at home.
  • Python, Flask and SQLite: one database file is easy to back up, and the backup format stays compatible with my old desktop app, so nothing got lost in the move.
  • An installable web app (PWA) instead of a native phone app: one codebase for PC and phone.
  • AI search that runs locally with Ollama: notes are cut into overlapping 160-word sections, turned into embeddings with a small model and ranked by similarity, with no paid API.
  • Conflict detection, so an old draft on one device can’t silently overwrite a newer edit from another.

Trade-offs

  • No public live demo: the app holds my real notes and sits behind a login. The screenshots use demo notes instead.
  • No offline editing. The service worker deliberately caches nothing, so private notes never stay behind on a shared device.
  • The small embedding model is fast but works best in English, and the search doesn’t read PDF text or images yet.
  • The AI index is rebuilt with a button instead of automatically, which keeps saving notes fast.

What I learned

  • How semantic search actually works: cut the notes into overlapping chunks, turn them into embeddings, and rank them by cosine similarity. Less magic than it sounds, and more fun.
  • Putting your own app on the internet means thinking like someone who wants to break in. Sessions, throttling and CSRF stopped being textbook words pretty quickly.
  • Making one interface that feels right on a big monitor and on a phone takes more fiddling than I expected.