Lossless Changelog
fleet

Day One: A Repo Shaped Like the Argument It Makes

The self-host stack begins — three directories, two vendored tools, and a README carrying the full vendor-by-vendor savings case. The shape chosen on day one is the one still running four client stacks today.

Michael StatonMusic Editoraugmented with Claude Code on Claude Opus 4.7

Backfilled 2026-08-15. Written from the commit record months after the fact, because the founding period had no entry and the repo's own origin deserves one.

Why Care?

Most infrastructure repos start as a folder and acquire a shape later. This one started as an argument, and the directory layout was chosen to hold it.

The claim: a VC firm pays somewhere between $50k and $250k a year for software that has open-source equivalents good enough to run a fund on. Making that claim credible needs three separate things — the evidence (vendor pricing, honest comparisons), the tools themselves (vendored, pinned, deployable), and the deployments (real, per-client, full of secrets). Those have completely different audiences and completely different safety requirements.

So the repo got three directories on the first commit, and they still hold.

What's New?

  • The repo exists — vc-self-host-stack, scaffolded as a pseudomonorepo.

  • core/ — submodule deploy wrappers for the tools we actually run.

  • studies/ — alternatives considered but not chosen, pinned so the reasoning survives.

  • client-stacks/ — gitignored from the very first commit.

  • Two tools vendored: Twenty CRM and Papermark.

  • The README became the thesis — the full vendor-by-vendor analysis pulled in from lossless.group, with savings math and footnoted sources.

The decision that mattered most

client-stacks/ was gitignored in the initial commit, before a single client existed. Not added to .gitignore later, after a scare — designed out from the start.

The repo is a public marketing surface. Real deployments carry real .env files, real database passwords, real bucket credentials. Those two facts are irreconcilable in one tracked tree, and the only reliable way to keep them apart is structural rather than procedural.

Three months on, that single line is why four clients' secrets have never been at risk of a stray git add -A. It also created a real cost — anything that must survive a rebuild has to live in docs/, not in the client directory — but that constraint has been worth paying every time.

The first two tools, and why those two

Twenty CRM — the Affinity / Salesforce Financial Services Cloud replacement. Affinity runs $167–$225 per seat per month; FSC runs $325–$750 plus implementation. It is the single largest line item on a VC's software bill, so it was the obvious first target.

Papermark — the DealRoom / ShareVault replacement, and the only genuinely fully-open-source VDR. DealRoom bills flat at $12k–$15k a year; ShareVault charges per deal.

Both were pinned to lossless-group forks rather than upstream, on the theory that deploy wrappers would need layering without polluting the source repos. Worth noting how that assumption aged: every tool added since — plunk, postiz, karakeep, plane — is pinned to plain upstream, because the wrapper layering never turned out to be necessary. The fork was insurance we have not had to claim.

The README as the product

Pulling the whole thesis into the README rather than linking out to it was deliberate. A reader who lands on a GitHub repo from a search result will not click through to a marketing site to find out whether the idea is serious. The front page has to carry the argument: the category tables, the pricing, the savings math, the citations.

That instinct compounded. The README's category taxonomy became the structure everything else hangs off — it is what new tools get slotted into, what the watchlist sorts against, and eventually what the 99-tool portal catalog was generated from.

What day one got right, and what it did not

Right: the three-directory split, gitignoring client deployments before there were any, and treating the README as the product rather than as documentation.

Not right, in hindsight: studies/ never really filled up — alternatives got recorded in context-v/explorations/ and a watchlist instead. And the fork-first default for core/ submodules was solving a problem that never arrived.