MyDraft
2026
MyDraft.co
A Distraction Free Writing App
MyDraft is a distraction-free writing app for Windows and macOS. It gives writers a quiet place to write every day: a clean editor, a handful of tools that encourage a daily habit, and nothing that competes with the page for attention.
Every note is a plain Markdown file in a folder the writer chooses. There is no account, no cloud lock-in, no telemetry, and no AI rewriting anything. It sells for $9, once, and works fully offline after a one-time activation.
I designed and built all of it solo: the interface, the brand, the Rust and TypeScript codebase, the landing page, the licensing system, and the launch campaign. It was first conceptualized in March 2025 and launched publicly in April 2026.
This case study covers the product from a few different angles, so feel free to jump to the part you came for:
Interface Design
The Premise
Most writing apps compete on features. MyDraft competes on what it leaves out. The interface is built around one rule: nothing should sit between a thought and the page. Every panel can disappear, every tool is a shortcut away, and the editor is always the largest thing on screen.
The Editor
The editor is designed to read like a finished page rather than a form. Line length is held to roughly 50 to 75 characters by default, the typographic range where long-form text is most comfortable to read and write.
Markdown formats as you type, so wrapping a word in asterisks turns it bold without reaching for a button. A floating toolbar appears only when text is selected, and fullscreen removes even that, leaving formatting to the keyboard.
Focus
Focus mode dims every paragraph except the one being written, so attention stays on the sentence in progress instead of drifting back to reread the last page. The sidebar hides itself until the cursor nears the edge of the window, and it can be pinned open on the days when organizing matters more than writing.
Finding Things
Organization stays out of the way until it is needed. Command K opens a quick switcher that searches titles, content, tags, and backlinks at once, with fuzzy matching so a half-remembered title still lands. Notes open in tabs that survive a restart.
Wikilinks and hashtags work inline, so structure grows out of the writing itself instead of being filed ahead of time. Those links also feed a 3D graph that maps how ideas connect across the whole library.
The Habit
The hardest part of writing is starting, so MyDraft gives people reasons to start. A streak tracker counts consecutive days and words written, Command D opens today's journal entry from a custom template, and a library of 365 prompts offers a new one each day.
The writing timer is deliberately gentle. When it runs out, it says time's up and invites you to keep going. It never stops anyone mid-sentence, because the point of a timer is to get someone writing, not to end it.
Character
A quiet app does not have to be a cold one. Every launch opens on a splash screen with an animated logo and a quote. Optional keyboard sounds and a small fidget widget, seven animated loops triggered with F8, give restless hands somewhere to go between sentences.
Three themes cover different lighting. Day and Night are what they sound like. Glass uses the operating system's own frosted materials, so the window picks up the desktop behind it and feels native to the machine it runs on.
01
Files, Not a Database
Every note is a Markdown file anyone can open in any editor. The app is a lens over a folder, not a vault you have to export your way out of.
02
Nothing Leaves the Machine
No account, no analytics, no telemetry, no AI trained on anyone's writing. Dictation runs on-device, so not even your voice leaves the computer.
03
Pay Once
$9, one time, with every feature and every update included. No subscription that climbs a little higher each year.
04
Earn Its Place
Every feature has to support a real writing habit. Anything that adds noise to the page lives behind a shortcut or a setting.
Live Demo
The Landing Page
The landing page carries the same restraint as the app. It leads with a single line, a quiet place to write every day, then walks through what MyDraft does and, just as deliberately, what it refuses to do: no AI rewriting, no cloud accounts, no climbing subscriptions.
It is also the storefront. Checkout runs through Stripe and delivers a license key by email, and the full documentation lives on the same site, so a new user can go from reading about the app to writing in it without leaving one place.
How It Started
MyDraft came from a breaking point with modern writing tools. Everything felt overbuilt, distracting, or locked behind systems that took control away from the writer. I did not want another feature-heavy app. I wanted something that disappeared the moment you started writing, and that stored every thought as a plain file you own, with no cloud sync or subscription required.
The first version was built in a month as a focused experiment. It solved the core problem, but it was not finished. Over the next ten months I refined it with a small group of beta testers who used it every day, and their feedback shaped what MyDraft became.
New features were added carefully, to support real writing habits rather than to add complexity: speech-to-text for capturing ideas instantly, a 3D knowledge graph to see how ideas connect, and a linking system that builds context over time. Every addition had to earn its place without breaking the original promise of a distraction-free page.
Launch Commercial A
Launch Commercial B
Branding
The Launch
Before launch, I built everything needed to take MyDraft from a beta to a public product. I designed and developed the landing page from scratch, integrated Stripe for checkout, built the license key system, and wrote the server side validation that handles activation across devices. I also wrote complete documentation so new users could get started without friction, and produced a launch video to introduce the app.
MyDraft hit 500 downloads in its first 24 hours, and it continues to grow its user base daily.
Features
01
Daily Writing Quotes
02
Folder & Note Management
03
Automatic Note Saving
04
Distraction-Free Mode
05
Writing Streak Tracker
06
Light, Dark & Glass Themes
07
Pinnable TODO Window
08
Markdown File Storage
09
Rich Text Editor
10
Writing Timer
11
Tag System
12
Global Search
13
Note Backlinks
14
Speech to Text
15
3D Knowledge Graph
16
Typewriter Mode
17
PDF Export / Print
18
Custom Fidget Widgets
Technical Breakdown
Overview
MyDraft is a desktop writing app with a web interface and a native core. The interface is a Next.js app exported to static files and rendered in the operating system's own webview. Everything that touches the disk, the microphone, or the window itself runs in Rust, and the two sides talk through typed commands and events.
Three constraints shaped nearly every decision. The files belong to the writer, so notes are plain Markdown in a folder they choose. Nothing leaves the machine, so there is no server, no account, and no telemetry. And the app can never lose a word, which turned out to be the hardest of the three.
01
Tauri 2 with a Rust core
The shell uses the operating system's own webview instead of bundling a browser, so the app stays small and every file operation runs in Rust rather than in the interface.
02
Next.js as a static frontend
Exported to plain files and loaded by the webview. There is no server anywhere in the app, local or otherwise.
03
TipTap editor, Markdown on disk
A rich editor on screen, plain Markdown in the file. The file format is the contract, and the editor is only a way of looking at it.
04
On-device speech recognition
A streaming recognizer bundled with the app and driven from Rust, so dictation works offline and no audio ever leaves the computer.
05
Three.js for the graph
A 3D force layout with a bloom pass, so the map of linked notes reads as a space you move through rather than a flat diagram.
06
Stripe, Supabase, and signed webhooks
A one-time checkout that issues a license key, activated once online and then never needed again.
Notes as Files
Each note is a Markdown file with a small block of frontmatter at the top holding its title, dates, folder, and starred state. Folders in the app are real directories on disk, so moving a note in the sidebar physically moves its file. Opening the notes folder in any other editor shows exactly what the app shows.
The editor originally stored its own HTML and converted it back and forth, which is the kind of round trip that slowly corrupts formatting. Markdown is now the only format written to disk. Older HTML notes are converted the first time they are opened, and HTML is generated only on the way out, for printing.
Folder membership used to live in a single JSON map beside the notes. One damaged file could scramble the organization of an entire library, so membership moved into each note's own frontmatter, with a one-time migration and the old map kept as a read-only fallback during the transition.
Never Losing a Word
Autosave waits for an 800 millisecond pause in typing, with a five second ceiling so someone typing without stopping still gets saved regularly. Every write is atomic: the note is written to a temporary file, flushed to disk, and then swapped into place in a single rename. A crash mid-save leaves the previous version intact rather than half a file.
Some of the most important code came from real reports of a note keeping its title while its body went blank. The Rust side now refuses any save that would replace a non-empty note with an empty one unless that is explicitly intended, and every save logs a length and a fingerprint of its content so an incident can be traced afterward. A recovery routine can inspect a note's temporary file and backups side by side and restore the fullest one.
Configuration files keep three rotating backups. Streak tracking updates after every save but is never allowed to block one. A failed streak count is logged loudly, and the note is saved regardless.
Living Alongside Other Apps
Because notes are ordinary files, people sync them with iCloud, Dropbox, or Google Drive, and edit them in other tools. A native file watcher notices those external changes and reloads the library. It ignores the app's own saves, so it never reacts to itself, and it defers any reload while there are unsaved edits, so a sync arriving mid-sentence can never overwrite the sentence.
Dictation
Speech-to-text runs entirely on the device. A streaming recognizer model ships inside the app and is driven from Rust, with microphone audio resampled to 16kHz and fed to it continuously. Partial results stream back as a live preview, and the final transcript lands at the cursor when dictation stops.
One small decision makes a real difference in use. The microphone opens before the model finishes loading, and audio is buffered in the meantime, so the first words someone speaks while the model warms up are not lost.
Native Feel
The window has no system title bar. Its controls are drawn by the app, so the chrome matches the rest of the interface on both platforms. Glass mode applies each operating system's own material: acrylic on Windows 11, a blur-behind effect on Windows 10 where acrylic is unreliable, and native vibrancy on macOS.
The pinnable to-do list is a separate always-on-top window that can be locked in place, so a short list can sit beside whatever else is open without pulling anyone back into the main app.
Scale
A writing app should feel the same with ten notes as it does with ten thousand. The sidebar virtualizes once a list passes 40 rows, rendering only what is on screen. Search, backlinks, and tags are resolved in Rust rather than by loading every note into the interface.
The codebase had to scale too. The main screen once held more than 40 separate pieces of local state, and the sidebar and editor had grown into single files of 53KB and 42KB. Those were split into four focused stores and a set of small hooks and components, which removed a class of bugs where one change quietly broke another screen.
Licensing
Purchases run through Stripe checkout. A signed webhook verifies every payment before acting on it, and it is idempotent on the checkout session, so a retried webhook can never issue two keys. The key is generated server side, stored, and emailed to the buyer.
Activation needs the internet exactly once. The app sends the key with an anonymous machine id, receives confirmation, and stores it locally. From then on it runs fully offline, which is the only licensing model that fits an app whose promise is that it does not need anyone's server.
Trade-offs
Filenames still carry a unique id and a timestamp ahead of the title. That keeps every note's identity stable through renames, but it makes the folder less pleasant to browse in another app, and decoupling titles into frontmatter was the first step toward fixing it properly.
Streaks are motivating, but they are also unforgiving. Missing one day resets the count, and a daily word goal or a heatmap that shows volume rather than presence would reward effort more fairly. A heading outline for long documents is also still on the list.
Takeaway
The main lesson is that local-first is a promise about failure, not about storage. Saving to a file is easy. Making sure a crash, a sync conflict, an empty editor state, or an external edit can never cost someone their writing is where most of the engineering went.
The same restraint drove the design. The best features in MyDraft are the ones that stay invisible until they are needed, and the hardest decisions were about what to leave out.
