{"id":1170,"date":"2026-11-09T00:00:50","date_gmt":"2026-11-09T07:00:50","guid":{"rendered":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/?p=1170"},"modified":"2026-11-13T01:34:29","modified_gmt":"2026-11-13T08:34:29","slug":"editorial-vcs","status":"publish","type":"post","link":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/2026\/11\/editorial-vcs\/","title":{"rendered":"Editorial VCS"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I\u2019ve been working on a personal creative writing project all year, and along the way I built a tool for it. I\u2019ve open-sourced it.<br><br>It\u2019s called Editorial VCS, and it\u2019s a self-hosted version control system for writing projects. Every save is a full revision with a commit message. Side-by-side diffs. Files move through Draft, Review, and Final independent of their revision history. Projects are siloed, can be tied to a URL, and you can promote a file from one to another without losing its past. If you\u2019re working on fiction, there\u2019s an optional lore bible that catches every mention of a character or place across your files and draws the relationship graph for you.<br><br>Plain PHP, MariaDB, Docker compose up and you\u2019re running. MIT license.<br><br>Why it exists: I spent this spring running essays through five AI models, each with an assigned editorial role: one for facts, one for structure, one to attack the argument. That produces a lot of revisions, and the question \u201cwhich pass lost the details I wanted to keep?\u201d turned out to need a real answer. Git is built for code. Nothing I found was built specifically for this.<br><br>So the tool built for a project that will never see the light of day ended up separately  shepherding ten essays and an eight-story anthology to publication instead.<br><br>It\u2019s version one. I had to strip out some internal LAN-based pieces before publishing, so it\u2019s a single commit, no releases, and I haven\u2019t finished testing the clean deploy yet. I wanted it up to share while I polish it. If you write with a pipeline (human or otherwise) I\u2019d like to know whether it fits how you work, and where it doesn\u2019t.<br><br>And yes, I wrote it with Claude. Domain expertise did the steering.<br><br>Available on GitHub: <a href=\"https:\/\/github.com\/bcGITster\/editorial-vcs\">https:\/\/github.com\/bcGITster\/editorial-vcs<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I\u2019ve been working on a personal creative writing project all year, and along the way I built a tool for it. I\u2019ve open-sourced it. It\u2019s called Editorial VCS, and it\u2019s a self-hosted version control system for writing projects. Every save is a full revision with a commit message. Side-by-side diffs. Files move through Draft, Review, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[329,12,328],"tags":[327,325,326],"class_list":["post-1170","post","type-post","status-publish","format-standard","hentry","category-editorial-vcs","category-general","category-projects","tag-content-management","tag-vcs","tag-version-control"],"_links":{"self":[{"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/posts\/1170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/comments?post=1170"}],"version-history":[{"count":2,"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/posts\/1170\/revisions"}],"predecessor-version":[{"id":1177,"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/posts\/1170\/revisions\/1177"}],"wp:attachment":[{"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/media?parent=1170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/categories?post=1170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kitchencloset.com\/home\/bryan\/blog\/wp-json\/wp\/v2\/tags?post=1170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}