Developer and technical writer
IlanaRiver
I build tools for problems I've actually had, and I write about what broke along the way.
01 / 03 A simulated star, 27 days of light. Scroll to fold it.
About
I like problems with a right answer.
- Jul 2026ChronicledHistory site, written and built from scratch
- Aug 2026LocusA Level study app with a step checker
- Aug 2026chatvault and face-grouperData recovery and photo sorting, both on CPU
- Aug 2026entolog and starfoldSpecies records and a transit search in the browser
- Aug 2026PellixMy web design studio
- Sep 2026The AssayMy own technical publication
- Oct 2026Mark point marking in LocusPast papers marked against the real schemes
Most of what I build started as a problem of my own. A chat app on my laptop stopped opening my messages, so I wrote the tool that got them back, and then made it work for other apps too.
I spend most of my time on Linux, in file formats, encrypted databases, recovery and automation. My favourite problems are the ones where the answer is hiding in a binary layout or a schema nobody documented, and the only way in is reading the source. If something needs a web app, I build the web app.
I'm doing Edexcel A Levels in Physics, Maths and Computer Science. Maths and physics are why I like software you can check. Locus is the app I study with.
Systems and data
Python and SQL, SQLCipher, AES, binary formats. chatvault checks every attachment it decrypts before it calls it recovered.
Web apps
TypeScript, React 19, Vite, Tailwind, Cloudflare. Locus, Chronicled and Pellix are live, and you can click through to them below.
Numerical work
Exact fractions, transit search and clustering. starfold searches real TESS data for planets without a single library.
Technical writing
I run The Assay, and when a build goes wrong I write down why.
Work
Six things I built.
Click one to see what the problem was, what I did about it, and how it turned out.
01
Locus
Study app with a step checker
React 19TypeScriptKaTeX
Problem
An answer key tells you if your final answer is right. It can't tell you whether the working that got you there is.
What I did
Wrote a checker that reads working line by line in exact arithmetic, and added marking against real mark schemes, point by point.
Result
It catches a right answer reached the wrong way. Study data never leaves the browser.
02
chatvault
Recovery and troubleshooting for messaging apps
PythonSQLCipherAES
Problem
When a desktop messaging app breaks or won't open, your messages and photos are usually still on disk. They're just locked behind encryption the app normally handles for you.
What I did
Built a core that unwraps Electron's safeStorage across keyring backends, opens SQLCipher, and decrypts each attachment with an HMAC check. Each app gets a small adapter.
Result
Adding a new app only takes a small adapter, and the ones I've built are tested against real profiles. Anything it can't recover is sorted into four categories, so you know exactly what's missing.
03
starfold
Planet search in the browser
JavaScriptTESS dataNo dependencies
Problem
Searching a star's light curve for a planet usually means Python libraries and a machine to run them on.
What I did
Wrote a Box Least Squares transit search from scratch in JavaScript and pointed it at real TESS light curves.
Result
The whole search runs in a browser tab, with no server and no library behind it. The curve at the top of this page folds the same way.
04
face-grouper
Sorts photos by person, offline
OpenCVscikit-learnPython
Problem
Sort a folder of photos into one folder per person, with no GPU and without uploading anyone's face anywhere.
What I did
Face detection and clustering on the CPU. It doesn't guess gender on purpose: those models fail worst on the people a wrong label hurts most.
Result
At a threshold of 0.85 the detector found faces in zero of eighty real photos and still reported a clean run. I caught that and wrote it up.
05
entolog
Photos to species records
Python stdlibDarwin Core
Problem
Insect recorders end up with hundreds of photos and a spreadsheet they fill in by hand.
What I did
A tool that walks the photo folder and builds the record table with the fields the recorder picks, in a window, a terminal or their own editor.
Result
Exports a Darwin Core Archive, the format biodiversity databases accept. Nothing to install beyond Python.
06
Chronicled
History site
TanStack StartReact 19Vite
Problem
Most history sites are a flat archive. You have to already know what you're looking for.
What I did
Organised it into Past, Present and Future, with a world map for browsing by place and a research view that searches several open sources at once.
Result
It's live, and I wrote every article on it.
Writing and studio
I write things down.
Most of what I know came from something breaking. When it does, I write down what broke and why.