The idea
A trunk and its branches
NateOS is meant to help me manage the parts of my life I can automate. A maintenance schedule for my house, home projects, my diet that automatically calculates my macro and micronutrients, workout routines, my own personal job aggregator with prebuilt filters (because who actually wants to use LinkedIn or Indeed??), and my own library to keep track of what I read.
The mental image I had when I started is to think of the home page like a trunk, and each mini app like a branch. Since it's an app to help with life, a tree felt like a good representation.
I only build new stuff when something happens in real life that sparks the idea, "This could be nice to have in NateOS."
The branches
Glenwood
Glenwood is a tracker and a home binder for a 1974 ranch house. It holds recurring maintenance with real due dates, renovation projects with their tasks and material costs, and a binder of model numbers, documents and every system in the building.
Owning a 1974 house means a lot of small things need checking on their own schedule, like the sump pump, the GFCI outlets and the crawlspace humidity. I'd never remember any of that on my own, and the ones I forget are the ones that get expensive.
I don't store due dates anywhere. Glenwood works them out from what I've already logged, so there's only one thing to keep updated. If I had to maintain a schedule and a service log separately, one of them would be wrong inside a month.
Fitness
Fitness is where my lifts, body weight and sleep go. Most of it comes in from my phone before I'm even awake, which is honestly the only reason there's any data in it.
I run two workouts that alternate, so the history ends up being a list of whether I actually showed up.
Fuel
Fuel is food and supplements. Logging it is tedious and I don't love that part, but the panel makes up for it. I pick a window and it tells me every nutrient I've been averaging under 90% of target on, and separately anything I've been going over a published upper limit on, which nobody ever thinks to check.
That's not how I built it at first. Looking at one day at a time told me nothing useful, because one bad Tuesday doesn't really mean anything. Seven days averaged out is where it started being worth acting on.
Jobs
Jobs has two halves, and only the first one runs on its own.
Finding postings is fully automatic. It checks around 440 company job boards every ten minutes, scores anything new against five tracks I care about, and sends the good ones to my phone. I don't touch that part at all.
Applying is not automatic and I didn't want it to be. It reads the posting, gives me a straight read on how well I fit including where I don't, then drafts a letter and hands all of it to me. Nothing gets submitted and no email goes out, and I'd rather it stayed that way.
It does keep records though. Everything I send stays on file next to what it said about my fit beforehand, so when I get rejected I can go look at what I already knew going in.
Library
Library is a room I can walk around in, in first person. There are three bookcases, a fire, a chair and a low table, and every book I've read is on a shelf somewhere in it.
Where a book sits is just its status. Finished ones are on the back wall, stuff I haven't gotten to yet is on the left-hand case, and whatever I'm reading right now is on the table by the fire. I never stored coordinates for any of it, so moving a book across the room is really just changing one column in the database.
This is the actual room from the app, running right here. WASD to walk, mouse to look, click a book to pull it off the shelf.
If I pull a book off the shelf I get whatever I wrote in it, in my actual handwriting. It saves the notes as strokes instead of images, so each one is an instrument, a color, a width and a list of points. That keeps the ink sharp no matter how far I zoom in, and it means I can do things with it later that I haven't thought of yet.
The catch is that handwriting isn't text, so none of it is searchable until something reads it first. When I want a page indexed, the server draws the strokes out to an image and sends it to Claude to read. That runs about two and a half cents a page and only happens once. After that I can find a note by what it actually says instead of trying to remember which book I wrote it in.
Underneath
Where it runs
The whole thing runs on a server sitting in my house, and I can get to it from anywhere through a tunnel and one password. All five branches share one SQLite file. That's mostly because I'm the only person using any of it, so I've never had a reason to make it complicated. There's no build step and no framework either, and the home page doesn't pull anything off a CDN, so it still loads when the internet is out.