Every freelancer has experienced the 'airplane mode panic.' You’re sitting in a coffee shop with spotty Wi-Fi, the client is ready to sign, and your SaaS-based invoicing tool is stuck on a spinning loading wheel, failing to authenticate against a remote server. It’s a failure of architectural philosophy: why should your ability to generate a PDF depend on a server halfway across the world?
When we started building Vanza Invoices, we decided to stop treating the browser and mobile device as thin clients. We inverted the model. The device is the source of truth; the cloud is optional, or completely irrelevant.
The Death of the 'Sync-Everything' Middleware
Most modern apps rely on a 'sync-everything' middleware that pipes data to a central database before reflecting it back to the UI. This introduces latency, subscription overhead, and catastrophic failure points when the connection drops.
We moved to a local-first storage architecture utilizing IndexedDB, wrapped in a reactive persistence layer. By treating the local storage as the primary database, the app achieves sub-10ms read/write operations. When a user creates an invoice, the data lives exactly where it was typed—on the device.
Here is the stack logic we implemented:
- Persistence Layer: We leverage Dexie.js for a robust IndexedDB wrapper, allowing for complex queries without hitting a network request.
- State Synchronization: Instead of REST/GraphQL calls, the UI binds directly to the local database change listeners. If an invoice is updated, the view refreshes automatically.
- Asset Generation: PDFs are generated on-device using a worker thread to ensure the main UI thread remains buttery smooth during signature rendering and complex document assembly.
Solving the 'Zero-Middleman' PDF Problem
Generating a professional invoice typically happens on the server. You send JSON to an API, a server-side process (like Puppeteer or a specialized library) renders the PDF, and it’s piped back to you.
At Vanza, we stripped the middleman. By bringing the document engine to the client, we eliminated the need for a monthly SaaS subscription. There is no server cost to pass on to the user. We utilized specialized PDF generation primitives that execute natively in the browser/Capacitor environment. This allows for:
- Privacy by Default: Your financial data never leaves your device unless you explicitly export it.
- Instant Previews: Since we aren't waiting for a server round-trip, the document updates in real-time as you type.
- Offline Signature Capture: Using a canvas-based touch handler, we capture high-fidelity vector signatures that are embedded directly into the final PDF buffer via the browser’s internal file system API.
The Capacitor Advantage
We chose React and Capacitor to bridge the gap between web speed and native reliability. By shipping the application as a bundled binary, we bypass the browser's aggressive cache-clearing policies. Your invoices are stored in the app’s private container on your OS, effectively making them as durable as any native file.
For developers considering this route, the biggest hurdle isn't writing the code—it's managing the data schema migrations locally. Since you don't have a backend to migrate, your local database schema must be versioned within the app binary itself. We rely on a strict migration strategy triggered on initial app startup, ensuring that as we add new invoice fields, older data structures are upgraded seamlessly without loss.
Why We Built This
We built Vanza Invoices because the freelance economy is tired of paying rent for the privilege of creating a simple invoice. By leveraging local-first storage and offloading the computation to the hardware you already own, we’ve created a tool that lasts as long as your phone does, with zero dependency on our servers.
If you are a developer or a freelancer looking for a tool that respects your privacy and works without a signal, check out our implementation on the Google Play Store. It is a testament to what is possible when you stop building for the cloud and start building for the machine in your pocket.


