Text2Store

Home

Developer notes

The honest engineering record of building Text2Store: crashes, blank pages, and process-lifecycle archaeology included.

These notes are the engineering record of building Text2Store: what actually broke, what the fixes cost, and what a small team plus modern tooling can genuinely ship. Written for developers; the product itself lives on the main site.

The setup

Why this app exists twice, and the workflow behind the rebuild.

  1. Reviving an app I lost Start here The 2017 Electron original, reverse engineering my own binary off a download mirror, and the Tauri v2 rewrite.
  2. One human, one AI pair The workflow behind the commits: decision records, adversarial review, external validators, and the failures included on purpose.

Getting the messages out

From the USB handshake to a decrypted, fully parsed message database.

  1. Talking to an iPhone usbmuxd, building respectfully on pymobiledevice3, and the two release incidents that turned sidecar packaging into a discipline.
  2. Unwrapping an encrypted backup The keybag key ladder, why we wrote it from the spec instead of porting GPL code, and the monomorphization trap that made every unlock take 58 seconds.
  3. Reading Apple's message database sms.db archaeology, WhatsApp's parallel world, and the census rule: a sample tells you what is common; a census tells you what is true.

Living with the archive

Search, storage, and summaries designed to add nothing and leak nothing.

  1. Search without changing the answer An FTS5 index allowed only to narrow, the parity test that proves it, and where a plaintext index may live beside an encrypted archive.
  2. Two archives, the space of one The dedup we refused to ship, APFS clones, and proving copy-on-write with F_LOG2PHYS before printing a single storage number.
  3. AI summaries without surveillance We shipped on-device Apple Intelligence and bring-your-own-key, then killed both in days. Why the hold-nothing relay with contractual zero retention won.
  4. An answer you can check RAG over a decade of private messages: the embedding model moved onto the user's machine, every answer shows its receipts, and the cloud pipeline we built first is the best code we ever deleted.

Proof, at scale

Exports that survive an 84,000-message thread and hold up to scrutiny.

  1. Proving nothing changed RFC 3161 timestamps without our server in the loop, a chain verifier DigiCert made honest, the LibreSSL surprise, and the claims we refuse to make.
  2. The 84,000-message thread How webview PDF export fails at scale and the chunk-gate-merge architecture that fixed it, with the PDF internals Acrobat enforced.
  3. Killing a WebKit process on purpose Allocator high-water marks, a ten-second suspension policy, a process reuse cache, and the disposable window that ends the process because nothing else reclaims it.

Shipping it

Licenses, storefronts, and the stack that costs almost nothing to run.

  1. Email is the license What a merchant of record does, the arithmetic behind choosing one, and the Ed25519 entitlement protocol that replaces license keys with an email address.
  2. The license decides the architecture GPL forced a process boundary, LGPL forced us to compile ffmpeg ourselves, and the popular prebuilt binary that self-reports as not legally redistributable.
  3. Getting into the Microsoft Store The MSIX sandbox, one USB daemon it cannot install, a keyword that failed certification, and why we then retired our own installer.
  4. The stack that costs almost nothing Cloudflare, Resend, DigiCert's public timestamp authority, and Gemini: the gratitude ledger, with clear-eyed caveats.

That is the story so far; new chapters land as the work earns them.

Questions, corrections, or war stories of your own: hello@text2store.com.