Skip to content

Commit c8489fa

Browse files
committed
docs: polish public repo presentation
1 parent f865f2d commit c8489fa

3 files changed

Lines changed: 21 additions & 16 deletions

File tree

README.md

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22

33
<img src="./docs/images/hero.png" width="600" alt="Burnt-Out Linux Penguin" align="right" />
44

5-
A serverless, database-free CMS built on Git plumbing.
5+
A Git-native, database-free CMS: article bodies in commit messages, publish by moving refs.
66

77
> "I'm using `git push` as my API endpoint."
88
9-
`git-cms` treats Git as an application substrate, not just a version-control tool. Articles live in commit messages, drafts and published state live in refs, and history falls out of the storage model instead of being layered on afterward.
9+
`git-cms` treats Git as an application substrate, not just a version-control tool. Article bodies live in commit messages on empty-tree commits. Draft and published state live in refs. History falls out of the storage model instead of being layered on afterward.
1010

1111
Full article: [Git as CMS](https://flyingrobots.dev/git-stunts/git-cms)
1212

13+
If you want the runnable appendix rather than the essay, use the companion doc:
14+
15+
- [docs/GIT_CMS_COMPANION.md](./docs/GIT_CMS_COMPANION.md)
16+
1317
## If You Came Here From The Blog Post
1418

15-
Use the reader-safe path first:
19+
Use the reader-safe path first. It is isolated, seeded, and meant for live poking around:
1620

1721
```bash
1822
git clone https://github.com/flyingrobots/git-cms.git
@@ -36,10 +40,6 @@ git -C "$GIT_CMS_REPO" log refs/_blog/dev/articles/hello-world --graph --oneline
3640

3741
Open [http://localhost:4638](http://localhost:4638) while `npm run sandbox` is running.
3842

39-
If you want the runnable appendix rather than the essay, use the companion doc:
40-
41-
- [docs/GIT_CMS_COMPANION.md](./docs/GIT_CMS_COMPANION.md)
42-
4343
## Runtime Modes
4444

4545
| Mode | Command | Repo Location | Best For |
@@ -59,14 +59,15 @@ Compatibility aliases:
5959
- `npm run playground:shell`
6060
- `npm run playground:logs`
6161

62-
## Why This Repo Exists
62+
## What This Repo Proves
6363

64-
The core stunt is narrow:
64+
The stunt is narrow on purpose:
6565

66-
- drafts are commits
6766
- article bodies live in commit messages
68-
- published state is another ref
69-
- publish is pointer movement
67+
- article commits point to the empty tree
68+
- draft state lives at `refs/_blog/dev/articles/<slug>`
69+
- published state lives at `refs/_blog/dev/published/<slug>`
70+
- publishing is pointer movement
7071
- restore writes a new commit from old content
7172
- history is the storage model
7273

@@ -120,6 +121,8 @@ git -C "$GIT_CMS_REPO" log refs/_blog/dev/articles/hello-world --graph --oneline
120121
- Publishing moves `refs/_blog/dev/published/<slug>` to the current draft tip.
121122
- Restoring an old version creates a new commit instead of rewriting history.
122123

124+
This is the core of the stunt. Before Git can pretend to be a CMS, it has to behave like storage and state first.
125+
123126
## Safety Notes
124127

125128
The reader-safe commands are safe because they do **not** use the checkout as the runtime repo:
@@ -139,6 +142,7 @@ If you are here because of the article, start with `demo` or `sandbox`, not `dev
139142
## Feature Snapshot
140143

141144
- **Database-free:** No SQL, no NoSQL, just Git objects and refs
145+
- **Ref-native state model:** Draft and published state are explicit refs, not database rows
142146
- **Fast-forward publish semantics:** Published refs only move to the current draft tip
143147
- **Atomic publishes:** Publish is a CAS-protected ref update
144148
- **Infinite history:** Every draft save is a commit

docs/ADR.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
### Project Overview
1414

15-
**git-cms** is a serverless, database-free Content Management System that treats Git's object store as a distributed, cryptographically verifiable document database. Instead of storing content in traditional databases (SQL or NoSQL), it leverages Git's Merkle DAG to create an append-only ledger for articles, metadata, and encrypted assets.
15+
**git-cms** is a Git-native, database-free Content Management System built on Git plumbing. Instead of storing content in traditional databases (SQL or NoSQL), it treats Git's object store as a distributed, cryptographically verifiable document database for articles, metadata, and encrypted assets.
1616

1717
The fundamental innovation: **`git push` becomes the API endpoint.**
1818

@@ -47,7 +47,7 @@ Users MUST be able to access any historical version of any article without data
4747

4848
| Priority | Quality Attribute | Description | Measurement |
4949
|----------|------------------|-------------|-------------|
50-
| 1 | **Security** | Cryptographic integrity, optional asset encryption, signed commits | GPG verification, AES-256-GCM encryption strength |
50+
| 1 | **Security** | Cryptographic integrity, optional asset encryption, optional commit signing | GPG verification, AES-256-GCM encryption strength |
5151
| 2 | **Simplicity** | Minimal dependencies, no database, composable architecture | Lines of code, dependency count, Docker image size |
5252
| 3 | **Auditability** | Complete provenance of all content changes | Git log completeness, trailer metadata coverage |
5353
| 4 | **Performance** | Sub-second reads for typical blog workloads | Response time for `readArticle()` |
@@ -211,7 +211,7 @@ Assets are stored by object hash, enabling automatic deduplication. In SHA-1 obj
211211
**Benefit:** Reduces repository bloat.
212212

213213
#### P-4: Cryptographic Integrity
214-
Every operation produces a cryptographically signed commit (when `CMS_SIGN=1`). The Merkle DAG ensures tamper detection.
214+
Every operation produces a Git commit with cryptographic integrity from Git object hashing. Optional commit signing (`CMS_SIGN=1`) adds non-repudiation. The Merkle DAG ensures tamper detection.
215215

216216
**Benefit:** Audit trails are mathematically verifiable, not just trust-based.
217217

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"name": "git-cms",
33
"version": "1.1.5",
4-
"description": "A serverless, database-free CMS built on Git plumbing.",
4+
"description": "A Git-native, database-free CMS: article bodies in commit messages, publish by moving refs.",
5+
"homepage": "https://flyingrobots.dev/git-stunts/git-cms",
56
"type": "module",
67
"bin": {
78
"git-cms": "./bin/git-cms.js"

0 commit comments

Comments
 (0)