Swift · SwiftUI · AppKit · SQLite · ScreenCaptureKit


I built Velin alone in October 2026, for my own daily use first, with Claude Code as my pair. I made the product and design calls; the Mac app came first, with iOS, Windows, Linux and Android planned once I rely on it every day.
Notes apps made me stop and choose before I could write, so thoughts were lost or forgotten. Sticky apps were quick but left notes scattered with no way to find them again. I wanted capture that takes no thought, and notes that come back on their own.
- A new sticky must be ready to type in under 0.5 seconds, wherever you are.
- Monochrome and minimal: few options on a sticky, everything else in Folio.
- Folio must never look or sound like a generic workspace app.
- Everything stays on the Mac: no accounts, no server, nothing to sign in to.
- A note must never reveal its content by itself while a screen may be shared.
- Light on the machine: memory can't grow with the number of notes.
- Considered
- Electron or a cross-platform framework.
- Why
- A sticky has to feel instant and sit over any app, including full-screen ones. Non-activating panels and an app of about 3 MB only come from going native.
- Considered
- The standard three panes: sidebar, list, editor.
- Why
- I built the three panes first and it looked like every other workspace app. Showing the notes themselves as paper is what makes it Velin.
- Considered
- Opening the note itself on the desktop, or a system notification.
- Why
- Opening the note leaks it into a screen share, and notifications are easy to swipe away and forget. A knock is private and stays until you answer.
- Considered
- Embedding images in each note's saved text.
- Why
- Our saved format silently drops images, and embedding them would keep full-size pictures in memory. Files keep notes small and memory low.
- Considered
- Relying on the system's window sharing setting alone.
- Why
- Apple doesn't promise that setting will hide a window from capture. So Velin checks that it works on your Mac and gives you a way out if it doesn't.
Notes live in a local SQLite database, kept in memory for instant access and written through on every change. Stickies are AppKit panels that never activate the app, so your current app keeps its menus, while Folio is SwiftUI. Each note saves as RTF at fixed sizes and takes its look from Settings when shown. Images sit in a folder beside the database.






- Oct 30, 2026Stickies: menu bar drag, global shortcut, autosave, restore after restart
- Oct 31, 2026Folio rebuilt as a wall of paper with a floating rail
- Oct 31, 2026Notes come back: chosen times, dates in writing, forgotten notes
- Oct 31, 2026Cloak, glass stickies, and export to Markdown and PDF
- Oct 31, 2026Performance pass: 500 notes down from 203 MB to 48 MB
- Oct 31, 2026Code, images, tables, and a universal build for Intel Macs
Reopening Folio left it stuck behind other apps. My first fix passed every check, yet the bug kept coming back. Only when my tests ran with Chrome in full screen did it show up clearly: the app reported itself as active while Folio sat on another desktop. Chrome hadn't even been detected as full screen, because browsers keep a hidden strip above the screen.
I changed the order of operations so Folio is shown before the app takes back its Dock icon, which brings it forward across desktops, and made full-screen detection recognise browsers. That also fixed a quieter bug: a knock wasn't waiting during full-screen Chrome.
- A new sticky is ready to type in about 33ms, against a 500ms target.
- Memory with 500 notes in Folio fell from 203 MB to 48 MB, about the same as with 6 notes.
- Idle CPU stays around 0.03%, and the app is 3.4 MB as a universal build.
- 64 unit tests, plus self-checks that drive the real windows, keys and PDF output.
I'd test in messy real conditions from day one. Clean-screen checks passed for hours while a full-screen browser and several desktops hid real bugs.
I'd look at real output every time. Twice a passing check hid an obvious fault: a code block one letter wide, and a PDF table with no grid.
I'd measure memory and CPU from the first build, not after the design settled. The wall's biggest cost was easy to fix but sat unnoticed for too long.
I'd start with the unusual design. I built the safe three-pane layout first, then threw it away because it looked like everything else.




