Writing first, then what your readers get, then the people who follow you, then the quiet work of running the place. Every feature here is on the demo right now; nothing is roadmap.
You write in a clean sheet that saves as Markdown, because Markdown is what survives platforms. Everything the toolbar does, the file format can say.
Headings, quotes, task lists, tables, captioned images, video, footnotes. The title grows instead of clipping, the word count sits in the corner, and save state is always visible.
A picture can hold the column, shrink to a third of it and let the words run past, or join the ones beside it as a gallery cut to one shape. Any of them can wear a frame: a mat of paper or of ink, in three weights, set on the picture or once for the whole site.
Type TeX, see it rendered live, click it to edit in place. Served to readers as MathML: real text a browser lays out itself, not a picture of an equation.
Syntax highlighting at save time, so readers never pay for it. A copy button on every block. An optional IDE-style chrome for sites about software.
Set a date and the post publishes itself, clears the cache, and goes out to the feed. Revisions are kept, so yesterday's version is a click back.
Title, description and social card image can be set per post. When you don't bother, sensible defaults are built from the post itself, including a generated Open Graph card.
Import a WordPress, Ghost, Substack or Medium export and every post becomes Markdown, with dead shortcodes swept on the way in. The old URLs get redirects written for you, and the images are fetched into your own library right after the words arrive, so nothing keeps leaning on the old host longer than it must; where the importer stops is on the compare page.
One switch (or Ctrl+\) takes the list of your writing and the whole button row off the screen and leaves the paper. Nothing is lost while it is away: selecting text still raises the formatting bar, and "/" still opens the inserts.
A block caret and a soft synthesized key click, generated in the browser with no audio file. Silly, optional, and off by default. Writing should feel like something.
A draft has a preview URL you can open yourself or send to a friend, without publishing anything.

About 114 KB for a full post, ten requests, zero third parties. No cookie banner, because there is nothing to consent to.
Mono, sepia, forest, ocean, sci-fi and amber, each designed separately for light and dark rather than inverted. Readers pick their side; you pick the default.
Literata, Source Serif, Source Sans and Inter ship subset per script, trimmed to the glyphs your language uses. Or upload any font file and the site reads in it.
One tap sets the post in two columns with justified text and first-line indents, like a printed page. For long essays it is a different experience entirely.
The writer can highlight in five inks, underline in pencil and ring a word in red ballpoint. Every stroke is drawn a little differently, the way a hand draws, and readers can add highlights of their own that survive their visit.
Full-text search with diacritics folded, so lap trinh finds Lập trình. Built into SQLite, no search service to run.
A series is read front to back in the order you set, never as a timeline. The next chapter is always one link away.
Serve the classic post list, a page you wrote, or a composed front page with a lead story and section rows. Sidebars are optional: one rail, two rails, or none.
The reading progress bar is pure CSS. Links prefetch on hover through a response header. The page moves like an app without carrying one.
Highlight anything in a post and one small control appears. It copies the sentence together with a link that opens the post at that sentence, scrolled to it and marked by the reader's own browser. Paste it into a message and the person on the other end lands where you were, not at the top of a long essay. Nothing is sent anywhere: no account, no third party, no request at all.
Press Ctrl+P on any post and you get the essay: the masthead, the words, the notes, the tags. No progress bar, no buttons that do nothing on paper, no comment thread, no footer. Headings do not sit alone at the foot of a page, tables are not cut in half, code wraps instead of losing its right edge, and a link that leaves the site prints its address. Reading at night gives you ink on paper, not a black page.

The subscriber list lives in your database. Export it any time; nobody can hold it hostage, including us.
Double opt-in sign-up, a broadcast composer, and your own SMTP. Pick several posts and they go out as one digest, never a flood of single emails.
One row per email that left the machine, success or failure, with the error kept. Open rates per subscriber. A double-send guard asks before a post goes out twice.
The test email is built by the same code as the real one, so a green test means the live send works. The classic 465-versus-587 TLS mistake is caught for you.
Off by default. Three levels of threading, bold and italic only, nothing else survives. Sign in with Google or just a name, with optional Turnstile to keep the bots out.
Pages are cached hard, but the comment thread is always read live. A new comment appears without anyone waiting for a cache to expire.
RSS, a sitemap, real Open Graph cards, and a PWA manifest so the blog can live on a phone's home screen. The plumbing of the open web, present and correct.
The admin is behind your sign-in and works from a phone. Everything you change takes effect on the next request, because the cache empties itself.
Trash keeps posts, pages, images and files until you say otherwise. Restore never collides, because a trashed post still owns its address. Purging an image that a live post still uses gets stopped and asks you twice.
Page views, scroll depth, referrers and devices, recorded in your own database with no cookies and no third party. Nothing to disclose, because nothing leaves.
Pick the site's timezone once, in Settings, and everything reads from it: the date under every post, the archive's month markers, the newsletter's date line, the day a chart starts on. Without one, the server's clock decided what date your readers saw, and moving the server moved every date on the site.
One button downloads the entire blog. Scheduled snapshots keep the last few on the server. An off-server script copies hourly to storage you own. All three are the same archive, and restoring is a documented shell procedure, not a prayer.
Password plus TOTP two-factor plus printed recovery codes. One owner account, enforced in code. Sessions you can see and end.
A blog nobody owns yet prints a one-time link in its own log, and that link is the whole account step: username, password, two-factor, all in a browser. A NAS log panel is enough — no docker exec, no interactive shell. Reading the log still proves the machine is yours, which is why the link is there and not simply a page anyone could find.
The interface speaks English, Vietnamese, German, Japanese, Chinese, Korean, French, Spanish, Portuguese, Italian and Russian. You pick one as the first question of setup, and a build check keeps every string of every language in sync. Each language is one file at the repository root, so the community can improve a translation or add a new one without learning the codebase.
Every meaningful action is a line: what happened, when, from where. When something looks odd, you read history instead of guessing.
Once a day, on the first visit it gets, the blog asks what the newest release is and wears the answer beside its version number: amber when an update exists, green when you are on it. The request carries the version it runs and nothing about you or your readers, and one switch turns it off. Installing stays your act.


Most platforms bolt this on. Quire Ink treats an agent as a first-class visitor with its own front door.
Connect Claude or another assistant and it can draft, publish, edit and organise through the exact rules you use. Not a webhook and a prayer: a real protocol with real tools.
No MCP client? Plug any API key into Settings (Anthropic, OpenAI or Gemini) and the sidebar grows an Assistant page: ask "how did the blog do this week?", "sweep the comments for spam", "switch to the sepia palette" and it does it, through the same rules you use, every action logged. Your key, your model, your bill.
The tools read as well as write: your traffic compared to last week, comments swept for spam into the trash, the whole archive searched for posts that should link to each other. A Monday report is one sentence to ask for; the cookbook has the prompts. What it never sees: your readers' addresses.
Tokens are created in the admin, shown once, stored hashed, and expire on their own. Delete one and that agent is out, immediately, no support ticket.
Any post URL answers with its Markdown source when an agent asks for it, and llms.txt lists what is worth reading. Agents get the text you wrote, not HTML to reverse-engineer.
An agent's publish goes through the same slug checks, revisions, soft delete and cache clearing as yours. There is no side door to leave ajar.