My Drawer
My Drawer is a powerful, local-first personal AI workspace designed to integrate deeply with your macOS workflow. It serves as a central hub for journaling, clipboard management, window organization, and intelligent web research.
This repository follows a monorepo layout that keeps the native drawer experience in desktop/ alongside a small marketing site in landing/.
Features
- π§ AI Chat: Chat with various LLMs (OpenAI, Anthropic, Google, Mistral, Groq, or Custom). Features rich markdown support, drag & drop attachments, and message history editing (Regenerate/Rollback).
- π Tasks & Notes: Built-in task manager and scratchpad to keep track of your daily to-dos and quick thoughts without leaving the context.
- π Clipboard Manager: Automatically tracks your clipboard history. Search, pin, and organize your clips locally.
- π Web Research: Intelligent web scraping that fetches URL content and feeds it into an LLM for instant summarization, analysis, or Q&A.
- β‘ App Shortcuts: Quick access to your favorite applications.
- πͺ Window Layouts: Manage and organize your window arrangements efficiently.
- π¨ Island UI: A beautiful, transparent "Island" interface that sits unobtrusively on your desktop, with native macOS blur and dark mode support.
- π Local & Private: Your data stays on your machine. API keys are stored securely.
Tech Stack
Frontend
- Framework: React (Vite)
- Language: TypeScript
- Runtime: Bun
- Styling: Tailwind CSS, shadcn/ui
- Animations: Framer Motion
- State Management: Zustand (with persistence)
- AI Integration: Vercel AI SDK (
ai),react-markdown
Backend (Core - macOS)
- Runtime: Tauri v2 (Rust)
- OS Integration:
cocoa/objccrates for macOS specific window handling. - Scraping:
reqwest+html2textfor robust, cleaner-friendly content extraction.
Architecture
desktop/contains the Tauri frontend (desktop/src) and Rust backend (desktop/src-tauri). The existingscripts/helpers (release automation, version bumps, etc.) live inside this workspace so those commands continue to run from there.landing/is a standalone Vite + React marketing site that introduces My Drawer, showcases key features, and delivers a CTA in a responsive layout.
Repository layout
- Root (
package.json): Defines the npm workspaces, central scripts for starting/building each workspace, and shared tooling. Runnpm installfrom the root to bootstrap both packages and generate a singlepackage-lock.json. desktop/: The complete desktop experience with the Tauri frontend (src), Rust backend (src-tauri), Tailwind/Vite configs, and release scripts.landing/: The marketing site with its own Vite config, TypeScript entry point, and CSS styles.
Getting Started
Prerequisites
- Node.js (v18+) or Bun
- Rust & Cargo (latest stable) for the desktop build
Installation
npm install
# or
bun install
This installs dependencies for both workspaces and produces one lockfile at the repo root.
Running
npm run dev:desktopβ Starts the desktop Vite server for Tauri development.npm run tauri:desktopβ Runstauri devfrom the desktop workspace (requires Rust).npm run dev:landingβ Serves the landing page locally (landing/).
Building
npm run build:desktopβtsc && vite buildfor the desktop frontend.npm run build:landingβ Builds the marketing landing page and outputs intolanding/dist.
Development Commands
The workspace scripts mirror the previous standalone commands:
npm run dev:desktopnpm run previewinsidedesktop/npm run build:desktopnpm run tauri:desktopnpm run release(run fromdesktop/) β handles versioning, signing, and notarization viadesktop/scripts/release.sh.npm run dev:landingnpm run build:landing
Versioning & Release
The automated release flow remains under desktop/scripts. Version bumps still update both desktop/package.json and desktop/src-tauri/tauri.conf.json.
cd desktop
bun run release -- --bump patch
Use npm run bump from the desktop workspace to adjust versions (desktop/package.json).