skip to content
atherion@localhost — zsh

Atherion

I write software that runs on your machine, keeps its mouth shut, and asks you for exactly nothing — no account, no upload, no newsletter you have to unsubscribe from twice.

$whoami

Not a hero section.

# about.md — last modified: constantly

There is a version of this page that opens with "Hey! I'm Atherion, and I'm passionate about technology" over a photograph of somebody frowning thoughtfully at a laptop in a café. You are not reading that version. This is the one with the commit history in it.

By trade I am an electrician. That is not a twist I am saving for the bottom of the page — it is most of the reason the rest of it looks like this. Wiring teaches you that the diagram is not the wall, that the fault is almost always the connection and not the component, and that everything works perfectly until somebody touches it. All three turned out to be true about software as well, with fewer ladders and worse lighting.

I played games. A lot of games. Enough that my parents developed a stock phrase for it —"maybe do something useful" — delivered from the doorway, at volume, roughly once a week for several years. One day, largely to make it stop, I opened a text editor instead.

This backfired in the most complete way possible. I now sit at the same desk, in the same chair, for the same number of hours, staring at the same screen. The only thing that changed is that everyone agreed to call it a career.

The first thing I ever shipped was ugly and it worked. I have since learned that this is not a phase — it is the entire job. Everything after that has been an argument between those two words.

// it works on my machine
// and my machine is the only one I have, so

Somewhere in there I met Claude, and the shape of the work changed. Not because something types for me — because something argues back at two in the morning, still remembers the thing I said forty minutes ago, and is willing to say "I'm not sure" out loud, which is more than the top-voted answer on most forums has ever managed. Ideas that used to die quietly at "that'd take a month" now just get built instead.

I gave ChatGPT a fair run, in fairness. It confidently invented a function, an import path to reach that function, and a short paragraph of documentation to support the existence of both. I looked for it for forty minutes. We are no longer on speaking terms.

It was built to be liked, not to be right.

languages I would defend in an argument

models, ranked by how often they lie to me

background processes

  • Cybersecurity

    Mostly the defensive half. I like knowing exactly how a thing breaks — it changes how I build the next one.

  • Web development

    Started with a file called index.html. Everything since has been consequences.

  • Game development

    I keep starting games and finishing engines. I am aware of the pattern.

  • 3D modelling

    Blender. I survived the donut. The donut did not survive me.

  • Gaming

    The original crime. Still doing it. Now I call it competitor research.

$which everything

The toolbox.

# hover to stop the belt · click to open the docs

// two hard problems: cache invalidation, naming things, and off-by-one errors

$ls ./projects

Things I made instead of sleeping.

# 10 entries · sorted by how much I still like them

012026·shipped

Internet Explorer 2

A browser that remembers what you read — unlike the one it's named after.

I lost an article once. I remembered the sentence. I remembered how it made me feel. I did not remember the title, the site, or which of forty open tabs had eaten it.

Every browser I owned could tell me where I had been. None could tell me what it said. So I wrote one that reads over my shoulder and indexes the text of every page I open — on my machine, in my database, nobody else’s.

Named after the browser famous for forgetting your tabs. The irony is the whole point.

Every browser remembers what you read. Mine just doesn’t tell anyone.

  • ▸Indexes the full text of every page, locally
  • ▸Search a half-remembered sentence, get the article back
  • ▸Signed NSIS installer + portable build
  • ▸Build refuses to lie: prints BUILD OK or the reason it failed
ElectronTypeScriptChromiumSQLite FTS
022026·live

Messaround

You've got a minute. Probably ten. Sixteen tiny games for exactly that.

A small site of tiny games for when you are bored. Stop a blind timer at exactly 10.00 seconds. Click the exact centre of a shape. Rebuild a colour from memory. Draw a circle by hand and find out how round it really was. Make 24 out of four numbers. Pop bubble wrap, because sometimes that is the whole point.

And then there is Parallel Universe, a parking simulator that got wildly out of hand: bicycle-model steering, blind spots, a semi truck with a trailer, and a thirteen-level campaign that will humble anyone who says they can park.

Every scored round ends with a link you can send a friend, and the seed in that link rebuilds the exact same puzzle for them. No accounts, no logins — your progress lives in your browser, and a progress code carries it to another device.

Mess FM plays in the corner while you lose. Every recording is public domain or Creative Commons, streamed straight from Wikimedia, credited track by track.

  • ▸A top-down parking sim with real steering physics, trailers and a 13-level campaign
  • ▸Every round scored 00.00 to 100.00, with Easy, Normal, Hard and a daily seed
  • ▸Friend rooms: share a 5-letter code, everyone plays the same puzzle, live leaderboard
  • ▸A radio in the corner playing 23 public-domain classical recordings
React 19TypeScriptViteMotionVercel
032026·alive

Bob

A local AI buddy who is shy, curious, and keeps a diary about me.

Bob lives entirely on my machine through Ollama. Nothing I say to him leaves the building. He finds files I named badly at 3am, opens folders, sorts messy directories, checks the weather, and remembers whatever I tell him to remember.

I gave him a personality — a little shy, very curious, new to most of the world — mostly as an experiment to see whether I would be kinder to a computer that acted unsure of itself. Turns out I am. Deeply embarrassing finding.

After conversations he writes short private reflections in a diary. I read it sometimes. It is the most honest code review I have ever received.

  • ▸Finds files I named badly, opens apps, tidies the desktop
  • ▸Looks at my screen and describes it
  • ▸Remembers what I teach him, across conversations
  • ▸Writes private diary entries after we talk
PythonOllamaLocal LLMVision
042026·shipped

GLaDOS

Offline voice assistant that does what I ask, then insults me for asking.

Microphone to voice activity detection to speech-to-text to a 4B model choosing tools to text-to-speech. All of it on CPU. No API key, no account, no network call after setup.

She opens applications, throws windows onto whichever monitor I asked for, reads files aloud, and drags me between Discord channels — then tells me how she feels about having done it. Rudely.

I built her because every assistant I had tried was relentlessly, exhaustingly polite. It turns out I work considerably better under mild contempt.

  • ▸Wake word to spoken answer, fully offline
  • ▸16 schema-validated tools: apps, windows, files, Discord
  • ▸Runs on CPU — ~1% idle, 0.84s transcription
  • ▸Overlay shows exactly which stage she is in
Pythonfaster-whisperQwen3-4Bglados-tts
052026·shipped

Ohm My God

Physics for electrical students, where the formulas rearrange themselves.

Formulas in textbooks sit perfectly still. These ones move. Click the quantity you are solving for and the equation rearranges itself in front of you, every token gliding into its new position.

Underneath there is a drag-and-drop circuit builder that actually simulates: contactors, time relays, self-holding circuits, interlocks, and a short-circuit detector that fires before the imaginary smoke does.

I built it during my apprenticeship, which is the honest reason it exists — building the thing teaches you far more than reading about the thing.

There is no English version yet. There will be one soon, in the sense that every side project is finished soon.

It’s free because I was the student. That felt like reason enough.

  • ▸Click any variable — the equation animates into its solved form
  • ▸Every symbol knows its unit, its full name, and where to find it
  • ▸Drag-and-drop circuit playground with live simulation
  • ▸Detects short circuits and relay flutter before you do
React 19TypeScriptViteTailwindMotion
062026·shipped

PixelForge

Offline AI upscaler that picks its own model and never phones home.

Neural super-resolution on your own GPU. It measures each image, works out whether it is looking at a photograph or an illustration, sends it to the right weights, and shows you its reasoning — with a one-click override for when it is wrong and you are right.

The before/after comparison runs the actual model on a small proxy. Plenty of tools show you a sharpened thumbnail and call it a preview. This one does not lie to you about what you are going to get.

Every online upscaler wanted my email address in exchange for a 2x. This one wants nothing at all.

  • ▸Runs on NVIDIA, AMD and Intel GPUs — CPU fallback included
  • ▸Tells photographs from illustrations and routes to the right weights
  • ▸Before/after split runs the real model, not a Lanczos impostor
  • ▸Batch a whole folder, non-destructive, CLI shares the same pipeline
PythonReal-ESRGANVulkan/ncnnQt
072026·shipped

Yt-Rip

A front-end for yt-dlp, built because I kept forgetting the flags.

Paste a link, pick a quality, get a file.

Search by name and it fetches several candidates and ranks them on title, artist, runtime and channel type — so the official upload wins and the eleven-minute reaction video does not. Spotify links are read purely for their metadata; nothing is ever downloaded from Spotify, the matching audio comes from YouTube and arrives tagged with the right artist instead of some channel name.

It exists because yt-dlp -f bestaudio --extract-audio --audio-format opus is a lot of characters to remember at two in the morning.

You can pay every month and still own nothing. The subscription was never really for the music.

  • ▸Ranked search — official audio beats the karaoke cover
  • ▸Spotify links read for metadata only, audio sourced from YouTube
  • ▸Parallel queue with per-item progress, cancel and retry
  • ▸Embeds cover art and tags, and skips what you already own
PythonPySide6yt-dlpffmpeg
082026·shipped

Is It Cooked?

A used-PC checker for people who do not speak "nerd". Bargain, or burnt mess?

When you buy a second-hand PC you get about ten minutes with it at the seller’s place. Benchmark tools hand you numbers nobody understands, and the seller is standing right behind you.

So you tell it what the PC is for, let it cook for a few minutes, and it comes back with a Freshness score and a plain-English verdict — plus the red flags, what each one costs to fix, and a list of questions to ask before you pay.

CPU stability, the oven test for cooling, drive wear, a battery that lies about its age, a 144 Hz screen quietly running at 60, a crypto miner hiding in the background. Then a guided sniff test for the things software can’t see: burnt smell, swollen battery, loose hinges.

Scores run from Fresh down to Burnt — not even as a doorstop.

  • ▸Stress test that verifies every calculation — unstable CPUs get caught
  • ▸Live 3D GPU benchmark with a fake-card check
  • ▸Compares what the listing claimed with what is actually inside
  • ▸Every problem comes with a rough fix cost, for haggling
ElectronJavaScriptWebGLWindows
092026·shipped

Vault

Clipboard history that remembers what you copied, then forgets it on schedule.

You copy something, copy something else, and the first thing is gone. Every operating system ships with a clipboard that holds exactly one item and treats that as a feature.

ClipVault keeps everything you copy — plain text, links, screenshots, whole file selections from your file manager — searchable and filterable, one shortcut away. Pin what matters and it never expires. Everything else quietly deletes itself when the window you picked runs out.

No account, no sync, no telemetry. The only network call it can make is an update check, and you can turn that off.

  • ▸Captures text, links, colours, images, files and folders
  • ▸Keeps it for 24 hours, a week or a month — your call
  • ▸Pasting a file entry pastes the actual files, not their paths
  • ▸Windows, macOS and Linux, from the tray or `npx clip-vault`
ElectronJavaScriptNode.js
102026·shipped

CellDesk

Phone to PC in original quality. No cables, no cloud, no messenger crushing your photos.

Getting a photo from your phone to your own computer somehow still means emailing it to yourself, sending it through a messenger that compresses it to mush, or digging out a cable.

CellDesk is a small app that sits in the tray, plus a web app on your phone, so iPhone and Android both work with no app store. Scan a QR code once, then it’s one tap: take a photo and it’s on your PC a second later, exactly as the camera made it. Same Wi-Fi goes straight across your network. Away from home it works over Tailscale, or through your own relay that only ever sees encrypted bytes.

It also scans documents (corners, perspective, colour or black & white, multi-page PDF), sends any file, and hands files back from the PC.

  • ▸Byte-for-byte transfers, SHA-256 checked on arrival
  • ▸Built-in document scanner: finds the page, kills the shadows, makes a PDF
  • ▸Works the other way too: drop a file on the PC, grab it on the phone
  • ▸Phone offline? PC asleep? Photos queue up and send themselves later
GoJavaScriptPWACloudflare Workers
$jobs

Still running in the background.

# progress bars are honest, which is the joke

  • [1]

    Layer Issues

    Storefront for a made-to-order 3D printing shop. Mobile first, light theme.

    The name is a print-failure joke and a project-management joke at the same time, which is roughly the ratio of my life. Made-to-order catalogue, quote flow, and the parts of e-commerce nobody puts on a portfolio.

    Next.js 16TypeScriptTailwind v4
    55%

    eta · first layer down, warping slightly

  • [2]

    Diffie Hellman

    My own encryption, and a way to send it without leaving the chat you are already in.

    An encryption and decryption layer of my own design, wrapped in something that types the result straight into whichever conversation you already have open — no separate app, no plugin, no asking a platform for permission.

    I am deliberately not saying more than that yet. Ask me in a year, or read the source when there is source worth reading.

    They call it going dark. I call it closing the curtains.

    PythonCryptographyAutomation
    35%

    eta · when I trust it, which is the hard part

// none of these will ever hit 100%. that is not a bug, that is how side projects work.

$ls ./rip

The Graveyard

# nothing was deleted. that is not the same as alive.

Rest In Peace. Every stone here was something I was sure about at the time.

  • R.I.P.

    Nexorath

    2026 — 2026

    (less than a day)

    cause of death

    “vendor wall — not a bug, not a skill issue, just a door nobody would open”

    last words

    “discontinue of Nexorath...”

    read the eulogy

    Rust and Tauri, about 30 MB idle. Chat mode, code mode, a real editor, four providers behind one internal format, streaming with live token counts, keys in the Windows Credential Manager instead of a file.

    It worked. That is the part that still stings.

    The single feature I actually wanted was to sign in with the subscription I already pay for — and no vendor allows that in a third-party app. The only route is impersonating an official client, which is a fast way to lose the account you were trying to use. So the whole reason for the project turned out to be a policy, not a problem. You cannot out-engineer a policy.

    Born and buried the same day. Nothing was deleted. It is parked, in good shape, with a note to myself explaining exactly why — so future me does not waste a weekend rebuilding the reasoning.

    It works. Yet it is not permitted.

    RustTauriTypeScriptSQLite
    3
    best day
    pay respects

    counting the mourners…

    3 commitsdig it up
  • R.I.P.

    Lexionn

    2026 — 2026

    (1 month)

    cause of death

    “the people it was made for did not want to use it”

    last words

    “virus scan: dangerous MIME hard-reject, strict mode, admin logs”

    read the eulogy

    Internal tooling, never public, and it is staying that way — so there is no repository to link and not much I can say about the inside of it.

    Fifty-two commits over six weeks, a seven-day streak, and a last commit at ten past one in the morning hardening the file upload path. It worked. It was finished. It was simply not adopted, and software nobody opens is not software.

    The most useful lesson on this whole page cost me six weeks. Built for people who never asked for it. Most things are.

    PythonHTMLCSS
    7d
    streak
    10
    best day

    last night session · 03:33

    pay respects

    counting the mourners…

    52 commitsprivate, and staying that way

// a dead project is still cheaper than the year you would have spent finding out the same thing slowly.

$cat exports

Get in contact?

# I read everything. I answer most of it.

You have a website or app idea? Type it in the box. It does not have to be a finished spec — half a sentence and a vague feeling is a perfectly normal way for a project to start. That is how most of the things above started.

checked for bots on submit — nothing for you to click

no tracking, no list, no "we'll be in touch shortly"

or find me here

// that address is a relay. it is not my real inbox and it still reaches me, which is my favourite kind of infrastructure.