- new blog cms
This commit is contained in:
@@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -0,0 +1 @@
|
||||
keep
|
||||
Reference in New Issue
Block a user