Project  ·  Ongoing

What I build for fun.

I built a home server, and NateOS is one of the platforms I run on it. This is a fun side project I do when I have down time, it isn't meant to be live for anyone else aside from me.

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."

A nine tile launcher grid in soft grey. Five tiles carry line-art icons and labels: Glenwood, Fitness, Fuel, Jobs and Library. Four sit empty, pressed into the page instead of raised off it.
So far, I've built 5 mini apps, I left a few tiles as coming soon to remind me to keep building and growing my OS... and because it completes the grid of course.

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.

A home dashboard showing 2 of 10 tasks done, four maintenance jobs overdue and two due soon, and $3,766.80 of materials planned. Below it, a list of overdue jobs with day counts, and project cards with progress bars.
Four things overdue and two coming up. I'd rather it just tell me than make me feel good about it.

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.

A session history list headed Fitness, 35 sessions. Rows alternate between Lower A slash Push and Pull slash Hinge B, each with a date and a set count, running back through several months.
The same two workouts alternating, 35 sessions of them.

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.

A nutrition panel headed Consistently short, listing iodine, sodium, calcium, riboflavin and others with the percentage of target hit for each, and a second card headed Over a published limit flagging vitamin D.
Seven days at a time. What I'm short on, and underneath it, what I'm going over 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.

A feed of job postings on a soft grey background. Each card shows how long ago it was found, a small colored track tag such as SE or IMPL, the role title, the company and location, and three actions: Save, Applied and Dismiss.
Every track gets its own color. I kept them muted so a list of five doesn't look like five warnings.

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.

A dark, low-lit 3D library seen over the shoulder of a blocky figure. A fire burns in a stone hearth on the right, a reading chair and coffee table sit in front of it, and bookcases line the walls.

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.

A ruled notepad filled with handwriting in dark blue ink, with a toolbar underneath offering pen, marker, highlighter, pencil and eraser, six ink colors, a paper color and a nib-width slider.
I get four instruments and any ink on any paper. The lines on the page recolor themselves against whatever paper I pick.

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.