Fig. 02 — My product · SaaS
Probook
Invoicing, stock and point of sale for small businesses. First a desktop app, now a SaaS.
- Role
- Maker · sole developer
- Period
- 2026 — present

By the numbers
- commits (desktop + SaaS)
- 297
- Prisma data models
- 69
- API routes
- 214
- unit and end-to-end tests
- 690+
§ 01
The product
Probook is an all-in-one management tool for freelancers and small businesses: clients, a product catalogue, quotes that turn into invoices, delivery notes, credit notes, payments, expenses, suppliers and purchase orders, stock across several locations, and a point-of-sale mode for in-store sales.
The main market is Algeria: dinars, local tax identifiers (NIF, RC, NIS), 0/9/19% VAT, stamp duty. A French tax profile exists too. The interface is in French, English and Arabic. Probook is in production with its first customers.
§ 02
From desktop app to SaaS
Probook started in January 2026 as a Tauri desktop app (React + Rust): a database, multiple users with roles, a point of sale with a thermal printer, an offline queue and a signed licence system (Ed25519).
In March 2026 I rewrote it as a Next.js SaaS. The features were ported, then the SaaS layer was added: trials, subscriptions, à-la-carte plans, a platform admin panel. One trace of its origins remains: ~180 Tauri command names mapped to REST routes.
§ 03
What I built
- The full document flow: quote → invoice → delivery note → credit note, partial payments, client statements.
- Multi-location stock with transfers, a per-location ledger and weighted-average cost.
- Point of sale: sessions, split payments, refunds, receipt printing (WebUSB), offline sales.
- Branded PDFs with embedded fonts and amounts written out in words.
- Multi-tenant with roles, per-action permissions and two-factor authentication.
- Encrypted backups, CSV and Excel import / export, GDPR export and deletion.
- Subscriptions, trials, plan-based feature gating and a platform admin panel.
§ 04
Technical challenges
- Algerian stamp duty, implemented from the law itself (Stamp Code, 2025 finance law) and checked against the ministry's official example: 35,000 DA → 525 DA. Only the cash part is taxed, recomputed on the server.
- Money correctness: two audits led to decimal amounts, atomic invoice numbering (required in Algeria), idempotency keys and row locks on stock.
- Arabic PDFs: the default font had no Arabic glyphs. I embedded IBM Plex Sans Arabic, with a test that checks fonts per language.
- Offline: three independent mechanisms replaced by a single sync queue with per-item conflict resolution.
- Tests as documentation: Playwright films the video guide in three languages, and twelve CI "barriers" check translation parity, no overflow at 390 px and dark-mode contrast.
§ 05
Stack
- Next.js 16
- React 19
- TypeScript
- PostgreSQL
- Supabase
- Prisma
- TanStack Query
- Zustand
- Zod
- React PDF
- Vitest
- Playwright
- Sentry
- Vercel
- Tauri
- Rust



Next project
TonightPass →A product to build, a contract, or just a question? Write to me, I reply quickly.
Let's work together