Open-source blog engine · Vanilla Rails · MIT
Every platform is built to be configured. This one is built to be rewritten — by you and the coding agent already sitting in your terminal.
You are looking at proof, not a promise: nityesh.com runs on Chronicles, and this very page is the kind of hand-authored document its engine can publish byte-for-byte.
The one thing that matters
Because every blog platform ever made — Ghost, WordPress, Substack, all of them — answers the question "how do I change this?" with a settings page, a theme marketplace, or a plugin API. Someone else decided in advance which knobs you're allowed to turn.
Chronicles answers that same question with the source code. It's a vanilla Rails app small enough to hold in your head, and the whole thing is yours under an MIT license. Not a template you fill in. A codebase you own.
On most platforms, "infinite customizability" is something a marketing team wrote. Here it's just the license.
That's the asymmetry. The missing feature — comments, a second author, a podcast feed, a homepage that looks nothing like this one — isn't a roadmap item you wait for or a plugin you hope exists. It's a conversation you haven't had with your agent yet.
How ownership actually pays off
Owning the source only matters if changing it is cheap. It is — because the same agent you write with is the one that reshapes the platform underneath you. Three levels, each one deeper.
Chronicles ships an MCP server at /mcp with 13 tools. Your agent lists, drafts, tags, schedules, publishes, uploads images, embeds YouTube and X — and edits with surgical body patches, never wholesale rewrites of your prose.
claude.ai connects from a pasted URL. Claude Code connects with a token from /writing/connect.
Agents write beautiful HTML. So here a complete hand-authored document is a first-class publication — served byte-for-byte at a root slug on your domain. No blog chrome. Full SEO, canonical injected, screened so it can't ship broken.
Live proof: nityesh.com/hands-on-deck was published this way, byte-identical to its source.
Want comments? A second author? A different homepage entirely? Those aren't features you're missing — they're features you haven't asked for yet. You hold the complete source in the simplest full-stack framework ever made for one person.
The license is the customization API. Nothing is off-limits, because nothing is locked.
# There is no installer. Your agent is the installer. you@laptop:~/chronicles$ claude "Read the README. Make this mine." # It reads the codebase, then interviews you: agent› Your name and domain? agent› Leaving Ghost — do you have a JSON export? agent› Want comments and a second author wired in now, or later? # Then it fills one Setting row, imports your Ghost archive # (posts, drafts, tags, images, embeds — URLs and SEO intact), # and deploys you to a $6 box with Kamal. you@laptop:~/chronicles$ git push # tests pass → your site ships
The difference in one grid
What's in the box
This ran a real publication before it was open-sourced. The port from Ghost was parity-gated — a script compared both sites URL by URL until they matched. Search Console never noticed the switch.
Rich-text editor (Basecamp's Lexxy) that autosaves every 2 seconds. Publish now, or pick a future time and a background job does it for you.
Designed homepage, tag pages, RSS, a sitemap index, full OG / Twitter / JSON-LD head tags, and 301s that keep old links alive forever.
Posts, drafts, pages, tags, images, embeds — mobiledoc in, Action Text out. Your whole archive migrates without breaking a URL.
Title, author, logo, domain, social handles — one database row. Rebrand the entire site without touching a line of Ruby.
SQLite for database, jobs, cache and cable. No build step, no node_modules. Push to main, tests pass, site ships. Runs on a $6 droplet.
13 MCP tools and OAuth built in, dynamic client registration included — so an agent can onboard itself from a single pasted URL.
No comments. No analytics. No payments. No memberships. No multi-author. Not because any of it is hard — because one person hasn't needed it yet. This isn't a feature matrix that has to look complete; it's a codebase honest about being small.
// It ships with one author because it was written by one person.
// If you want a second, that's an afternoon — not a paywall.
Read this before you fork
The support policy is one sentence: I break it constantly and chronicle the breakage. There is no stable version — fork it and it's yours. If it breaks, ask your agent to fix it.
Fork it
Three steps, and your agent handles the hard one. There's no installer — your agent is the installer.