| Status | |
|---|---|
| CI | |
| Security | |
| Project |
A frictionless macOS capture inbox built with Svelte 5 and Tauri 2
The app lives in the macOS menubar as an Accessory app - no system Dock icon by default - and only surfaces in Cmd+Tab while the Inbox window is open. Captures land in a single chronological Inbox with per-item read state. Built entirely with Claude Code and human review.
Warning
Early stage project. APIs, schemas, and behavior may change without notice. Not ready for production use. Expect bugs, breaking changes, and missing features.
Seven interaction surfaces. Details in docs/surfaces.md.
| Surface | Description |
|---|---|
| Composer | Borderless popover for free-text notes and voice recordings |
| Inbox | Split-pane main window: capture list + detail pane |
| Archive | Routed captures filtered by Destination |
| Recording | Dedicated recording UI with VU meters and live transcript |
| Dock | 96x96 always-on-top widget at bottom-left. Click, drop, badge |
| Tray | Menubar item (brain-circuit glyph). Open Composer/Inbox, Quit |
| Settings | Transcription config, update channels, destinations |
Six kinds: Note, Clip, Link, Shot, File, Transcription.
Full table and source modules in docs/capture-kinds.md.
Full audio pipeline: mic + system audio capture, high-pass filter, denoising, loudness normalization, VAD (voice activity detection), resampling, and local Whisper transcription. Exports to M4A.
- Wikilink mentions -
[[Name]]autocomplete in Composer from a configured source folder; person-based filtering in Inbox/Archive - Destinations - named routing targets with color swatches; captures can be routed to a Destination and browsed in Archive
- Kokobrain - deep-link forwarding via
kokobrain://captureURI scheme (ADR-0012) - Drag & drop - Finder file drops onto Dock widget auto-detect Shot vs File
- Update channels - stable/nightly in-app updater with runtime channel switching
| Shortcut | Action |
|---|---|
Ctrl+Alt+Cmd+Space |
Open / focus the Composer |
Ctrl+Alt+Cmd+C |
Capture from clipboard |
Ctrl+Alt+Cmd+I |
Open / focus the Inbox |
Ctrl+Alt+Cmd+A |
Open / focus the Archive |
Ctrl+Alt+Cmd+R |
Open / focus the Recording |
Svelte 5 + SvelteKit + TypeScript | Tauri 2 (Rust) | SQLite | shadcn-svelte (Tailwind v4)
Requirements: macOS (Apple Silicon or Intel), Rust toolchain (rustup), Node.js + pnpm.
pnpm install
pnpm tauri devVite serves the frontend on localhost:1420; if the port is held by a previous dev process, kill it (pkill -9 -f quick-capture) or run on a different port.
pnpm tauri buildProduces src-tauri/target/release/bundle/macos/quick-capture.app and a .dmg under the same directory.
pnpm test # Vitest (Svelte components + routes)
pnpm check # svelte-check (types)
cargo test --manifest-path src-tauri/Cargo.toml # Rust unit + integration
cargo check --manifest-path src-tauri/Cargo.toml # Rust typecheckEvery slice must leave all four green before commit (see ADR-0006).
Icon generation:
cargo run --manifest-path src-tauri/Cargo.toml --bin gen_icon
pnpm tauri icon src-tauri/icons/source-1024.pngdev_list - prints recent captures from SQLite:
cd src-tauri
cargo run --bin dev_list -- --limit 5Output: <short-ulid> <kind> <created_at> <payload preview>.
Flags: --limit N (default 20), --db <path>.
| Document | Description | |
|---|---|---|
| 📖 | Domain Glossary | Core concepts and terminology |
| 🖥 | Surfaces | Surface behavior, keyboard shortcuts, read state |
| 📎 | Capture Kinds | Kind payloads, detection, global shortcuts |
| ✅ | Verification Checklist | Manual smoke test |
| 🏛 | ADRs | Architectural decisions |
| 📝 | Scratch | Active PRDs and handoff docs |