Offline-first invoicing app for Test Vendor, built by Bongbetic. - Tauri v2 (Rust) + React/TypeScript + IBM Carbon Design System UI - SQLite (rusqlite) storage with a persistent invoice-number series - Guided first-run setup, pre-filled vendor/bank details - Fixed-amount or rate x quantity line items (per sec/min/hour/session/unit) - GST as CGST+SGST or IGST, Indian amount-in-words - Optional signature, with a computer-generated note as fallback - Print-ready PDF export via @react-pdf/renderer - Windows cross-compile via cargo-xwin (NSIS installer) Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
96 lines
4.0 KiB
Markdown
96 lines
4.0 KiB
Markdown
# Voiced
|
||
|
||
An offline-first desktop invoicing app for **Test Vendor**, built by **Bongbetic**.
|
||
|
||
Voiced turns a few details into a clean, GST-ready PDF invoice. It keeps a running
|
||
invoice-number series in a local database, remembers your vendor and bank details, and
|
||
exports print-ready PDFs — no account, no network required.
|
||
|
||
## Features
|
||
|
||
- **Automatic invoice numbering** — a persistent series (e.g. `INV/2026-001`) that keeps
|
||
counting up, with a one-click "start a new series" that resets the counter.
|
||
- **Guided first-run setup** — your name, address, contact, PAN, GSTIN, logo, signature and
|
||
bank details, pre-filled from your existing invoice and editable at any time.
|
||
- **Two line-item modes** — a fixed amount, or a rate × quantity where the unit can be per
|
||
second / minute / hour / session / unit (e.g. 10 sessions × ₹2,500).
|
||
- **GST support** — toggle taxes on/off and split as **CGST + SGST** (within state) or
|
||
**IGST** (inter-state), with live totals and Indian amount-in-words.
|
||
- **Signatures** — attach a PNG/JPEG per invoice, or omit it and the invoice notes that it is
|
||
computer-generated and needs no signature.
|
||
- **PDF export** — a print-ready A4 invoice styled to match the original `format.pdf`.
|
||
- **Saved clients**, invoice history with re-export, and light/dark (Carbon g10/g100) themes.
|
||
- **Input validation** for PAN, IFSC, GSTIN, email and phone.
|
||
|
||
## Tech stack
|
||
|
||
| Layer | Choice |
|
||
| --------- | ------------------------------------------------------------------- |
|
||
| Shell | [Tauri v2](https://v2.tauri.app/) (Rust core, WebView2 on Windows) |
|
||
| UI | React + TypeScript + [IBM Carbon Design System](https://carbondesignsystem.com/) (`@carbon/react`) |
|
||
| Fonts | IBM Plex, self-hosted (works offline) |
|
||
| Storage | SQLite via `rusqlite` (bundled) |
|
||
| PDF | `@react-pdf/renderer` with bundled IBM Plex |
|
||
|
||
## Prerequisites
|
||
|
||
- **Node.js 20+** and npm
|
||
- **Rust** (stable) via [rustup](https://rustup.rs/)
|
||
- Linux dev only: WebKitGTK 4.1, libsoup3, GTK3, librsvg, `pkg-config`, `clang`/`llvm`/`lld`
|
||
|
||
## Development
|
||
|
||
```bash
|
||
npm install
|
||
npm run app:dev # launches the desktop app with hot reload
|
||
```
|
||
|
||
Other scripts:
|
||
|
||
```bash
|
||
npm run build # type-check + build the web frontend
|
||
npm run app:build # package the app for the current platform
|
||
```
|
||
|
||
## Building for Windows (cross-compile from Linux/macOS)
|
||
|
||
Tauri only supports the MSVC target. Cross-compiling uses [`cargo-xwin`](https://github.com/rust-cross/cargo-xwin)
|
||
and produces an **NSIS installer** plus a portable `.exe`. A `.msi` still requires a real
|
||
Windows host.
|
||
|
||
```bash
|
||
# one-time setup
|
||
rustup target add x86_64-pc-windows-msvc
|
||
cargo install --locked cargo-xwin
|
||
# plus NSIS (makensis), LLVM/LLD and clang on the host
|
||
|
||
npm run app:build:windows
|
||
```
|
||
|
||
Output lands in `src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/` and the
|
||
portable binary in the sibling `release/` folder.
|
||
|
||
## Where data lives
|
||
|
||
| What | Location |
|
||
| ------------------- | ------------------------------------------------------------- |
|
||
| Database | `<app-data>/voiced.db` — on Windows `%APPDATA%\com.bongbetic.voiced\` |
|
||
| Logos & signatures | `<app-data>/assets/` |
|
||
|
||
## Project layout
|
||
|
||
```
|
||
src/ React + Carbon frontend
|
||
views/ Onboarding · NewInvoice · InvoiceHistory · SeriesSettings · AppSettings
|
||
components/ AppShell · InvoicePreview · ImagePicker
|
||
pdf/ InvoiceDocument (react-pdf template)
|
||
lib/ api · types · invoice · numberToWords · validators · format · pdf
|
||
src-tauri/ Rust backend (Tauri commands, SQLite schema, asset store)
|
||
public/brand/ Bongbetic + vendor brand assets
|
||
public/fonts/ IBM Plex (woff/woff2)
|
||
```
|
||
|
||
## Ownership
|
||
|
||
© Bongbetic. All rights reserved. This is a private application.
|