Since MarchI've shipped two versions of a personal operating system: first a finance tracker that grew arms and legs, then a full rewrite into 23 modules covering finances, habits, routines, trips, career, and a pattern engine that connects all of it. Every line written by talking to Claude.
This isn't a portfolio piece. There's nothing to sign up for. It's the honest version of what vibe-coding something real actually looks like, bugs, dead ends, and all.
~/faizan-os
$whoami→not a developer
$modules_shipped→23
$commits_total→713
$status→still shipping
01 / origin
How This Actually Started
It didn't start as an operating system. It started as one file: personal_expenses.html, no framework, no backend, tracking my own spending because I was tired of Excel.
That was March. Within a day I'd bolted on Home Finances. Two weeks later, a full rewrite added Income, Liabilities, and Investments in one go. By Aprilit was a PWA I could install on my phone. Then I didn't touch it for a month. Then I did again.
201 commits later, that first version was doing more than I ever meant it to. So this July I rebuilt it from scratch as Faizan OS v2, 23 modules, no npm, no build step, still just me and Claude arguing about Firestore documents.
02 / the thing itself
What Faizan OS Actually Is
It started as a way to stop juggling five different apps for my life. Now it's a single app with modules for:
01Personal and household finances, income, investments, liabilities, net worth
02Habits, daily check-ins, and a unified Routine log tied into everything else
03Trips, a watch queue, career tracking, decisions log, study abroad tracker
04A cross-module Patterns engine that correlates signals, does my spending spike when my sleep routine breaks down?
05A dedicated Odessys module tracking invoices, costs, clients, and P&L for the agency side of things
None of this exists because I hired a developer. It exists because I got annoyed enough at juggling apps to describe what I wanted in plain language, and kept iterating until it matched what was in my head.
Watch QueueTripsBrain DumpDay Log
03 / the day to day
What Vibe Coding Actually Looks Like Day to Day
The romantic version of vibe coding is “describe an app, get an app.” The real version is messier and, honestly, more fun than that.
A typical day starts with me just complaining about something. “The app is getting slower.” “I keep getting logged out.” No stack traces, no technical detail, just a vibe that something's wrong. Then comes the actual investigation. One day the entire app was crawling on every save. Turned out one shared helper function, used in 44 places across the app, was quietly downloading an entire bloated database collection in the background on every single save. Nobody wrote that bug on purpose, it just piled up over time the way real software does.
Other days it's slower and more tedious: a redesign goes in, and then a dozen small visual things get reported and fixed one by one as I actually use the thing, stretched circles, a header that flickers before real data loads, a dropdown that opens off-screen on my phone. None of it is dramatic. It's just the unglamorous texture of actually building something, not the highlight reel.
04 / the bugs
The Bugs Nobody Tells You About
A few of my favorites, because they're the kind of thing that makes “AI just writes the app for you” sound a little naive:
■bug 01
The bug that could have eaten months of data.
The local cache Firestore keeps on your phone never expires on its own. So when I fixed the “app shows stale data” problem, I built a 20-second window after unlocking your phone where it forces a fresh read. Except if you didn't check the app within those 20 seconds, it silently fell right back to the stale cache, the exact bug I was trying to fix, just with a delay. Took a second rewrite to actually kill it.
■bug 02
The privacy toggle that had three leaks.
I built a hide-amounts toggle to blur out money values when I'm screen-sharing. Found out the hard way it wasn't actually blurring everywhere, portfolio values leaked through one input field, real estate value leaked through a milestone calculation, and Patterns just ignored the toggle completely. Three separate leaks in three different modules, found and fixed one at a time.
■bug 03
The file that's still broken, on purpose, sort of.
Early on I fought a full day with a file called Index.html and another called index.html, same name, different case, both very real to Cloudflare. Add, delete, update, delete, update, delete, six times in one day. I eventually won. The stray file is still sitting in that repo today. I've just decided it's a monument now.
None of these are “type a better prompt and it just works” stories. They're normal debugging, the kind any engineer does, just applied to something that got built through conversation instead of a computer science degree.
05 / the point
Why I'm Sharing This
Honestly, mostly because it's been a fun thing to build and I wanted somewhere to write it down. There's a version of this that turns into “look how capable I am,” but that's not really the point. The point is that I spent years assuming “I can't code” meant a whole category of ideas just weren't available to me. Turns out that wasn't as true as I thought.
06 / next
What's Next
Faizan OS is still growing. Some weeks it's a new module, some weeks it's just fixing something I broke the week before. Right now I'm scoping a tags engine, a Spotify integration, and a way to pull data off my watch. I'll keep adding to this page as it happens, bugs and all.
07 / the log
From the Log
A weekly write-up on what shipped, what broke, and what I'm still figuring out.