The browser tab is the wrong surface for serious work. When users spend eight hours a day in a tool, that tool deserves a real desktop app — one that opens at login, integrates with the system tray, owns the keyboard shortcut, runs offline, and stores data locally without depending on a wifi signal. We built Jarvis Life OS to prove what is possible: a true Miro-style canvas app with 14 production views, encrypted local storage, IPFS file pinning, Twilio SMS, IMAP email, and Supabase sync — all shipping to Mac, Windows, and Linux from a single Electron + React codebase.
There is a category of tool where a web app is simply the wrong answer. Productivity tools, life dashboards, internal admin platforms, AI agents, command palettes, and anything that needs to be invoked dozens of times per day all benefit from a real desktop app. The friction math is decisive.
A web app requires the user to open a browser, find or remember the tab, wait for it to load, deal with the address bar and bookmark bar pulling focus, and accept that closing the browser closes the tool. A desktop app installs once, opens at login, lives in the system tray, owns a global keyboard shortcut, runs in its own dedicated window, and persists across browser quits. For tools used eight hours a day, the second model wins by an order of magnitude.
Beyond friction, desktop apps have access to capabilities the browser cannot reach: a local SQLite database, OS-level credentials via Keychain or DPAPI, full filesystem access, native shell command execution, system tray integration, global keyboard shortcuts, and direct access to native protocols like IMAP and SMTP. Jarvis Life OS uses every one of those capabilities, and it is what makes the app feel like a permanent extension of the operating system rather than a website that happens to render full-screen.
Every custom Electron desktop app we ship runs on a battle-tested stack tuned for performance, code-signing requirements, and long-term maintainability. Here is exactly what powers Jarvis Life OS:
The split is classic Electron-best-practice: a main process written in TypeScript that owns the OS-level work (window management, IPC, encryption, native modules, scheduled tasks via node-cron, IMAP polling, SMS sending), and a renderer process built in React 18 + Vite + Tailwind that handles the UI. The two communicate through a strict, typed IPC bridge defined in preload.ts — no nodeIntegration in the renderer, which is the security baseline every modern Electron app should ship with.
// Strict IPC channel registry — no ad-hoc invokes
export const CHANNELS = {
SEARCH_QUERY: 'search:query',
EMAIL_FETCH: 'email:fetch',
TWILIO_SEND_SMS: 'twilio:send',
CRYPTO_ENCRYPT: 'crypto:encrypt',
WORKFLOW_RUN: 'workflow:run',
} as const;
// Renderer side — typed wrapper
async function sendSMS(to: string, body: string) {
return window.api.invoke(CHANNELS.TWILIO_SEND_SMS, { to, body });
}
For state, we use Zustand with 20 dedicated stores (one per domain — calendar, contacts, email, finance, goals, habits, invoices, journal, marketing, notes, projects, search, settings, tasks, timer, workflows). For UI components, the renderer ships its own design system in Tailwind plus reusable widgets like CommandPalette, FocusTimer, GlobalSearch, InboxPanel, KanbanBoard, QuickCapture, QuickLaunch, Sidebar, StatusBar, Terminal (xterm.js powered), and WelcomeScreen.
Jarvis is positioned as a "personal life operating system" — a single dashboard for everything someone with a complex life manages. Every view shares the same Zustand store layer, the same SQLite local cache, and the same Supabase sync engine.
React Flow powered infinite canvas with custom node types — sticky notes, link cards, embedded media, and freehand connections. Drag, zoom, group, link.
Daily, weekly, and monthly views with drag-to-reschedule, project-linked events, and bidirectional sync to Google Calendar via API.
Task list plus drag-and-drop Kanban board with custom workflow stages, due-date filters, and project linking.
Native IMAP connection via imapflow — full inbox, filters, and reply UI without leaving the app or routing through Gmail's web client.
Personal CRM with custom fields, interaction history, and a "follow-up due" intelligence panel that surfaces relationships getting cold.
Branded PDF invoice generation via pdfkit, expense tracking, recurring invoice schedules, and a finance dashboard with Recharts visualizations.
Quarterly OKR tracker, habit grid, and streak visualization with date-fns powered logic for "show me everything I missed last week."
TipTap rich-text editor with markdown shortcuts, daily journal prompts, and a tag system that ties notes to projects, contacts, and tasks.
Campaign tracker, lead pipeline, content calendar, and a unified outbound view across email, SMS (via Twilio), and social.
Login flow with Supabase Auth, plus settings panels for profile, integrations, theme, and the workflow automation builder.
Local-first desktop apps that hold real data — emails, contacts, financial info — have to take encryption seriously. Jarvis Life OS includes an electron/crypto/ layer with two modules:
encrypt.ts wraps Node's built-in crypto module to AES-256-GCM encrypt sensitive blobs (Twilio tokens, Supabase service keys, IMAP passwords) before they ever land on disk. keychain.ts uses the native OS credential store — Keychain on macOS, Credential Manager on Windows, libsecret on Linux — to store the master encryption key. The result: even if a user's SQLite file is copied off the machine, the contents are unreadable without the OS-level keychain entry tied to that user.
The model: sensitive secrets never live in plaintext in the database, never live in plaintext in environment variables, and never get sent to a third-party server. The OS keychain is the trust root, and every encrypted blob is round-tripped through it.
The most interesting feature in Jarvis is the electron/workflows/ module — a custom workflow engine with three files: actions.ts, defaults.ts, and engine.ts. It is essentially a personal Zapier built right into the desktop app, with no external service dependency.
"On schedule" via node-cron, "On email match" via imapflow polling, "On task complete," "On manual run" — extensible trigger system.
Send SMS via Twilio, send email via SMTP, create task, create note, generate invoice PDF, post to webhook — chainable action steps.
Workflow steps support branching ("if amount > $1000, also notify accountant") and templating from the trigger payload.
Ships with templates: "Daily morning briefing," "Invoice paid follow-up," "Weekly journal prompt," "Lead nurture cadence."
Custom Electron desktop apps make sense for three buyer profiles:
1. Internal tool buyers. Mid-sized companies that have outgrown a spreadsheet but don't want to pay for Salesforce. Field teams that need a dashboard with offline support. Operations leaders who want a custom command-center app for their manufacturing line, dispatch desk, or admin team. Desktop apps install on company devices, integrate with the system tray, and own a permanent slot in the workflow.
2. AI-augmented productivity products. The rising category of Cursor-style and Raycast-style desktop apps that combine local data, system shortcuts, and AI capabilities into a workflow surface. Electron is the dominant technology choice (Cursor, GitHub Copilot, Loom, Notion, Slack, VS Code, Linear desktop, ChatGPT desktop — all Electron).
3. Life-OS / personal-CRM founders. Solo SaaS founders building the next Notion, Roam, Mem, or Obsidian competitor. A custom Electron app gives them a real desktop product to ship while their web team handles cross-platform reach.
Shipping a desktop app means handling the parts most engineers underestimate:
One Electron + React codebase compiled to all three desktop platforms. Single team, single budget, one shared design system.
better-sqlite3 for blazing-fast local storage with Supabase or Postgres syncing in the background — works offline, syncs when online.
AES-256-GCM at rest, OS keychain key storage, and zero-plaintext-secret architecture for any app touching financial or PII data.
System tray integration, global keyboard shortcuts (Cmd+Space style invocation), and quick-capture overlays.
React Flow powered infinite canvas, drawing tools, and node-based editors for whiteboard-style or Miro-style products.
OpenAI, Anthropic, or local Ollama integration for AI assistants, agents, and command-palette LLM tools.
Built-in trigger/action automation system — node-cron schedules, IMAP triggers, webhook actions, and chained logic.
Code-signed installers, electron-updater channel, and CI-driven release builds for one-click updates.
Internal links for deeper reading: explore all our app development services, view past desktop projects, see current project tiers, or read the related piece on data-intensive property platforms.
main push produces signed installers automatically.Whether it's an internal tool, a life-OS, an AI command center, or a Miro-style canvas product — we build custom Electron desktop apps that ship to Mac, Windows, and Linux. DM HUNT or call (320) 360-8285 to scope your build.