← Studio
GitHub ↗ v0.1.0 · MIT
Slate - a custom notepad

A simple notepad app for your Mac.

Slate is a small, fast notes app for my own desktop. Open it, write something, close it — no accounts, no sync prompts, no subscription nag banner asking if I'm "still there." Notes live as plain JSON files in ~/Documents/Slate, which means the data is mine, readable, and portable without me having to think about it.

The design brief I gave myself was basically: Numi, but for words instead of numbers. A frameless, rounded window. A quiet dark (or light) chrome. A toolbar that only shows up when I actually need it — headings, bullets, blockquotes, code, dividers — and otherwise gets out of the way of the page.

Slate's main window - sidebar note list and rich text editor
Slate's main window - sidebar note list and rich text editor
01

Rich text that covers the basics

Rich text formatting (headings, bullets, numbered lists, blockquotes, code, dividers) from a compact toolbar or keyboard shortcuts

02

Your notes, your files

Local-first persistence — notes and trash both live as JSON on disk, no server, no account

03

Stays out of the way

Lives in the system tray; closes to tray instead of quitting, pin-to-top when I want it visible while referencing something else

04

Organization without ceremony

Manual folder organization with drag-and-drop, soft-delete trash with restore

05

Import and export

Markdown import/export

06

Themes you can shape

Dark and light themes, plus a theme builder for making my own skins

Why I built it

I kept reaching for Apple Notes and being mildly annoyed by it — not because it's bad, but because it's not mine. I wanted something I could shape exactly to how I actually take notes: quick capture, occasional structure, zero ceremony. And I wanted to see what it actually takes to get a native-feeling desktop app out of an AI-assisted build, end to end — not a web toy, an actual .app I install and use daily.

So: Tauri for the native shell (frameless window, system tray, always-on-top pin), SvelteKit for the UI. The whole thing is intentionally small. If I can't understand my own app's codebase at a glance, I've already lost the plot.

Shortcuts
Cmd/Ctrl + N new note
Cmd/Ctrl + \ toggle sidebar
Cmd/Ctrl + Shift + D toggle dark/light
Cmd/Ctrl + , open settings
Cmd/Ctrl + B bold
Cmd/Ctrl + I italic
Cmd/Ctrl + U underline
Cmd/Ctrl + K link
Cmd/Ctrl + Z undo
Cmd/Ctrl + Shift + Z redo
Slate feature grid - rich text, local-first persistence, tray access, dark mode, themes
Slate feature grid - rich text, local-first persistence, tray access, dark mode, themes
How it got built

This one's a Claude + Codex build from the ground up — no existing app to migrate, no legacy CMS baggage, just a blank Tauri project and an increasingly specific vision of what "gets out of my way" actually means in practice. The build leaned hard on iteration: get a rough version working, use it for a few days, notice what's annoying, fix that specifically. The trash/restore flow, the tray behavior, the folder drag-and-drop — none of that was speced up front. It came from actually living in the app and hitting friction.

Still in polish

Next up: tightening selection-formatting reliability and some keyboard-power-user niceties, then eventually a Notion sync layer for the notes I want to graduate out of Slate.

Built with Claude + Codex · Tauri v2 · SvelteKit + TypeScript