Our first domain-expert founder was Wojciech.

Sample Vault is Wojciech’s own product: a desktop app that finds the right sample in a music producer’s library, tens of thousands of files deep. He built it from zero, starting December 2024. Its users manage over 25 million samples with it, Turso wrote up how it syncs gigabyte-scale databases, and it earns revenue.

Sample Vault's library view: a natural-language search bar, filter facets, and waveform previews across a producer's sample collection
The shipped app · samplevault.ai ↗
Owned product
Engagement shape
December 2024
First commit
1,825 of 1,938
Commits by Wojciech
25M+
Samples under management

The problem he lived with.

Wojciech produces music. For years he had the problem every working producer has: the sample for the track you’re writing is somewhere in the tens of thousands on your drive, filed under a name like ground_shake_bass_one-shot.wav. Where is that one shaker you downloaded two years ago? You will not find it in time.

The existing tools couldn’t answer that question. Filenames carry no meaning, folder structures fall apart, and nothing he tried understood what a file actually sounds like at the scale of a working library. Meanwhile LLMs and audio models had just made a different kind of product possible. So he built it for himself first. Sample Vault’s own homepage says it plainly: you own tens of thousands of samples but only reach for the same fifty.

The stack, and why.

Native shell

Tauri

Samples live on the user’s filesystem and they aren’t going to a cloud. That means filesystem access, OS integration, and offline-first, which the browser can’t give you. Tauri lets a web team ship native without starting from Rust, though ~45,000 lines of Rust grew anyway where the audio work demanded it. Most of that Rust is AI-written: we’re a web team, so the borrow checker and the test suite do the reviewing we couldn’t do line by line.

Embedded DB

Turso

Tens of thousands of samples need to be searchable instantly, offline, with no spinner. Embedded SQLite with cloud sync is the right shape, and getting there took four database architectures, the story told below. Turso’s case study covers the sync layer that came out of it.

Full-stack framework

TanStack Start

In the very first commit, at version 1.91, well before the framework’s 1.0. The same alpha bet the rest of this site talks about: commit fbd8273e, December 20, 2024, with @tanstack/start 1.91.3 in package.json. It carries the cloud side: auth, sync, billing, type-safe end to end.

Database & auth

Supabase

The boring infrastructure of “your library follows you between machines”: accounts, storage, the backend’s Postgres. Auth is handled, so the time goes to the interesting problems.

The calls on record.

Local data

The database took four tries

Sample Vault’s local data layer is on its fourth architecture. Browser IndexedDB was abandoned in November 2025 when the library outgrew it. Tauri’s SQLite plugin replaced it, then hit its ceiling. PGlite, Postgres compiled to WASM, ran from February 2026, and its sync engine worked. Then in March came a 434-file commit moving everything to libsql, with PGlite ripped out the same day and per-user Turso databases provisioned two days later. Landing on the right one cost two migrations that didn’t survive, and each shipped while users kept their libraries. The sync layer that came out of it, chunked batches sized around ~10KB rows carrying two embedding vectors each, is the thing Turso wrote a case study about. Running their library at that scale also surfaced roughly ten bugs in it, which Turso fixed upstream.

Audio AI

The call to move the AI on-device

Tagging started in the cloud: a worker described every sample and computed its search embedding on someone else’s hardware. It worked, and it had two problems: cost that scaled with every library scanned, and the principle that a producer’s library shouldn’t need a network connection to be searchable. In January 2026 the audio side moved onto the user’s machine: LAION’s CLAP model running through ONNX in Rust, Nomic text embeddings computed locally, vector search in-process. It gets through 500 to 1,000 samples a minute, free and automatic, and no audio leaves the disk. Stem splitting works the same way, a one-time 316 MB Demucs graph that pulls a reference track apart in-process, so the track a producer drops in stays on their machine too.

Cloud economics

The one call that stayed in the cloud

Deep tagging, the paid pass, still calls a hosted model, and it should: it reads a folder in context to work out that these files are one pack by one creator, which no on-device model does well. So instead of moving it, we optimized it. The run walks segments, then packs, then folders, then a critic pass, with prompt caching across the parts that repeat, and it came down far enough that in July 2026 the pricing stopped metering it. Paid plans deep tag a whole library with no per-sample cap, which moves the cost onto us and makes measuring it per run part of the product.

Search quality

The part that’s never done

Search quality is the thing users pay for, and it regresses easily. The repo carries a purpose-built lab that A/B-tests ranking strategies through the real audio pipeline against committed metric snapshots, so “the search got worse” fails a build instead of waiting for a user to notice. A second lab does the same for database performance, with a harness for reproducing a corruption bug the app once hit.

Deep Search in Sample Vault: the query 'lo-fi piano loop, dusty, four-bar' returning samples matched by sound
Deep Search in the shipped app · describe the sound, get matches by audio, not filename

The calls that weren’t about code.

The architecture decisions were the easy half. These four took longer, reversed more often, and every reversal shipped to people who were already using the product.

The category was invented, then abandoned

AI assistant, new category -> sample browser, existing one

Sample Vault launched as an AI assistant for your library, in a category that didn’t exist yet. A category with no competitors is also one with no search demand, and nobody arriving with an expectation you can meet. The pivot was into the sample browser space, where producers already know what to expect from one, and the job changed from explaining a new idea to beating known products at a known task. It is still being refined, because the feature set doesn’t map cleanly onto anything else on the market.

The industry that dismisses AI on sight

AI-first surfaces -> outcome-first vocabulary

The hostility showed up in distribution. Producers saw the app, or just the .ai domain, and wrote it off as slop before opening it. The response was to move the AI-first surfaces off the front, the assistant chat first among them, and to rewrite the interface vocabulary around outcomes instead of the machinery producing them. The AI stayed. It moved inside specific features where it does one named job, so nobody has to have an opinion about it to use the product.

Pricing took five shapes

Capped cloud -> per-directory -> per-sample -> unlimited -> capability tiers

It started subscription-only and cloud-only, every plan capped on samples and storage. Then deep tagging moved to per-directory pricing and the whole local experience became free. Then back to per-sample. Then unlimited, with a lifetime license added for producers who won’t rent software. What’s live now splits on capability: cloud sync and storage on the Pro plan, deep tagging unlimited so a producer working in bursts never hits a cap in the middle of a session, AI usage metered on the cheaper plan and unmetered above it. Also still being refined.

Four interfaces before one fit

Chat only -> standard navigation -> side panels -> dock layout

Every rebuild asked the same question: what does a producer in flow state tolerate? Chat-only was elegant and useless. A chat is asynchronous, you ask and then you wait, and a producer mid-idea will not wait. The result has to be there immediately or the idea is gone. Standard navigation worked and got in the way. Side panels came closer. What shipped is a dock layout, named persistent workspaces the producer arranges once, on the theory that the only workflow that fits everyone is the one each user builds for themselves.

None of that was guesswork. Sample Vault sells to consumers and is instrumented end to end with PostHog: funnels, feature adoption, and the exact step where a producer stalls in onboarding. Every interface revision above came out of watching real sessions. What the instrumentation cannot tell you is what to call the category, what to charge for it, or whether the letters AI on your own domain are costing you installs. Those calls are still moving, and they are the half of the job a fixed-scope build never reaches.

What a new engineer would find.

One-person codebases are where debt usually hides, because nobody else ever has to read them. This one is roughly 300,000 lines across TypeScript and Rust, and size on its own proves nothing. Here’s what makes it maintainable by one person:

~750
Test functions, TypeScript and Rust
4
Signed build targets
2
Regression labs, search and database
8
CI workflows

The CI builds signed artifacts for Windows, the Microsoft Store, and both macOS architectures. Offline license verification runs on ed25519 signatures bound to the device. Where upstream code needed patching, the fork says why: a vendored Rust crate carries written rationale for the two panics it fixes.

There’s no end-to-end suite yet. The unit and integration layers plus the two labs carry it for now.

How AI fits into this codebase.

Sample Vault is mostly one person’s commits, 1,825 of 1,938, written alongside a full client load, and AI is a large part of why that’s possible. The rules live in a 1,122-line engineering handbook at the repo root, the file every agent reads first, down to vocabulary (“Deep tagged, never Described”) and a section titled “read before touching the pipeline.” Ten custom skills teach the tools recurring jobs: changelogs, pricing rules, docs updates. The CLAP tagging infrastructure started life as an agent’s pull request, and the review it got was the ordinary kind. Even the analytics run this way: a PostHog setup triages errors and session replays on its own and can open a fix PR against the repo, reviewed like any other change. Underneath sits the same structural rule as everywhere we work: typed end to end, so invented code fails the compiler.

The client-side version of this discipline is on the Systellar case study. Different tools, same review rule.

Where it stands.

The largest single library Sample Vault handles is about 3.15 million samples, which is what “gigabyte-scale sync” means in practice. Among the users are working professional producers and music production schools that teach with it. The product earns revenue on three plans plus lifetime licenses, and it has settled into maintenance: releases go out when something is worth shipping, on a codebase built to keep that cheap.

1,032
Registered users
25M+
Samples under management
21M+
Samples analyzed
~38k
Median user library

Why this page is on the site.

This is the page the rest of the site leans on. When we tell a client we’ve sat where they sit, this is what we mean. Wojciech still maintains it himself. Most of his building time goes to client work now.

If you’re the founder with the domain, the technical audit is where engagements start: €4,900, fixed scope, report in 7 business days. And the client-side version of this story is Systellar’s.

Tell us about
your domain.

Tell us what you’re building and what you know about your field that nobody else does. We read every message and usually reply within a day.