All work

Alpha · Desktop

VOID

My local-first desktop workspace for typing practice, audio-reactive visuals, small games and local conversation, with a shared interface built around black surfaces and glacial light.

My roleIndependent product development
Built withTauri, React, TypeScript, Rust, Base UI, Zustand, Vite, Tailwind CSS, Three.js
The problem
Bring separate tools and experiments into one coherent local workspace.
My contribution
I built the desktop shell, shared controls, module interactions and update flow.
The result
Desktop alpha with a shared visual foundation, local tools and confirmation-based updates.
VOID interface
Open full-size image

I built VOID to give small desktop tools and experiments a shared home. Typing practice, an audio-reactive particle field, a stacking game and local conversation live in the same Tauri application, with common navigation and local persistence.

A shared identity without identical modules

The latest visual foundation brings VOID closer to VOID Mind: black surfaces, glacial-white actions, Urbanist headings and Barlow text. I kept the original mark and replaced the old configurable monitor effects with a fixed visual language.

Home presents the modules as simple destinations. A custom titlebar, collapsible sidebar and searchable command dialog handle navigation. Words dominate Typing, the particle field dominates Orbit, and the board remains central in Stacker.

Reusable controls, specific interactions

I composed shared controls with Base UI for fields, selects, sliders, popovers and dialogs. Portalled menus, consistent focus and keyboard behavior give the modules a common interaction vocabulary.

Those primitives still need to respect the task. Closing a Typing selector returns focus to the native keystroke input. Stacker ignores game commands while a form or dialog is active. Orbit keeps its settings in an anchored popover, with microphone feedback alongside the control that requests it.

Desktop and local state

React and TypeScript handle the interface, Zustand manages application state, and Rust provides the native boundary through Tauri. Three.js renders Orbit, with a Canvas fallback. Preferences and module data stay local, with backup and import controls.

The embedded Mind connects to a local llama.cpp server. It remains distinct from VOID Mind, the standalone environment for conversations, workspaces and connected providers.

Updates under user control

The distribution pipeline builds Windows and Linux packages with checksums and updater signatures. The app checks its official feed at startup and hourly, with a manual-only option in Settings. An update dialog explains the restart, asks for confirmation and shows download progress.

VOID remains in alpha. My current focus is carrying the shared foundation into the details of each module while preserving its behavior.

Explore more work Get in touch