new york · gio@gi-os.com · gzl.dev
shops storefronts, and the dashboard that runs them phones apps for a phone with no app store, and the store they install from systems a desktop in a browser tab, 2015 to version 7
I build small software, and I usually own the whole thing: the schema, the API, the interface, and the container it ships in. Ten years of it.
Shuttle is a storefront platform. Launchpad is the dashboard that creates a shop, stocks it, and puts it online.
One Docker container per shop, nginx routing by path, orders and inventory as CSV. Session auth with bcrypt and rate limiting, a file manager for the shop directory, and a self-update that pulls a new version from GitHub while the platform runs.
Express and SQLite underneath, React and Vite on top, one DigitalOcean droplet holding all of it. The client shops on lrparisstore.com run on it. Version 4.
The Light Phone III has a black-and-white screen whose home screen is a list of words. I wrote the apps it doesn't ship with, and the store they live in: twenty Kotlin apps, one shared library, one marketplace with a submission portal.
| BrightMarket | the app store, plus an index to submit to it |
| Roll | camera with filters |
| BrightNotebook | notes, folders, calendar |
| BrightMusic | Spotify client |
| BrightRecorder | voice recorder |
| BrightLibrary | e-reader, manga and Calibre support |
Fifteen more behind those: Control · Import · Transit · Way · Sports · Authenticator · thumb · Common · Solitaire · Sudoku · Nonogram · News · Noise · Passes · Sync
My girlfriend carries a Kyocera flip phone, so that got a launcher and a solitaire too.
Gi-OS a desktop in a browser tab, started 2015, now on version 7
PassportOS C, for the Passport device
June4 / June7 a virtual secretary, written before the assistants arrived
zip PWA clone of the LinkedIn Zip puzzle
TeslaHUD a heads-up display for a car that already has one
basilnethome the front door to my home server
GmsSpoof make Google's apps trust microG on a phone with none
feed-guard per-device feed time budgets, enforced at the DNS layer
kotlin, android twenty apps, one shared library, one app store
node, express, sqlite shuttle and launchpad, version 4
react, vite, tailwind the dashboard the shops are run from
docker, nginx, ubuntu one container per shop, one droplet, no kubernetes
bash more of it than I plan on
gzl.dev — my blog, my bookshelf, my film log, my photographs. Everything else is on this page.



