summaryrefslogtreecommitdiff
path: root/Documentation/source/architecture/content-model.rst
diff options
context:
space:
mode:
authorBertrand Yuan <189593334+bertyuan@users.noreply.github.com>2026-04-27 20:54:16 +0800
committerGitHub <noreply@github.com>2026-04-27 20:54:16 +0800
commit85b6fb59db5fe1112c58eff9d02ae4f9c9b6456d (patch)
tree8c83fc84bd9547630e6733929dec77e102e055a8 /Documentation/source/architecture/content-model.rst
parent658798b3a2378bb6df16cfbb16d707c6fb719e1e (diff)
parentdbb5e791f0c228369605d126dd590962ebe1eddc (diff)
Merge pull request #21 from bertyuan/Documentationv1.2
docs: add comprehensive documentation for operations
Diffstat (limited to 'Documentation/source/architecture/content-model.rst')
-rw-r--r--Documentation/source/architecture/content-model.rst65
1 files changed, 65 insertions, 0 deletions
diff --git a/Documentation/source/architecture/content-model.rst b/Documentation/source/architecture/content-model.rst
new file mode 100644
index 0000000..12ed092
--- /dev/null
+++ b/Documentation/source/architecture/content-model.rst
@@ -0,0 +1,65 @@
+Content Model
+=============
+
+Payload CMS is configured in ``payload.config.ts`` and collection definitions
+live under ``src/payload/collections``.
+
+Collections
+-----------
+
+.. list-table::
+ :header-rows: 1
+ :widths: 18 58
+
+ * - Collection
+ - Purpose
+ * - ``Posts``
+ - Blog entries with slug, summary, rich text body, status, tags,
+ publication time, author, and optional featured image.
+ * - ``Users``
+ - Admin users for Payload and shared user representation.
+ * - ``Media``
+ - Uploaded images and assets used by posts and the admin.
+
+Post Lifecycle
+--------------
+
+Posts are authored in Payload and exposed publicly only when their status is
+``published``. Public queries in ``src/lib/payload-posts.ts`` consistently
+filter on this status before returning data to pages, feeds, search, or tag
+views.
+
+The normalized frontend shape is ``BlogPost``. It includes:
+
+* ``id`` and ``slug`` for stable identity;
+* ``url`` for public route generation;
+* ``title`` and ``description`` for listing and metadata;
+* ``content`` for Lexical rich text rendering;
+* ``image`` for cover or preview assets;
+* ``author`` and dates for byline display;
+* ``tags`` for topic navigation.
+
+Tag Strategy
+------------
+
+Tags are currently embedded in post documents and counted in memory by
+``getAllTags``. This is simple and sufficient for a small blog. If content
+volume grows, tag aggregation should move closer to the database or a cached
+index.
+
+MDX Content
+-----------
+
+The ``content`` directory is processed by Fumadocs through ``source.config.ts``.
+Its frontmatter includes date, author, tags, and optional image fields. Treat
+MDX content as local authored pages, distinct from Payload-managed posts.
+
+Generated Types
+---------------
+
+Payload writes generated TypeScript types to ``payload-types.ts``. Regenerate
+them after collection schema changes:
+
+.. code-block:: bash
+
+ pnpm payload:generate