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/.
- 🧠 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.
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.
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.
- 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.
- Node.js (v18+) or Bun
- Rust & Cargo (latest stable) for the desktop build
npm install
# or
bun installThis installs dependencies for both workspaces and produces one lockfile at the repo root.
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/).
npm run build:desktop—tsc && vite buildfor the desktop frontend.npm run build:landing— Builds the marketing landing page and outputs intolanding/dist.
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
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 patchUse npm run bump from the desktop workspace to adjust versions (desktop/package.json).