A lightweight, multi-window sticky note-taking app for the desktop(macOS). Built with Electron and React.
- Sticky notes — Each note opens in its own compact, always-on-top window with movable and resizable switchers
- Rich text editing — Editor with Markdown support and task lists
- Local-first — Notes stored in SQLite on your machine; no cloud required
| Layer | Stack |
|---|---|
| Desktop | Electron |
| Frontend | React 19, TypeScript, Tailwind CSS |
| Editor | TipTap (Markdown, task lists) |
| UI | Radix UI, Lucide / Phosphor / HugeIcons |
| Database | SQLite (better-sqlite3), Prisma migrations |
| Validation | Zod |
| State | Valtio |
| Build | Vite, pnpm workspaces, Turbo |
Monorepo managed with pnpm workspaces:
tada/
├── packages/
│ ├── api/ # Database API layer (Zod, SQLite client)
│ ├── database/ # Prisma schema and migrations
│ ├── editor/ # TipTap rich text editor component
│ ├── interfaces/ # Shared TypeScript types
│ └── ui/ # Shared UI components (Radix, Tailwind)
├── tada/ # Main Electron app
│ ├── src/
│ │ ├── electron/ # Main process, services, IPC
│ │ └── app/ # React pages (dashboard, note, about)
│ └── templates/ # HTML entry points per window type
├── assets/ # App and tray icons
└── package.json
The app uses a multi-window layout: note windows, dashboard, and utility windows (About, etc.) each have their own HTML template and React entry point. The main process uses a Context-based dependency injection pattern and services (tray, note windows, note manager) that communicate over IPC with a unified, Zod-validated API.
- Node.js 18+
- pnpm 10+ (
npm install -g pnpm)
git clone https://github.com/your-username/tada.git
cd tada
pnpm installFrom the repository root:
# Start Vite dev server and Electron
pnpm devOr run pieces separately:
pnpm dev:react # Vite dev server (default port 3524)
pnpm dev:electron # Electron main processNotes and dashboard hot-reload. The app uses PORT=3524 in development so Electron loads the React app from the dev server.
# Clean, build frontend, transpile Electron
pnpm clean
pnpm transpile:electron
pnpm buildUses Electron Forge. From the repo root:
pnpm packageThis runs clean → build → transpile → Forge package and make. On macOS you can build:
- Universal (ARM64 + x64): default
maketarget - ARM64 only: configure in
forge.config.js/ Forge makers - x64 only: same via Forge config
Outputs go to the out/ directory (or as configured in Forge).
| Variable | Description |
|---|---|
PORT |
Dev server port (default 3524). Used by Electron to load the React app in development. |
- SQLite database path:
app.getPath('userData')/tada.db - Migrations: Prisma in
packages/database/migrations/ - All access goes through
@tada/apiwith Zod-validated inputs and outputs
Contributions are welcome. Please open an issue to discuss larger changes, and ensure tests and lint pass before submitting a pull request.
- Fork the repo
- Create a branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -m 'Add some feature') - Push to the branch (
git push origin feature/your-feature) - Open a Pull Request
This project is licensed under the MIT License — see LICENSE for details.
