- new blog cms

This commit is contained in:
Ty Clifford
2026-07-04 19:41:44 -04:00
parent 64cb76a846
commit 782b983bf4
819 changed files with 3103 additions and 88735 deletions
View File
+102
View File
@@ -0,0 +1,102 @@
{
"generated_at": "2026-07-04T19:14:59-04:00",
"format": "neon-blog-pages-v1",
"items": [
{
"slug": "hello-neon",
"title": "Hello Neon",
"type": "post",
"status": "published",
"date": "2026-07-04T09:00:00-04:00",
"modified": "2026-07-04T09:00:00-04:00",
"category": "Announcements",
"tags": [
"cms",
"markdown",
"neon"
],
"summary": "Meet the new file-first blog system with Bludit-style folders, Markdown posts, and a neon theme.",
"author": "Editor",
"cover": "",
"allow_comments": true,
"menu_order": 0,
"excerpt": "Meet the new file-first blog system with Bludit-style folders, Markdown posts, and a neon theme."
},
{
"slug": "copy-friendly-publishing",
"title": "Copy-Friendly Publishing",
"type": "post",
"status": "published",
"date": "2026-07-03T16:20:00-04:00",
"modified": "2026-07-03T16:20:00-04:00",
"category": "Workflow",
"tags": [
"bludit",
"files",
"cli"
],
"summary": "The canonical content store is still plain folders and text files, with JSON indexes generated for quick lookup.",
"author": "Editor",
"cover": "",
"allow_comments": true,
"menu_order": 0,
"excerpt": "The canonical content store is still plain folders and text files, with JSON indexes generated for quick lookup."
},
{
"slug": "comments-captcha-stats",
"title": "Comments, Captcha, and CSV Stats",
"type": "post",
"status": "published",
"date": "2026-07-02T11:45:00-04:00",
"modified": "2026-07-02T11:45:00-04:00",
"category": "Features",
"tags": [
"comments",
"sqlite",
"stats"
],
"summary": "Comments are stored in SQLite, protected by a math captcha and a honeypot field, while visits stream into an Excel-friendly CSV.",
"author": "Editor",
"cover": "",
"allow_comments": true,
"menu_order": 0,
"excerpt": "Comments are stored in SQLite, protected by a math captcha and a honeypot field, while visits stream into an Excel-friendly CSV."
},
{
"slug": "uses",
"title": "Uses",
"type": "page",
"status": "published",
"date": "2026-07-01T10:10:00-04:00",
"modified": "2026-07-01T10:10:00-04:00",
"category": "Pages",
"tags": [
"uses"
],
"summary": "A second static page to show menu ordering and page routing.",
"author": "Editor",
"cover": "",
"allow_comments": false,
"menu_order": 2,
"excerpt": "A second static page to show menu ordering and page routing."
},
{
"slug": "about",
"title": "About",
"type": "page",
"status": "published",
"date": "2026-07-01T10:00:00-04:00",
"modified": "2026-07-01T10:00:00-04:00",
"category": "Pages",
"tags": [
"about"
],
"summary": "A static page powered by the same Markdown file structure as posts.",
"author": "Editor",
"cover": "",
"allow_comments": false,
"menu_order": 1,
"excerpt": "A static page powered by the same Markdown file structure as posts."
}
]
}
+26
View File
@@ -0,0 +1,26 @@
---
title: About
slug: about
type: page
status: published
date: 2026-07-01T10:00:00-04:00
modified: 2026-07-01T10:00:00-04:00
category: Pages
tags: [about]
summary: A static page powered by the same Markdown file structure as posts.
author: Editor
cover:
allow_comments: false
menu_order: 1
---
Neon Notes is a small blog CMS for people who like WordPress-style publishing features but want content they can move with a file copy.
Posts, pages, generated indexes, comments, configuration, and stats each have a clear storage home:
- Markdown content lives in `bl-content/pages`.
- Generated JSON indexes live in `bl-content/databases`.
- Comments live in `storage/database/blog.sqlite`.
- Visits live in `storage/stats/visits.csv`.
There is no admin dashboard. Publishing and moderation happen through `php cli/blog.php`.
@@ -0,0 +1,26 @@
---
title: Comments, Captcha, and CSV Stats
slug: comments-captcha-stats
type: post
status: published
date: 2026-07-02T11:45:00-04:00
modified: 2026-07-02T11:45:00-04:00
category: Features
tags: [comments, sqlite, stats]
summary: Comments are stored in SQLite, protected by a math captcha and a honeypot field, while visits stream into an Excel-friendly CSV.
author: Editor
cover:
allow_comments: true
menu_order: 0
---
Comments use SQLite with moderation enabled by default. Visitors answer a small math captcha, and a hidden honeypot field catches many automated submissions before they hit the database.
Approved comments render below each post. Pending, approved, spam, and deleted states are managed from the CLI:
```bash
php cli/blog.php comments:list --status=pending
php cli/blog.php comments:approve 1
```
Stats are written to `storage/stats/visits.csv` with date, time, path, route type, hashed IP, referrer, user agent, and status code. The file is intentionally human readable and importable into Excel.
@@ -0,0 +1,25 @@
---
title: Copy-Friendly Publishing
slug: copy-friendly-publishing
type: post
status: published
date: 2026-07-03T16:20:00-04:00
modified: 2026-07-03T16:20:00-04:00
category: Workflow
tags: [bludit, files, cli]
summary: The canonical content store is still plain folders and text files, with JSON indexes generated for quick lookup.
author: Editor
cover:
allow_comments: true
menu_order: 0
---
The CMS keeps posts and static pages in `bl-content/pages/<slug>/index.txt`. That makes import work simple:
1. Copy a post folder into `bl-content/pages`.
2. Check the metadata at the top of `index.txt`.
3. Run `php cli/blog.php rebuild`.
SQLite stores comments. JSON stores site configuration and a generated page index. CSV stores visit stats in a format Excel can open without ceremony.
The CLI handles normal publishing work, so there is no browser admin dashboard to harden, theme, or maintain.
+25
View File
@@ -0,0 +1,25 @@
---
title: Hello Neon
slug: hello-neon
type: post
status: published
date: 2026-07-04T09:00:00-04:00
modified: 2026-07-04T09:00:00-04:00
category: Announcements
tags: [cms, markdown, neon]
summary: Meet the new file-first blog system with Bludit-style folders, Markdown posts, and a neon theme.
author: Editor
cover:
allow_comments: true
menu_order: 0
---
This is the first post in the new CMS. Each post lives in a folder shaped like Bludit content:
```text
bl-content/pages/hello-neon/index.txt
```
The file is Markdown with a small metadata block at the top. You can copy a folder into `bl-content/pages`, run `php cli/blog.php rebuild`, and the post becomes part of the site.
The public theme defaults to dark neon and lets visitors switch to a light palette or choose green, blue, red, pink, purple, or orange accents.
+23
View File
@@ -0,0 +1,23 @@
---
title: Uses
slug: uses
type: page
status: published
date: 2026-07-01T10:10:00-04:00
modified: 2026-07-01T10:10:00-04:00
category: Pages
tags: [uses]
summary: A second static page to show menu ordering and page routing.
author: Editor
cover:
allow_comments: false
menu_order: 2
---
This page exists to demonstrate static pages, menu ordering, and pretty URLs. Edit it with:
```bash
php cli/blog.php update uses --title="Uses" --body-file=/path/to/body.md
```
Static pages use the same folder format as posts. The only difference is `type: page` in the metadata block.
+1
View File
@@ -0,0 +1 @@
keep