Faizan Azhar.
← All posts

Before Faizan OS: How a Single HTML File Replaced My Spreadsheet

August 21, 2026 · Faizan Azhar

Laptop showing a simple spreadsheet next to a closed ledger book on a wooden desk

Before there was a Faizan OS with 20-plus modules, there was one file. No login, no sync, no framework. Just a single HTML page that tracked how much I was spending on nicotine, restaurants, and padel. This is where it actually started, and I pulled every detail below straight from the commit history so I'm not romanticizing any of it.

Table of Contents

Replacing a Spreadsheet, Not Building an App

There was no grand plan here. Before any of this existed, I was tracking my finances in Excel: one spreadsheet for expenses, another for investments. The seed data that got loaded into the first version of the app was literally pulled from those same spreadsheets, months of history copied over in one shot.

The actual instruction I gave to build the first version was blunt about the constraints: a complete personal finance tracker as a single HTML file, no frameworks, no dependencies, pure HTML, CSS, and vanilla JavaScript. That wasn't an accident or a limitation I hit later. It was the starting rule, and it's the same rule Faizan OS still follows today.

A torn notebook page above a bare desk with a laptop, representing a single simple first file

The First Hour

The first real commit landed at 4:41am on March 18, and it was one file: personal_expenses.html, 848 lines. No backend, no account, nothing synced anywhere. Everything lived in the browser's local storage under one key, and the categories were about as personal as it gets: nicotine, restaurants and snacks, padel, and a handful of others that mattered to me specifically.

That's the detail worth sitting with. This didn't start as "a finance app." It started as one category of my own spending that I was tired of tracking by hand.

Within the same hour there was already churn. A duplicate file got uploaded and deleted minutes later. An early index.html got deleted too. None of it was dramatic, it was just the normal mess of building something fast and fixing the obvious mistakes as they showed up.

By later that same day, a Cloudflare Workers config had been auto-added and a second page, home finances, showed up alongside a multi-page shell. Less than 24 hours in, and it had already outgrown being a single spending category.

The Rewrite That Actually Made It an App

For about two weeks, nothing happened. Then on March 31, everything changed at once. What the commit history calls simply "New UI" was a full rewrite, and it's the moment this stopped being a personal expenses tracker and became something closer to a real system: Income, Liabilities, and Investments all appeared in the same rewrite, alongside a proper multi-page structure.

This is also where a written prompt document shows up in the repo for the first time, the same kind of instruction set I still use today to hand off features. The pattern of describing what I wanted in plain language and getting a working page back was already the whole workflow, five months before Faizan OS existed.

The Bug That Fought Back for a Whole Day

If you want a single moment that captures what building this way is actually like, it's April 19. Six separate commits that day were just Index.html versus index.html, added, deleted, updated, deleted, updated, deleted, over and over.

Case-sensitive filesystems don't care how the file looked in an editor, and figuring that out without a background in how deploys actually resolve file paths took the better part of a day of trial and error. The stray capital Index.html this fight left behind was still sitting in the repository months later, at the most recent commit I pulled from. Some fights you win, some you just learn to work around.

Four distinct building blocks stacking together representing new features added in one rewrite

Where It Landed

By April 19, the app had already gone from a single spending category to an installable PWA with a manifest and service worker. Firebase Auth and Firestore came in not long after, replacing local storage with real sync, so the numbers I saw on my phone would match what I saw at my desk.

By July, five pages had become six: Dashboard, Personal Expenses, Home Finances, Income, Liabilities, and Investments, with actual cross-linking between them, a liability payment could show up automatically in expenses, an expense could tie back to an investment.

That's the app Faizan OS eventually replaced. Not because it failed, but because it had grown as far as a single-file, six-page structure could reasonably take it. Everything that came after, the 20-plus modules, the cross-module Patterns engine, the whole rebuild, started from the same instinct that built that first 848-line file: I was annoyed at tracking something by hand, so I described what I wanted and built it instead.

Two overlapping folder icons colliding, representing a file naming conflict bug

Frequently asked questions

What was the very first version of Faizan OS?+

It wasn't called Faizan OS at all. It started as a single HTML file called personal_expenses.html, 848 lines, storing data in the browser's local storage with no backend or login.

Why did the original app get built in the first place?+

To replace manual spreadsheet tracking. Finances were originally tracked in Excel, and the seed data for the first version of the app was copied directly from those spreadsheets.

Why was the app built without any framework?+

That was a deliberate constraint from the first instruction given to build it: a complete personal finance tracker as a single HTML file, no frameworks, no dependencies, pure HTML, CSS, and vanilla JavaScript.

What was the biggest bug in the early history of the app?+

A day-long fight with file name casing, Index.html versus index.html, caused by case-sensitive deploy behavior. It took six separate commits in one day to work through, and a leftover stray file from that fight was still present in the repository months later.

How is this related to Faizan OS?+

This app is the direct predecessor to Faizan OS. Its data format and lessons carried forward, and understanding where it started is the first chapter in the story of how Faizan OS came to exist.

Tags

Faizan OSVibe CodingBuild in Public

Free operational audit

Want help building yours?

I structure and run offshore delivery teams for a living. Start with a free operational audit.