Light Phone

I carry a Light Phone III, a phone designed to do less. Then I couldn't leave it alone. LightOS is Android underneath, apps sideload as ordinary APKs, and the hardware — the scroll wheel, the camera button, the grayscale OLED — turns out to be full of possibilities nobody had claimed yet. I've written or adapted about thirty apps for it so far. None of them are made or endorsed by Light; they're community apps, all free and open source at github.com/gi-os. Here are the ones I'd want to explain to you if we were talking in person.

Roll

A camera that's fun to use

Roll replaces the stock Camera and Album with one app built around a single gesture: the photo roll sits above the viewfinder, so you pull down to see your photos — newest against the corner of the frame, older ones running up and back like a contact sheet — and flick up to get back to the shutter. That's the whole navigation model.

The wheel works as a lens ring. There are film-style filters, date backs, and a QR mode. It's a full rewrite rather than a fork, and it has shipped more releases than anything else in the collection — mostly because people keep sending good ideas.

BrightMarket

An app store, so the rest can exist

Sideloading works on the Light Phone, but keeping fifteen sideloaded apps current means checking fifteen release pages. Obtainium solves update tracking well — it's just built for a normal Android, and it only knows the links you paste into it. BrightMarket does the update tracking, fits this phone, and adds a catalog on top so there's somewhere to find community apps in the first place. It has become the main way Light Phone III owners find and update them, which I try to treat as a responsibility more than an achievement.

An app store on a minimalist phone is a little self-defeating — it's still an infinite scrolling feed. So browsing is optional. On first launch the app asks, and with Focus mode on it only shows what you have installed and what needs updating.

There's no server and no analytics. The backend is a public GitHub repo: one YAML file per app, an index rebuilt hourly by CI and served from GitHub Pages, and a submission portal where anyone can list an app they own. Submissions are validated automatically — the validator reads the applicationId out of the APK itself rather than trusting the form. Download counts come from GitHub's own release statistics, so the "most downloaded" sort costs nothing and tracks nobody.

I've gotten it wrong, too. One afternoon the GitHub API quietly returned empty release lists — no error, just nothing — and my builder read that as "these apps have no releases" and dropped them from the index. The fix, and the lesson, is written into the repo: an app is never dropped for an answer the API failed to give.

BrightChat

iMessage on a dumbphone

Credit where it belongs: Craig Eley wrote the original app, which talks to a self-hosted BlueBubbles server over Tailscale so no Google push is involved. My fork adds Favorites/Known/Unknown tabs, contact search, and a photo viewer. Craig's original README is preserved at the bottom of mine, as he wrote it. Bugs in my additions are my problem, not his.

BrightControl

Making the hardware work everywhere

The wheel, camera button, and home button on the LPIII arrive at whichever app has focus as ordinary key events — Light patched the system keylayout, and the brightness ramp you get in Light's own tools is just app-layer code in those tools. In any sideloaded app, the keys arrive and nothing listens. BrightControl is the missing layer: an accessibility service that catches those keys everywhere, so the wheel does brightness or scrolling in every app, a double-tap switches between them, and every button is rebindable. Working this out meant reading the keylayout files off the phone; the writeup in the README is the documentation I wish had existed.

The plumbing

light-common, and bug reports that file themselves

Once there were fifteen apps, the same wheel-handling code existed in fifteen slightly different copies, and a fix meant twenty edits. So the shared pieces — hardware keys, the wheel, the type and color system, shake-to-report — moved into one library that every app pulls in as a dependency.

The part I use most: shake any of my apps three times and it files a bug report as a GitHub issue, with the screen you were on, a build table, and a screenshot. An AI agent triages the queue hourly — it diagnoses each report against the app's source, ships a fix when the cause is small and provable, and hands the rest to me with its notes. It's under strict instructions that guessing is worse than waiting, and the rule that keeps it honest is simple: anything it can't prove, it doesn't touch.

The rest of the collection

Each one a small idea, kept small

Beyond the phone

The other things I build

By day I'm a systems engineer at LR Paris, where I built and run the e-commerce platform behind the company's client shops. At home there's BasilNet, a self-hosted server that runs my media, backups, and Home Assistant; a DSLR built from a Raspberry Pi and a lens mount; a four-lens stereoscopic camera; and a senior-design vertical hydroponic farm with an automated shelf elevator. Two of my ideas in AI-powered health monitoring are now granted US patents.

If any of this is the kind of thing you'd like built, my resume is here.