Projects

In this page, you can read the exhaustive list of coding projects I’ve created over the years. It’s quite long so use the table of content below to browse.

A word on scale before you scroll: most of what follows is itch-scratching. Small tools I built because something annoyed me, published in case it annoys you too. The work I’d want to be judged on is grouped under Larger projects. AI multiplied how much I can ship, but the foundations predate it: wdoc, AnnA and AnkiAIUtils were written by hand. (To be clear: no patient data is ever involved in any of this, not even anonymized, and not even on servers I run myself.)

My code repositories are hosted on github:

(click if this doesn't load)

Individual project count on this page: 136

Some of my projects are also published on PyPI, totaling more than 7k downloads per month (as of March 2026).

I would never have been able to write code without the open source movement, the countless tutorials shared freely online, and the culture of publishing source code and scripts. I am deeply grateful to everyone who has contributed to making programming knowledge accessible. These projects are my attempt to give back and help others on their journey, just as so many have helped me.

A note on what I call "projects"
  • I count as "project" only what I made myself. Hence it does not include my code contributions to other projects. See at the bottom if you want to read some of my contributions.
A note on "vibecoding"
  • For the most part I am not vibecoding these projects: I try to write careful technical specifications, I use unit tests as often as I can, and I take responsibility for the design decisions behind the code. On the rare occasions where a small side project was vibecoded, its README says so explicitly.
A note on authorship
  • Although I've been using AI for many years, I didn't use it for coding until circa 2024. Since then, when I want AI-based assistance I almost exclusively use aider with the --attribute-author argument so you can see which projects and commits where done with or without it.
  • As of December 2025 aider seems to have been unmaintained for months. Since early 2026 I've switched to Claude Code and it has (once again) revolutionized my productivity. Not only because I can now take on more ambitious projects, but more importantly because it's no longer just about coding. Managing many other things becomes automatable. The term "assistant" is now more appropriate than just "developer aid" as far as I'm concerned.
A note on licensing


Medicine / Computer Science / Larger projects

26 projects so far

  • justelesdocs: An AI search over hundreds of PDFs at once: you ask a question in plain language and land on the matching passage, highlighted on its original page, no ads and no tracking.
  • justelesRCP: A fast static site for the official French drug reference sheets (RCP), built from the public ANSM/BDPM data, with free AI-powered search, no ads and no tracking (free public instance at justelesrcp.olicorne.org).
  • neurarium: A 3D, source-graded atlas linking brain anatomy, pathways, receptors and psychiatric drugs in one searchable model (free public instance at neurarium.olicorne.org).

Medical audio transcription

UltiMed

Common transcription software makes too many mistakes on medical text. UltiMed is my attempt at an open alternative: a dataset, a finetuned model, and the scripts behind them.

Other larger projects

  • SAM3-Skin-HeartRate: A reimplementation of faceHR with automatic skin segmentation (SAM 3) to amplify the color changes from blood flow, with arterial punctures in mind.
  • PrevMed (short for Preventive Medicine): A minimal, free and open-source platform where non-technical users write clinical questionnaires in YAML with no personal data stored (I was paid to design and then build it).
  • wdoc: A tool to query and summarize documents of any kind (PDFs, YouTube videos, Anki, web pages, and more) with any LLM. (To be clear: no patient data is ever involved, not even anonymized, and not even on servers I run myself.)
    • OmniQA: [Archived] A tool to index any kind of document and ask an LLM questions about it, the ancestor of wdoc.
  • repeng-research-fork: A fork to explore questions raised in repeng’s issues, adding features such as chat-format inputs and Qwen3 support, proposed upstream.
  • REDACTED NAME (private repo): A library that handles the many differences between clustering methods (no inference, fuzzy clusters, label remapping) in order to benchmark them all, the subject of my M1 internship at NeuroSpin.
  • gradio_pharmacokinetic_simulator: An interactive plot of plasma concentrations over time under different dosing regimens, to train pharmacokinetic intuition.
    • med-pharmacokinetic-simulator: An R/Shiny simulation of immediate-release methylphenidate made for a friend to plan doses around sleep, years before the Gradio version (one of my very first coding projects).
  • ADHD_european_drug_map: A map of which ADHD drugs are authorized in each European country, built automatically from the EMA’s medication list (suggested by a friend).
  • KnQuant (not yet pushed): [Unfinished] A library to turn unstructured text into knowledge triplets searchable with multi-modal embeddings.
  • QuestEA: An exploration of whether embeddings and some math can extract more information from survey data, for example by letting different psychiatric questionnaires be compared.
  • WebSend: A secure way to transfer phone photos to a firewalled computer, end-to-end encrypted over WebRTC through a server that cannot read them (free public instance at websend.olicorne.org).
  • AiFormParser: [Unfinished] A way to turn paper clinical questionnaires into spreadsheets without the patient data ever leaving the browser.
  • sleep_tracker_pinetime: A sleep tracker for wasp-os with an alarm timed to sleep cycles (used every night since about 2021).

Machine learning

6 projects so far

Anki

Anki is an open source flashcard/spaced repetition memorization system 14 projects so far

  • Stahl Ankifier: A way to turn the Prescriber’s Guide (Stahl) into Anki cards, made as a psychiatry resident because doing it by hand would have taken months.
  • Voice2Anki: A way to create good flashcards quickly by speaking them, in my own phrasing, on any subject.
  • AnkiAiUtils: A tool that adds extra help to the cards I kept failing, such as an explanation, a mnemonic or an illustration.
  • AnnA_anki_neuronal_Appendix: A way to stop reviewing near-identical cards on the same day, and to get through a backlog without losing retention.
  • py_ankiconnect: A simple way to talk to Anki from Python projects and from the command line.
  • AnkiAutoMindmap: A tool to build mind maps from the cards, for an overview of everything written on a topic (for example headaches).
  • i3_seach_anki_collection: An i3 key binding that opens a search prompt and shows the matching cards in Anki’s browser.
  • HapaxPredator: An add-on that lists every word in the selected cards by frequency, so that rare words (often misspellings) stand out.
  • IndexableAnki: [Archived] An export of each Anki card as a text file so that Recoll can index it (since superseded by wdoc’s Anki parser).
  • anki_PrioriTag: A filtered deck built from the tags that contain the most forgotten cards.
  • anki_autobury_added_today: A script that buries the cards created today so they do not come up for review before the next day.
  • Anki Semantic Search: [Archived] A way to find cards by meaning, not only by the exact words they contain.
  • pdf2anki: A way to search inside PDFs with Anki’s search, which handles several keywords and partial words well.
  • clozolkor: A note template that reveals long cloze cards (lists, steps) one item at a time, instead of all at once.

Karakeep

Karakeep is an open source read it later app 3 projects so far

  • karakeep_python_api: An unofficial Python client and CLI for the Karakeep API, which my Karakeep tools build on.
  • Karanki: [Unfinished] A two-way sync between Karakeep highlights and Anki, with each highlight color mapped to a deck with its own target retention.
  • freshrss_to_karakeep: A scheduled job that sends the items marked as favorites in FreshRSS to Karakeep with a “freshrss” tag.

Logseq

Logseq is an open source PKM (Personal Knowledge Management) app 4 projects so far

  • LogseqMarkdownParser: A small library and CLI to access the properties of Logseq blocks, with JSON output to use with jq.
  • wallabag_to_logseq_and_omnivore: [Archived] A migration of read Wallabag articles and highlights into Logseq, sending the unread ones to Omnivore.
  • LogseqPDFImporter: A way to import PDFs annotated in other readers into Logseq, keeping highlight colors and area highlights as images.
  • MdXLogseqTODOSync: A sync of the TODO items between delimiters in two Markdown files, so that updating my Logseq graph updates a repository’s README.

Open-WebUI

Open-WebUI is a self hosted AI platform 2 projects so far

Smartwatch

Mainly for wasp-os and InfiniTime on the pinetime 3 projects so far

API

I made my own “reference” libraries to make my other projects more interoperable 5 projects so far

Productivity

Tools I use, used or made 14 projects so far

  • claude_usage: A CLI to read the Claude.ai plan usage, and a skill that lets Claude Code wait out the 5-hour limit and then resume on its own.
  • MacroMaker: [Unfinished] A recorder for mouse sequences, stored as readable YAML files and replayed using OCR to find where to click.
  • save_to_zotero: A way to turn web pages into clean PDFs with proper metadata in Zotero, to read and annotate them on every device after Omnivore shut down.
  • mini_LiTOY: A minimal library to rank a to-do list by pairwise ELO comparisons (“which matters more?”), that other tools can build on.
    • LiTOY: [Archived] A way to rank all goals, short and long term, using pairwise comparisons on importance and time cost, each turned into ELO scores.
  • BrownieCutter: [Archived] A CookieCutter-like script that creates a ready-to-use template for each new FOSS tool (it generated itself).
  • zsh-ai: A way to describe a task in plain words, press a key, and pick a suggested command with fzf (based on muePatrick/zsh-ai-commands).
  • HAL: A single daily email summarizing the last 24 hours of mail and labeling unread messages along the way, made at a friend’s request for her boss, an executive at a well-known company.
  • github_discussion_parser: An export of each GitHub discussion, with all its comments and replies, as a structured Markdown file that an LLM can read.
  • systemd_unit_maker: A way to turn a command into a systemd service and timer in one line, with a chance to review the units before installing them.
  • SAIC (SimpleAICommits): A tool that suggests commit messages from the staged diff, following my own past commits, picked with fzf.
  • Quick_Whisper_Typer: A way to press a key, speak, and have the transcription typed wherever the cursor is, as a minimal alternative to AquaVoice.
  • simple_voice_chat: A voice chat interface that freely combines speech-to-text, LLM and text-to-speech providers, built on fastrtc.
  • AiderBuilder: [Archived] A minimal zsh script that turns aider into a recursive agent, used to build several of the smaller tools on this page.

“Rot” tools

Tools leveraging deterministic time-based codes 3 projects so far

  • wormrot.sh: A script so that both computers derive magic-wormhole codes from the time and a shared secret, so that none has to be passed along.
  • fowlrot.sh: The same time-based code rotation as wormrot.sh, applied to fowl connections.
  • knockd_rotator: A script so that the client and the server both derive knockd sequences from the time and a shared secret, to prevent replay attacks.

Ntfy

ntfy.sh makes it easy to send and receive notifications, I use it a lot for monitoring 8 projects so far

  • ntfy_nmap_watcher: A script that scans my servers from the outside to catch outdated ufw-docker rules that left services exposed by mistake.
  • Daily_Fact_Ntfy: A script that sends an interesting fact about a chosen topic, written by an LLM, at a random time of day.
  • Ntfy_CSV_Reminders: A script that sends reminders for recurring tasks, each with a 1/n chance per day, to avoid notification fatigue.
  • ntfy_systemd: A script that sends a phone notification with the unit’s status whenever a systemd service fails or becomes degraded.
  • ntfy_syncthing_conflict_checker: A script that scans all Syncthing folders for conflict files and sends a notification when some appear.
  • ntfy_fail2ban: A script that sends a periodic summary of the IPs found, banned or blocked by Fail2Ban and UFW to my phone.
  • weather_notifier: A script that sends a phone alert when rain is forecast or when the next days will be warmer or colder than usual.
  • allocine_checker: A script that sends an alert when old films like Stalker or Solaris are screened in theaters nearby.

Miscellaneous Tools

46 projects so far

  • ICD-11_to_Langchain_Documents: A way to search ICD-11 codes by meaning rather than by exact keywords.
  • gpu_nvidia_vram_healthspan: A way to keep the GPU’s memory from overheating, since the stock fan curve only reacts to the core temperature.
  • xlsx_move_comments_to_inside_cells: A script that moves .xlsx comments into the cells, because they were invisible in Nextcloud’s mobile viewer.
  • envlocker: A way to keep API keys out of .zshrc in plain text without adding a secrets manager.
  • ufw-docker-recap: A double-check of which container ports the firewall really exposes.
  • ntrig-calib: A fix for a dead touchscreen zone on a Surface Pro 3 under Linux (reverse-engineered with Claude from the Windows calibration tool).
  • Sanoid Docker Snapshots Cleanup: A way to reclaim the backup space taken by ZFS snapshots of Docker containers that no longer exist.
  • Umami Apprise Notifier: A notification when someone visits my website, without checking the analytics dashboard.
  • Website Link Checker: A way to find the broken links on this website before visitors do.
  • srt_ai_translator: A tool to translate subtitles into languages that no one had translated them into.
  • GPU Docker Monitor: A way to know which container is taking up VRAM before restarting anything.
  • gradioSearcher: [Unfinished] A simple interface to look inside the vector databases built by wdoc.
  • systemd_last_run: A way to spot systemd timers that have silently stopped running.
  • vps-backup: A script for compressed, timestamped backups of my VPS that only keeps the last few copies.
  • iroh_send: A way to send files and folders directly from one machine to another, with no intermediary server.
  • adb_newpipe_exporter: A backup of NewPipe’s database from a computer, by driving the app’s export menus over ADB.
  • autopassad: A script that spots “continue” or “skip” on screen with OCR and clicks it.
  • Umami Data Fetcher: A way to save the privacy-preserving analytics of olicorne.org before umami.is deletes them after 6 months.
  • Home Assistant CalDAV client: A way to say “I have to do the dishes” to Home Assistant and have it appear in my Nextcloud tasks.
  • LiteLLM Proxy OpenRouter Price Updater: [Archived] A script to keep LiteLLM’s OpenRouter prices up to date, since they lagged behind the real ones.
  • OpenRouter to Langfuse Model Pricing Sync: [Archived] A copy of OpenRouter’s prices into Langfuse, to track what LLM calls actually cost.
  • git_scripts_keeper: A history of changes in folders that no configuration tool tracks, committed periodically.
  • OCR_with_format: A way for pytesseract to keep the text’s layout and spacing instead of flattening it.
  • HumanReadableSeed: A way to share an edgevpn base64 token by voice or in writing, by turning it into a checkable sequence of words.
  • PersistDict: A dictionary-like cache that survives restarts, made for wdoc instead of relying on LangChain’s.
  • whisper_audio_splitter: A way to record Anki cards out loud in one session, saying “stop” between each, and get one audio file per card.
  • corpus_matcher: A library to find where a slightly altered piece of text came from in a large corpus.
  • speech.sh: A way to type text and have it read aloud, made in 30 minutes when I suddenly lost my voice.
  • OpenrouterModelFilter: A script to filter the list of OpenRouter models.
  • iptables_rate_limit_modifier: A script to make UFW’s rate limiting less aggressive.
  • Load_Average_Balancer.sh: A way to delay heavy tasks while the CPU is busy.
  • PDF_batch_decryptor: A way to decrypt many PDFs in bulk.
  • Spotify_tts: A way to learn the titles of the songs playing, without looking at the screen.
  • ufw_auto_ssh_whitelist: A way to allow the current SSH IP through the firewall when prompted, and clean those rules up after 30 days.
  • ufw_block_analyzer: A mapping of blocked connections in the UFW logs back to the Docker Compose project they came from.
  • btrfs_cow_disabler: [Archived] A way to disable Copy-on-Write on existing Btrfs files by copying them to new files with checksum verification.
  • docker_volume_backup: A safe backup of a container’s volumes, stopping it during the copy and restarting it afterwards.
  • ShellArgParser: A one-liner that turns Python-style arguments into shell variables, because parsing arguments in shell is annoying.
  • IndexableNewsboat: A way to make newsboat RSS entries searchable with a desktop search engine like Recoll.
  • MediaDurationRecursiveChecker: A way to know the total duration of the footage on a hard drive, made for my partner who works in video production.
  • MediaMetadataExtractor: A script to extract the technical metadata of large batches of video files, without opening them one by one (also for my partner).
  • MediaSizeOrHashMatcher: A way to find which video files in one folder already exist in another, even under a different name.
  • llm_agent: [Archived] A test of whether a simple LangChain agent could be added to Simon Willison’s llm command-line tool.
  • fancontrol_autohealing_config: A fix for fan control stopping after reboots because Linux renumbers the hwmon devices.
  • prompt_GPT3: [Archived] A quick way to create Anki cloze cards and translations from the terminal with GPT-3.
  • pdfannots: A fork adapting the extraction of PDF highlights and comments to my own note-taking.

Others

8 projects so far

  • FUTOmeter: [Idea] A sketch of a privacy-preserving way for FOSS apps to measure usage locally and show well-timed donation prompts, in the spirit of FUTO.

Code Contributions

This is a short list of some projects I contributed to. It can be code, documentation, ideas, etc. It can be anything from small contributions to large projects to many small contributions. Disclaimer: In some cases I counted contributions that were not merged because it helped the project one way or another.

  • openai: Fixed a long standing bug related to whisper when given some type of audio files.
  • joblib: Fixed and clarified some behaviors related to cache expiration.
  • open-webui: Backend, frontend, bug reports, doc, …
  • karakeep: Backend, frontend, bounties, bug reports, doc, …
  • i3: Bugfix that was spamming my logs and hurting my SSDs.
  • mwmbl: Documentation and code mostly related to backend (changing the entire db to LMDB, improving performance by changing various libs, ideas about decentralizing, …).
  • academicpages.github.io: This entire website is a fork of academicpages. I contributed somewhat over time.
  • …

You can browse all the GitHub issues I created.

You can browse all the GitHub pull requests I created.