64defe7f74
A reusable comment thread any sidecar can attach to any page, tied to real logged-in accounts (never anonymous), auto-approved on submission with hide/delete moderation at /admin/comments — only a verified account can post, so there's no anonymous-spam vector to pre-vet against. Framework-level (novaconium/lib, novaconium/migrations, novaconium/pages), not App/migrations, matching Admin auth and Media manager's shape. A page needs its own sidecar to use it — this repo has no client-side JS, so comments ride the same server-rendered POST pattern as every other dynamic feature, which is also what excludes a page from the static cache. App/pages/blog/comments-demo/ demonstrates the pattern without touching existing posts that are referenced elsewhere as the sidecar-less example. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
57 lines
2.7 KiB
PHP
57 lines
2.7 KiB
PHP
<?php
|
|
|
|
// Every post under App/pages/blog/ is now a plain, sidecar-less directory
|
|
// with its own index.twig — none of them are driven by a repository or
|
|
// database, so this listing is just a hand-maintained array pointing at
|
|
// each one. Add a new entry here whenever a new post directory is added.
|
|
// 'published' (YYYY-MM-DD) is used by App/pages/blog/feed/index.php to
|
|
// order and date entries in the RSS feed — illustrative dates here, not
|
|
// derived from real history (this repo's posts all arrived in one batch
|
|
// import, so there's no authentic per-post date to pull from).
|
|
return [
|
|
'posts' => [
|
|
[
|
|
'slug' => 'hello-world',
|
|
'title' => 'Hello, World!',
|
|
'excerpt' => 'The first post on this blog — a plain sidecar-less page, like every other post here now.',
|
|
'published' => '2026-07-11',
|
|
],
|
|
[
|
|
'slug' => 'second-post',
|
|
'title' => 'A Second Post',
|
|
'excerpt' => 'A second post at its own URL, showing that adding a new page under App/pages/blog/ needs nothing but a new directory.',
|
|
'published' => '2026-07-11',
|
|
],
|
|
[
|
|
'slug' => 'twig-syntax-guide',
|
|
'title' => 'Twig Syntax Guide',
|
|
'excerpt' => 'A tour of the Twig syntax used throughout this site — output, filters, control structures, template inheritance, and a few gotchas worth knowing.',
|
|
'published' => '2026-07-13',
|
|
],
|
|
[
|
|
'slug' => 'style-guide',
|
|
'title' => 'Style Guide',
|
|
'excerpt' => "A showcase of this theme's default styling for headings, lists, tables, code, and other common HTML elements.",
|
|
'published' => '2026-07-13',
|
|
],
|
|
[
|
|
'slug' => 'code-highlighting',
|
|
'title' => 'Code Highlighting',
|
|
'excerpt' => 'How syntax highlighting works on this site, with worked examples in bash, HTML, CSS, YAML, Python, JavaScript, JSON, and INI/env.',
|
|
'published' => '2026-07-14',
|
|
],
|
|
[
|
|
'slug' => 'novaconium-features',
|
|
'title' => 'Novaconium Features',
|
|
'excerpt' => 'A tour of what ships with novaconium out of the box: routing, sidecars, caching, admin auth, access control, media manager, database, search, RSS, and more.',
|
|
'published' => '2026-07-15',
|
|
],
|
|
[
|
|
'slug' => 'comments-demo',
|
|
'title' => 'Comments Demo',
|
|
'excerpt' => 'A worked example of Lib\\Comments — this post has its own sidecar, unlike every other post here, specifically so it can carry a live comment thread.',
|
|
'published' => '2026-07-15',
|
|
],
|
|
],
|
|
];
|