

A desktop (Windows) application for freelancer that lets you manage and track all your current commissions.
Offline-first โข Privacy-focused โข No Accounts โข No Subscriptions โข Zero Cloud Lock-in
Features โข Architecture โข Quick Start โข Building & Packaging โข Documentation
FreelanceDesk is a fast, lightweight, and offline-first desktop application designed specifically for digital artists, writers, designers, developers, photographers, and independent service providers.
Rather than burdening solo creators with bloated corporate CRM complexity, monthly SaaS subscriptions, or invasive cloud tracking, FreelanceDesk feels like a distilled digital ledger: personal, tactile, meticulously organized, and completely local to your workstation.
email, phone, contact_handle, address, notes) is encrypted with AES-256-GCM. The 256-bit vault key is sealed via native Windows DPAPI (CryptProtectData), providing transparent local unlocks without daily master-password fatigue while ensuring the raw .db file remains unreadable ciphertext if copied to another machine.%APPDATA%/com.carlodandan.freelancedesk/). You can inspect, copy, backup, or restore them anytime..fdesk): Export encrypted portable archives sealed with Argon2id and AES-256-GCM that are completely safe for cloud storage (Google Drive, OneDrive, Dropbox) or USB migration, with automatic re-keying into host machine DPAPI upon restore.email, phone, contact_handle, address, notes) are encrypted with AES-256-GCM. Decryption occurs transparently in memory via the Windows DPAPI vault key.Inquiry โ Quoted โ Confirmed โ In Progress โ For Review โ Revision โ Completed.INV-2026-001).RCP-2026-001) with reference numbers and remaining job balance indicators.Ctrl + K)Ctrl + K.ArrowUp, ArrowDown, Enter, Escape)..fdesk).fdesk): Export an encrypted portable container protected by Argon2id key derivation and AES-256-GCM. Safe to store on Google Drive, OneDrive, Dropbox, or external drives..fdesk file on a different computer decrypts the database, verifies schema integrity, and automatically seals all client records with the destination workstation's native Windows DPAPI key..db): Option to create unencrypted local SQLite snapshots with SQLite Online Backup API and WAL checkpoint flushing (PRAGMA wal_checkpoint(TRUNCATE)).PRAGMA integrity_check validation.#FAF8F5) and bronze gold accents (#854D0E).@tauri-apps/plugin-updater.CryptProtectData via crypt32.dll).enc:v1:<base64>).graph TD
subgraph UI ["Desktop UI (React 19 + TypeScript)"]
Components["Accessible UI Primitives & Features"]
DesignTokens["CSS Variable Tokens (3 Themes)"]
TauriAPI["Tauri IPC Client (invoke)"]
PDFService["jsPDF Vector Engine"]
end
subgraph Core ["Desktop Shell (Tauri v2 + Rust)"]
IPCBridge["Tauri IPC Command Router (34 Commands)"]
AppState["Shared Thread-Safe State (Mutex<Connection>)"]
Storage["StorageManager (Sandbox Folders)"]
SecurityVault["Security Module (DPAPI + AES-256-GCM + Argon2id)"]
end
subgraph Data ["Local Storage Engine"]
SQLite[("Embedded SQLite 3 (WAL Mode)<br/>enc:v1: Client PII")]
FS["Attachments, Invoices, Receipts"]
Backups["Backups (.fdesk encrypted / .db raw)"]
end
Components --> TauriAPI
Components --> PDFService
TauriAPI --> IPCBridge
IPCBridge --> AppState
IPCBridge --> Storage
AppState --> SecurityVault
SecurityVault --> SQLite
SecurityVault --> Backups
Storage --> FS
| Layer | Technology | Details |
|---|---|---|
| Desktop Shell | Tauri v2 | Ultra-lean native WebView2 wrapper on Windows with tiny memory footprint |
| Backend / Native Engine | Rust (Edition 2021) | Safe, high-performance command handlers, Mutex state, and direct OS integrations |
| Security & Cryptography | aes-gcm 0.10 โข argon2 0.5 โข Windows DPAPI |
Transparent AES-256-GCM field encryption, OS-bound vault key via crypt32.dll, Argon2id .fdesk portable archives |
| Database | rusqlite 0.33 + SQLite 3 | Bundled SQLite engine with Write-Ahead Logging (WAL), strict foreign keys, and indexes |
| Frontend Framework | React 19 | Modern functional component model with concurrent rendering |
| Language | TypeScript 6.0 | Strict type checking with comprehensive entity and settings schemas |
| Styling | Tailwind CSS v4 | High-performance CSS compiler with three-layer semantic CSS variable design tokens |
| Icons | Lucide React | Clean, consistent vector iconography |
| Document Export | jsPDF | High-resolution client-side vector PDF generation with custom typography handling |
| Testing Suite | Vitest + RTL | 17 test suites, 116 unit/integration tests with jsdom emulation |
| Backend Test Suite | cargo test |
19 unit tests covering DPAPI, AES-256-GCM, migrations, SQLite integrity, and .fdesk roundtrips |
To develop or build FreelanceDesk locally on Windows, ensure you have the following installed:
v20.0.0 or higher (Download Node.js)v9.0.0 or higher (Install via corepack enable or npm i -g pnpm)Clone the repository and install frontend dependencies:
git clone https://github.com/carlodandan/freelancedesk.git
cd freelancedesk
pnpm install
Spawns the Vite dev server and launches the native Windows Tauri desktop window:
pnpm tauri dev
Launches Vite directly at http://localhost:1420:
pnpm dev
| Command | Purpose |
|---|---|
pnpm dev |
Start the Vite frontend development server |
pnpm build |
Run TypeScript compiler (tsc) and Vite production bundle |
pnpm preview |
Locally preview the built production frontend |
pnpm test |
Run Vitest in interactive watch mode |
pnpm test:run |
Run the complete Vitest test suite once (CI mode) |
pnpm test:coverage |
Run Vitest with code coverage reporting |
pnpm typecheck |
Perform strict TypeScript type checking without emitting files |
pnpm format:check |
Verify formatting across TSX, CSS, and HTML using Prettier |
pnpm format:fix |
Format code automatically using Prettier |
pnpm tauri dev |
Launch the full desktop application in development mode |
pnpm tauri build |
Compile the optimized desktop .exe and .msi installers |
To compile a standalone Windows installer and portable executable:
pnpm tauri build
This will:
tsc && vite build to compile optimized frontend assets into dist/.cargo build --release with Link-Time Optimization (lto = true), symbol stripping (strip = true), and level 3 optimizations.src-tauri/target/release/bundle/msi/FreelanceDesk_0.0.2_x64_en-US.msi
src-tauri/target/release/bundle/nsis/FreelanceDesk_0.0.2_x64-setup.exe
FreelanceDesk maintains an automated test suite across both the frontend and native layers:
pnpm test:run
ClientsView, InvoicesView, CommissionsView, PaymentsView, GlobalSearchModal)currency.ts)pdf.ts)validation.ts)reports.ts)useUpdater.ts, UpdateWatcher.tsx, UpdateCheck.tsx)cargo test --manifest-path src-tauri/Cargo.toml
CryptProtectData / CryptUnprotectData).fdesk encrypted backup payload generation, Argon2id key derivation, and corrupted/tampered payload rejectionfreelancedesk/
โโโ .agents/ # Agentic developer skills & workflow specifications
โโโ docs/ # Comprehensive technical documentation suite
โ โโโ ARCHITECTURE.md # System design, C4 diagrams, IPC & security
โ โโโ API_REFERENCE.md # Tauri IPC command documentation (34 commands)
โ โโโ DATABASE_SCHEMA.md # SQLite tables, ERD, and migration guide
โ โโโ DEVELOPMENT_GUIDE.md # Developer setup, testing, and contribution guide
โโโ public/ # Static public assets & brand favicon
โโโ src/ # React 19 Frontend Application
โ โโโ assets/ # Brand illustrations & logos
โ โโโ components/ # Reusable UI primitives (Buttons, Modals, Toasts, Updater)
โ โโโ features/ # Feature-sliced modules (Clients, Invoices, Payments, etc.)
โ โโโ hooks/ # React hooks (updater lifecycle, toasts)
โ โโโ services/ # IPC client, PDF engine, currency & validation utilities
โ โโโ styles/ # Global CSS and three-layer theme tokens
โ โโโ test/ # Vitest setup & DOM mocks
โ โโโ types/ # TypeScript domain models and interfaces
โโโ src-tauri/ # Rust Native Desktop Backend
โ โโโ src/
โ โ โโโ commands/ # 34 modular IPC command handlers
โ โ โโโ database/ # SQLite schema, migration manager & tests
โ โ โโโ models/ # Rust domain structs (Serde-serializable)
โ โ โโโ security/ # Native DPAPI, AES-256-GCM & Argon2id crypto engine
โ โ โ โโโ crypto.rs # Field encryption & .fdesk payload packaging
โ โ โ โโโ dpapi.rs # Direct crypt32.dll Windows DPAPI FFI
โ โ โ โโโ mod.rs # Vault key lifecycle & settings persistence
โ โ โโโ services/ # StorageManager & local sandboxing
โ โ โโโ lib.rs # Tauri builder & AppState configuration
โ โ โโโ main.rs # Windows entry point
โ โโโ Cargo.toml # Rust crate dependencies & release profiles
โ โโโ tauri.conf.json # Tauri v2 window & build configuration
โโโ package.json # Frontend dependencies & npm scripts
โโโ tsconfig.json # TypeScript strict configuration
โโโ vite.config.ts # Vite + Tailwind + Vitest configuration
All data created within FreelanceDesk stays strictly on your local workstation.
To protect your clients' sensitive personal information:
email, phone, contact_handle, address, and notes are stored in SQLite as AES-256-GCM ciphertexts with 96-bit random nonces (enc:v1:<base64>).CryptProtectData in crypt32.dll) and stored in the settings table.freelance.db file to another computer, all sensitive client details remain unreadable ciphertext..fdesk) vs. Local Snapshots (.db)In Settings โ Local Database & Storage โ Backup & Disaster Recovery:
| Backup Type | Format | Encryption | Use Case |
|---|---|---|---|
| Portable Backup | .fdesk |
Argon2id + AES-256-GCM | Recommended: Cl |
No updates yet.
Building a dev tool or hiring developers? Get seen here. Become our Sponsor
Building a dev tool or hiring developers? Get seen here. Become our Sponsor