@riverbankcms/sdk 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/README.md +175 -0
  2. package/dist/cli/index.js +42 -95
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/cli/init-docs/content/agents-section.md +50 -0
  5. package/dist/cli/init-docs/content/cli-reference.md +574 -0
  6. package/dist/cli/init-docs/content/content-management.md +384 -0
  7. package/dist/cli/init-docs/content/context-brand.md +125 -0
  8. package/dist/cli/init-docs/content/context-brief.md +77 -0
  9. package/dist/cli/init-docs/content/context-knowledge.md +111 -0
  10. package/dist/cli/init-docs/content/getting-started.md +130 -0
  11. package/dist/cli/init-docs/content/site-workflows-readme.md +96 -0
  12. package/dist/cli/init-docs/content/workflow-add-block.md +228 -0
  13. package/dist/cli/init-docs/content/workflow-create-page.md +193 -0
  14. package/dist/cli/init-docs/content/workflow-publish.md +280 -0
  15. package/dist/client/client.d.mts +2 -2
  16. package/dist/client/client.d.ts +2 -2
  17. package/dist/client/client.js +536 -71
  18. package/dist/client/client.js.map +1 -1
  19. package/dist/client/client.mjs +536 -78
  20. package/dist/client/client.mjs.map +1 -1
  21. package/dist/client/hooks.d.mts +2 -2
  22. package/dist/client/hooks.d.ts +2 -2
  23. package/dist/client/usePage-C9tJpuKa.d.mts +6813 -0
  24. package/dist/client/usePage-Db9kzA41.d.ts +6813 -0
  25. package/dist/server/{Layout-wBtJLTVX.d.ts → Layout-Ce7PU9I5.d.ts} +1 -1
  26. package/dist/server/{Layout-B7cvis7r.d.mts → Layout-WllR8Zug.d.mts} +1 -1
  27. package/dist/server/{chunk-7FIJSGHU.mjs → chunk-5JT452F2.mjs} +537 -76
  28. package/dist/server/chunk-5JT452F2.mjs.map +1 -0
  29. package/dist/server/chunk-AET56TQX.mjs +45 -0
  30. package/dist/server/chunk-AET56TQX.mjs.map +1 -0
  31. package/dist/server/{chunk-P7UVAMK6.js → chunk-HMENX4Y7.js} +543 -82
  32. package/dist/server/chunk-HMENX4Y7.js.map +1 -0
  33. package/dist/server/chunk-LQUKXIW7.mjs +13 -0
  34. package/dist/server/chunk-LQUKXIW7.mjs.map +1 -0
  35. package/dist/server/chunk-VODFQMUW.js +45 -0
  36. package/dist/server/chunk-VODFQMUW.js.map +1 -0
  37. package/dist/server/chunk-WYNEYDXO.js +13 -0
  38. package/dist/server/chunk-WYNEYDXO.js.map +1 -0
  39. package/dist/server/{components-CICSJyp_.d.ts → components--LT61IKp.d.ts} +2 -2
  40. package/dist/server/{components-CMMwDXTW.d.mts → components-RPzRQve6.d.mts} +2 -2
  41. package/dist/server/components.d.mts +4 -4
  42. package/dist/server/components.d.ts +4 -4
  43. package/dist/server/components.js +0 -1
  44. package/dist/server/components.js.map +1 -1
  45. package/dist/server/components.mjs +0 -1
  46. package/dist/server/config-validation.js +0 -1
  47. package/dist/server/config-validation.js.map +1 -1
  48. package/dist/server/config-validation.mjs +0 -1
  49. package/dist/server/config.js +0 -1
  50. package/dist/server/config.js.map +1 -1
  51. package/dist/server/config.mjs +0 -1
  52. package/dist/server/config.mjs.map +1 -1
  53. package/dist/server/data.d.mts +1 -1
  54. package/dist/server/data.d.ts +1 -1
  55. package/dist/server/data.js +0 -1
  56. package/dist/server/data.js.map +1 -1
  57. package/dist/server/data.mjs +0 -1
  58. package/dist/server/env.d.mts +23 -0
  59. package/dist/server/env.d.ts +23 -0
  60. package/dist/server/env.js +7 -0
  61. package/dist/server/env.js.map +1 -0
  62. package/dist/server/env.mjs +7 -0
  63. package/dist/server/{index-DI_qlYx3.d.mts → index-BL66CU6d.d.mts} +2 -2
  64. package/dist/server/{index-Bucs6UqG.d.mts → index-Bkva0WAj.d.mts} +1 -1
  65. package/dist/server/{index-BTwWvSBu.d.ts → index-CJk9iQQW.d.ts} +2 -2
  66. package/dist/server/{index-Cp7tJuRt.d.ts → index-CSBWKA3r.d.ts} +1 -1
  67. package/dist/server/index.d.mts +3 -3
  68. package/dist/server/index.d.ts +3 -3
  69. package/dist/server/index.js +2 -3
  70. package/dist/server/index.js.map +1 -1
  71. package/dist/server/index.mjs +1 -2
  72. package/dist/server/index.mjs.map +1 -1
  73. package/dist/server/{loadContent-DmgpFcFC.d.ts → loadContent-CXUWMuzY.d.ts} +2 -2
  74. package/dist/server/{loadContent-C-YYUKQa.d.mts → loadContent-F_tAS0Nl.d.mts} +2 -2
  75. package/dist/server/{loadPage-IDGVDFBB.js → loadPage-6I7F6GRF.js} +1 -2
  76. package/dist/server/loadPage-6I7F6GRF.js.map +1 -0
  77. package/dist/server/{loadPage-B8mQUUSo.d.mts → loadPage-CxlYLe5K.d.mts} +1 -1
  78. package/dist/server/{loadPage-DNQTTRHL.mjs → loadPage-JI2SML4M.mjs} +1 -2
  79. package/dist/server/{loadPage-DP3nrHBi.d.ts → loadPage-i2r-X5b9.d.ts} +1 -1
  80. package/dist/server/metadata.d.mts +3 -3
  81. package/dist/server/metadata.d.ts +3 -3
  82. package/dist/server/metadata.js +0 -1
  83. package/dist/server/metadata.js.map +1 -1
  84. package/dist/server/metadata.mjs +0 -1
  85. package/dist/server/navigation.js +0 -1
  86. package/dist/server/navigation.js.map +1 -1
  87. package/dist/server/navigation.mjs +0 -1
  88. package/dist/server/next/revalidate.d.mts +66 -0
  89. package/dist/server/next/revalidate.d.ts +66 -0
  90. package/dist/server/next/revalidate.js +59 -0
  91. package/dist/server/next/revalidate.js.map +1 -0
  92. package/dist/server/next/revalidate.mjs +59 -0
  93. package/dist/server/next/revalidate.mjs.map +1 -0
  94. package/dist/server/next/tags.d.mts +78 -0
  95. package/dist/server/next/tags.d.ts +78 -0
  96. package/dist/server/next/tags.js +34 -0
  97. package/dist/server/next/tags.js.map +1 -0
  98. package/dist/server/next/tags.mjs +34 -0
  99. package/dist/server/next/tags.mjs.map +1 -0
  100. package/dist/server/next.d.mts +163 -5
  101. package/dist/server/next.d.ts +163 -5
  102. package/dist/server/next.js +78 -11
  103. package/dist/server/next.js.map +1 -1
  104. package/dist/server/next.mjs +75 -8
  105. package/dist/server/next.mjs.map +1 -1
  106. package/dist/server/rendering/server.d.mts +3 -3
  107. package/dist/server/rendering/server.d.ts +3 -3
  108. package/dist/server/rendering/server.js +0 -1
  109. package/dist/server/rendering/server.js.map +1 -1
  110. package/dist/server/rendering/server.mjs +0 -1
  111. package/dist/server/rendering.d.mts +6 -6
  112. package/dist/server/rendering.d.ts +6 -6
  113. package/dist/server/rendering.js +2 -3
  114. package/dist/server/rendering.js.map +1 -1
  115. package/dist/server/rendering.mjs +3 -4
  116. package/dist/server/routing.d.mts +2 -2
  117. package/dist/server/routing.d.ts +2 -2
  118. package/dist/server/routing.js +2 -4
  119. package/dist/server/routing.js.map +1 -1
  120. package/dist/server/routing.mjs +1 -3
  121. package/dist/server/routing.mjs.map +1 -1
  122. package/dist/server/server.d.mts +4 -4
  123. package/dist/server/server.d.ts +4 -4
  124. package/dist/server/server.js +4 -5
  125. package/dist/server/server.js.map +1 -1
  126. package/dist/server/server.mjs +4 -5
  127. package/dist/server/theme-bridge.js +0 -1
  128. package/dist/server/theme-bridge.js.map +1 -1
  129. package/dist/server/theme-bridge.mjs +0 -1
  130. package/dist/server/theme-bridge.mjs.map +1 -1
  131. package/dist/server/theme.js +1 -3
  132. package/dist/server/theme.js.map +1 -1
  133. package/dist/server/theme.mjs +0 -2
  134. package/dist/server/theme.mjs.map +1 -1
  135. package/dist/server/{types-BvcJU7zk.d.ts → types-DnkRh0UL.d.ts} +118 -9
  136. package/dist/server/{types-1cLz0vnq.d.mts → types-MF2AWoKv.d.mts} +118 -9
  137. package/dist/server/webhooks.d.mts +75 -0
  138. package/dist/server/webhooks.d.ts +75 -0
  139. package/dist/server/webhooks.js +11 -0
  140. package/dist/server/webhooks.js.map +1 -0
  141. package/dist/server/webhooks.mjs +11 -0
  142. package/dist/server/webhooks.mjs.map +1 -0
  143. package/package.json +23 -3
  144. package/dist/server/chunk-7FIJSGHU.mjs.map +0 -1
  145. package/dist/server/chunk-BJTO5JO5.mjs +0 -11
  146. package/dist/server/chunk-DGUM43GV.js +0 -11
  147. package/dist/server/chunk-DGUM43GV.js.map +0 -1
  148. package/dist/server/chunk-P7UVAMK6.js.map +0 -1
  149. package/dist/server/loadPage-IDGVDFBB.js.map +0 -1
  150. /package/dist/server/{chunk-BJTO5JO5.mjs.map → env.mjs.map} +0 -0
  151. /package/dist/server/{loadPage-DNQTTRHL.mjs.map → loadPage-JI2SML4M.mjs.map} +0 -0
@@ -0,0 +1,384 @@
1
+ # Content Management Guide
2
+
3
+ This guide explains the RiverbankCMS content model and how to work with content via the SDK.
4
+
5
+ ## Content Model Overview
6
+
7
+ RiverbankCMS organizes content into four main types:
8
+
9
+ ### 1. Entries
10
+
11
+ Content items for a specific content type (e.g., blog posts, products, team members).
12
+
13
+ - Defined by content types in `riverbank.config.ts`
14
+ - Each entry has an identifier, slug, and type-specific data
15
+ - Can be draft or published
16
+
17
+ **Local file structure:**
18
+
19
+ ```
20
+ content/
21
+ entries/
22
+ blog-post.json # All blog-post entries
23
+ product.json # All product entries
24
+ ```
25
+
26
+ ### 2. Pages
27
+
28
+ Standalone pages that contain blocks.
29
+
30
+ - Have a path (URL), title, and SEO metadata
31
+ - Contain an ordered list of blocks
32
+ - Can be draft or published
33
+
34
+ **Local file structure:**
35
+
36
+ ```
37
+ content/
38
+ pages/
39
+ home.json # Home page with blocks
40
+ about.json # About page with blocks
41
+ ```
42
+
43
+ ### 3. Blocks
44
+
45
+ Content components within pages.
46
+
47
+ - Each block has a kind (e.g., `block.hero`, `block.bodyText`)
48
+ - Contains kind-specific content data
49
+ - Ordered by position within a page
50
+
51
+ **Common block kinds:**
52
+
53
+ | Kind | Description |
54
+ |------|-------------|
55
+ | `block.hero` | Hero/banner sections with heading, image, CTA |
56
+ | `block.bodyText` | Rich text content |
57
+ | `block.image` | Image with caption |
58
+ | `block.cta` | Call-to-action buttons |
59
+ | `block.embed` | Embedded content (videos, etc.) |
60
+
61
+ See `block-types.md` for the full list.
62
+
63
+ ### 4. Navigation
64
+
65
+ Menu structures for site navigation.
66
+
67
+ - Named menus (e.g., "main", "footer")
68
+ - Hierarchical items with labels, URLs, and children
69
+
70
+ **Local file structure:**
71
+
72
+ ```
73
+ content/
74
+ navigation.json # All navigation menus
75
+ ```
76
+
77
+ ---
78
+
79
+ ## Working with Identifiers
80
+
81
+ Identifiers are stable, human-readable names for content:
82
+
83
+ - Used by the SDK to reference content reliably
84
+ - Should be kebab-case (e.g., `my-blog-post`, `about-us`)
85
+ - Are idempotent - upserting with same identifier updates existing content
86
+ - Allow content to be tracked across environments
87
+
88
+ **Examples:**
89
+
90
+ ```bash
91
+ # Entry identifier
92
+ riverbankcms entry upsert blog-post my-first-post --data '...'
93
+
94
+ # Page identifier
95
+ riverbankcms page upsert about --title "About Us" --path /about
96
+
97
+ # Block identifier (within a page)
98
+ riverbankcms block upsert about hero-section --kind block.hero --data '...'
99
+ ```
100
+
101
+ **Backfill identifiers for legacy content:**
102
+
103
+ ```bash
104
+ riverbankcms identifiers backfill
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Draft vs Published
110
+
111
+ All content has a publication status:
112
+
113
+ | Status | Visibility |
114
+ |--------|------------|
115
+ | Draft | Only visible in preview mode |
116
+ | Published | Visible on the live site |
117
+
118
+ New content is created as a draft by default.
119
+
120
+ ### Checking Status
121
+
122
+ ```bash
123
+ # Check entry status
124
+ riverbankcms entry get blog-post my-post
125
+
126
+ # Check page status
127
+ riverbankcms page get about
128
+
129
+ # List with JSON to see status field
130
+ riverbankcms entry list blog-post --json | jq '.items[] | {identifier, status}'
131
+ ```
132
+
133
+ ### Publishing Content
134
+
135
+ ```bash
136
+ # Publish entry
137
+ riverbankcms entry publish blog-post my-post
138
+
139
+ # Publish page
140
+ riverbankcms page publish about
141
+ ```
142
+
143
+ ### Unpublishing Content
144
+
145
+ ```bash
146
+ # Unpublish entry (revert to draft)
147
+ riverbankcms entry unpublish blog-post my-post
148
+
149
+ # Unpublish page
150
+ riverbankcms page unpublish about
151
+ ```
152
+
153
+ ### Unpublished Changes
154
+
155
+ When you modify published content, it stays published but gains unpublished changes. The live site shows the last published version until you publish again.
156
+
157
+ ```bash
158
+ # Check for unpublished changes
159
+ riverbankcms entry get blog-post my-post --json | jq '.hasUnpublishedChanges'
160
+
161
+ # Publish to apply pending changes
162
+ riverbankcms entry publish blog-post my-post
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Content Sync Workflow
168
+
169
+ ### Pulling Content
170
+
171
+ Downloads CMS content to local JSON files:
172
+
173
+ ```bash
174
+ # Pull all content
175
+ riverbankcms pull
176
+
177
+ # Pull specific types
178
+ riverbankcms pull entries
179
+ riverbankcms pull entries blog-post
180
+ riverbankcms pull pages
181
+ riverbankcms pull navigation
182
+ ```
183
+
184
+ **Output directory structure:**
185
+
186
+ ```
187
+ content/
188
+ ├── entries/
189
+ │ ├── blog-post.json
190
+ │ └── product.json
191
+ ├── pages/
192
+ │ ├── home.json
193
+ │ └── about.json
194
+ └── navigation.json
195
+ ```
196
+
197
+ ### Pushing Content
198
+
199
+ Uploads local changes to the CMS:
200
+
201
+ ```bash
202
+ # Preview changes (recommended)
203
+ riverbankcms push --dry-run
204
+
205
+ # Apply changes
206
+ riverbankcms push
207
+ ```
208
+
209
+ ### Sync Configuration
210
+
211
+ Configure sync behavior in `riverbank.config.ts`:
212
+
213
+ ```typescript
214
+ export default defineConfig({
215
+ siteId: '...',
216
+ sync: {
217
+ // How to handle existing entries during push
218
+ existingEntries: 'update', // 'skip' (default) or 'update'
219
+
220
+ // Target state for pushed content
221
+ contentTarget: 'draft', // 'draft' (default) or 'publish'
222
+ },
223
+ });
224
+ ```
225
+
226
+ | Option | Values | Description |
227
+ |--------|--------|-------------|
228
+ | `existingEntries` | `skip`, `update` | Whether to update entries that already exist |
229
+ | `contentTarget` | `draft`, `publish` | Whether pushed content should be draft or published |
230
+
231
+ ---
232
+
233
+ ## Local Content Files
234
+
235
+ ### Entry File Format
236
+
237
+ `content/entries/blog-post.json`:
238
+
239
+ ```json
240
+ [
241
+ {
242
+ "identifier": "my-first-post",
243
+ "slug": "my-first-post",
244
+ "data": {
245
+ "title": "My First Post",
246
+ "content": "<p>Hello world!</p>",
247
+ "publishedAt": "2024-01-15"
248
+ }
249
+ },
250
+ {
251
+ "identifier": "another-post",
252
+ "slug": "another-post",
253
+ "data": {
254
+ "title": "Another Post",
255
+ "content": "<p>More content...</p>"
256
+ }
257
+ }
258
+ ]
259
+ ```
260
+
261
+ ### Page File Format
262
+
263
+ `content/pages/home.json`:
264
+
265
+ ```json
266
+ {
267
+ "identifier": "home",
268
+ "title": "Home",
269
+ "path": "/",
270
+ "seo": {
271
+ "title": "Welcome | My Site",
272
+ "description": "The home page"
273
+ },
274
+ "blocks": [
275
+ {
276
+ "identifier": "hero-main",
277
+ "kind": "block.hero",
278
+ "content": {
279
+ "heading": "Welcome to My Site",
280
+ "subheading": "We build great things"
281
+ }
282
+ },
283
+ {
284
+ "identifier": "intro-text",
285
+ "kind": "block.bodyText",
286
+ "content": {
287
+ "content": "<p>Introduction text here...</p>"
288
+ }
289
+ }
290
+ ]
291
+ }
292
+ ```
293
+
294
+ ### Navigation File Format
295
+
296
+ `content/navigation.json`:
297
+
298
+ ```json
299
+ {
300
+ "main": [
301
+ { "label": "Home", "url": "/" },
302
+ { "label": "About", "url": "/about" },
303
+ {
304
+ "label": "Products",
305
+ "url": "/products",
306
+ "children": [
307
+ { "label": "Category A", "url": "/products/a" },
308
+ { "label": "Category B", "url": "/products/b" }
309
+ ]
310
+ }
311
+ ],
312
+ "footer": [
313
+ { "label": "Privacy", "url": "/privacy" },
314
+ { "label": "Terms", "url": "/terms" }
315
+ ]
316
+ }
317
+ ```
318
+
319
+ ---
320
+
321
+ ## Configuration Reference
322
+
323
+ ### riverbank.config.ts
324
+
325
+ Main SDK configuration:
326
+
327
+ ```typescript
328
+ import { defineConfig } from '@riverbankcms/sdk';
329
+
330
+ export default defineConfig({
331
+ // Required: Your site ID
332
+ siteId: 'your-site-id',
333
+
334
+ // Custom blocks (see schema.md)
335
+ customBlocks: [...],
336
+
337
+ // Extend built-in blocks with new fields
338
+ blockFieldExtensions: {...},
339
+
340
+ // Override select field options
341
+ blockFieldOptions: {...},
342
+
343
+ // Content scaffolding
344
+ content: {
345
+ contentTypes: [...],
346
+ pages: [...],
347
+ entries: {...},
348
+ navigation: {...},
349
+ },
350
+
351
+ // Sync settings
352
+ sync: {
353
+ existingEntries: 'update',
354
+ contentTarget: 'draft',
355
+ },
356
+ });
357
+ ```
358
+
359
+ ### Environment Variables
360
+
361
+ Local development (default):
362
+
363
+ ```bash
364
+ RIVERBANK_LOCAL_SITE_ID=your-site-id
365
+ RIVERBANK_LOCAL_DASHBOARD_URL=http://localhost:4000
366
+ RIVERBANK_LOCAL_MGMT_API_KEY=bld_mgmt_sk_...
367
+ ```
368
+
369
+ Production (`--remote` flag):
370
+
371
+ ```bash
372
+ RIVERBANK_REMOTE_SITE_ID=your-site-id
373
+ RIVERBANK_REMOTE_DASHBOARD_URL=https://your-dashboard.riverbankcms.com
374
+ RIVERBANK_REMOTE_MGMT_API_KEY=bld_mgmt_sk_...
375
+ ```
376
+
377
+ ---
378
+
379
+ ## Related Documentation
380
+
381
+ - `cli-reference.md` - Full CLI command reference
382
+ - `schema.md` - This site's content types and custom blocks
383
+ - `block-types.md` - Available block types
384
+ - `workflows/` - Step-by-step guides for common tasks
@@ -0,0 +1,125 @@
1
+ # Brand Assets
2
+
3
+ This document helps AI agents understand the visual brand identity for consistent content creation.
4
+
5
+ ## Purpose
6
+
7
+ Document brand assets and guidelines including:
8
+
9
+ - Logo usage and variations
10
+ - Color palette
11
+ - Typography
12
+ - Image and illustration style
13
+ - Design patterns
14
+
15
+ ## Color Palette
16
+
17
+ Define the brand colors:
18
+
19
+ ```
20
+ Primary: #______ (e.g., #0066CC - main brand color)
21
+ Secondary: #______ (e.g., #00CC66 - accent color)
22
+ Accent: #______ (e.g., #CC6600 - highlight color)
23
+
24
+ Neutrals:
25
+ - Dark: #______ (e.g., #1A1A1A - headings, body text)
26
+ - Medium: #______ (e.g., #666666 - secondary text)
27
+ - Light: #______ (e.g., #F5F5F5 - backgrounds)
28
+ - White: #FFFFFF
29
+
30
+ Status:
31
+ - Success: #______ (e.g., #22C55E)
32
+ - Warning: #______ (e.g., #F59E0B)
33
+ - Error: #______ (e.g., #EF4444)
34
+ - Info: #______ (e.g., #3B82F6)
35
+ ```
36
+
37
+ ## Typography
38
+
39
+ Define the font families:
40
+
41
+ ```
42
+ Headings: [Font Name], [weight] (e.g., Inter, bold)
43
+ Body: [Font Name], [weight] (e.g., Inter, regular)
44
+ Code: [Font Name] (e.g., JetBrains Mono)
45
+ ```
46
+
47
+ **Heading sizes:**
48
+ - H1: (e.g., 48px / 3rem)
49
+ - H2: (e.g., 36px / 2.25rem)
50
+ - H3: (e.g., 24px / 1.5rem)
51
+ - H4: (e.g., 20px / 1.25rem)
52
+
53
+ **Body text:** (e.g., 16px / 1rem, line-height 1.6)
54
+
55
+ ## Logo Files
56
+
57
+ Reference paths to logo files:
58
+
59
+ | Variant | Path | Usage |
60
+ |---------|------|-------|
61
+ | Primary | `/public/logo.svg` | Main logo for light backgrounds |
62
+ | Dark mode | `/public/logo-dark.svg` | For dark backgrounds |
63
+ | Icon only | `/public/logo-icon.svg` | Favicon, small spaces |
64
+ | Full width | `/public/logo-full.svg` | Header, large displays |
65
+
66
+ **Logo usage guidelines:**
67
+ - Minimum clear space: (e.g., equal to the height of the logomark)
68
+ - Minimum size: (e.g., 100px width for full logo, 24px for icon)
69
+ - Don't stretch, rotate, or alter colors
70
+
71
+ ## Image Style
72
+
73
+ Guidelines for imagery:
74
+
75
+ **Photography:**
76
+ - Style: (e.g., bright and modern, lifestyle-focused, professional)
77
+ - Subjects: (e.g., people using products, workspace shots, abstract)
78
+ - Avoid: (e.g., stock photo cliches, outdated imagery)
79
+
80
+ **Illustrations:**
81
+ - Style: (e.g., flat design, 3D, hand-drawn, geometric)
82
+ - Color usage: (e.g., use brand colors only, limited palette)
83
+
84
+ **Aspect ratios:**
85
+ - Hero images: (e.g., 16:9, 1920x1080 minimum)
86
+ - Blog thumbnails: (e.g., 3:2, 1200x800)
87
+ - Social sharing: (e.g., 1.91:1 for Open Graph)
88
+
89
+ ## Icons
90
+
91
+ Icon style and sources:
92
+
93
+ - **Icon set**: (e.g., Lucide, Heroicons, custom)
94
+ - **Style**: (e.g., outline, solid, duotone)
95
+ - **Size**: (e.g., 24px default, 16px small, 32px large)
96
+ - **Color**: (e.g., inherit from text, or specific brand color)
97
+
98
+ ## Example Completed Section
99
+
100
+ ```markdown
101
+ ## Color Palette
102
+
103
+ Primary: #2563EB (Blue - main brand color)
104
+ Secondary: #10B981 (Green - success states, CTAs)
105
+ Accent: #8B5CF6 (Purple - highlights)
106
+
107
+ Neutrals:
108
+ - Dark: #111827 (Gray 900 - headings)
109
+ - Medium: #6B7280 (Gray 500 - body text)
110
+ - Light: #F9FAFB (Gray 50 - backgrounds)
111
+ - White: #FFFFFF
112
+
113
+ ## Typography
114
+
115
+ Headings: Inter, semibold (600)
116
+ Body: Inter, regular (400)
117
+ Code: Fira Code, regular
118
+
119
+ ## Image Style
120
+
121
+ Photography: Clean, bright, professional. Real people in real workspaces.
122
+ Illustrations: Flat design with brand colors. Simple, modern, friendly.
123
+
124
+ Avoid: Dark/moody imagery, overly complex graphics, generic stock photos.
125
+ ```
@@ -0,0 +1,77 @@
1
+ # Site Brief
2
+
3
+ This document helps AI agents understand the brand, tone, and goals for this site. Fill in the sections below to provide context for content creation.
4
+
5
+ ## Brand Voice
6
+
7
+ Describe how the brand communicates:
8
+
9
+ - **Tone**: (e.g., professional, friendly, technical, casual, authoritative)
10
+ - **Personality**: (e.g., helpful, innovative, trustworthy, playful)
11
+ - **Language style**: (e.g., simple and direct, detailed and thorough, conversational)
12
+
13
+ **Words/phrases to use:**
14
+ - (Add brand-appropriate terminology)
15
+
16
+ **Words/phrases to avoid:**
17
+ - (Add terms that don't fit the brand)
18
+
19
+ ## Target Audience
20
+
21
+ Who is this site for?
22
+
23
+ - **Primary audience**: (e.g., small business owners, developers, enterprise teams)
24
+ - **Secondary audience**: (if applicable)
25
+ - **Technical level**: (e.g., beginner, intermediate, expert)
26
+ - **Key pain points**: (what problems are they trying to solve?)
27
+
28
+ ## Site Purpose
29
+
30
+ What is this site meant to achieve?
31
+
32
+ - **Primary goal**: (e.g., generate leads, sell products, provide information)
33
+ - **Secondary goals**: (e.g., build brand awareness, support customers)
34
+ - **Key user journeys**: (what should visitors do on the site?)
35
+
36
+ ## Content Guidelines
37
+
38
+ Standards for content creation:
39
+
40
+ - **Preferred content length**: (e.g., blog posts 800-1200 words)
41
+ - **Heading style**: (e.g., sentence case, title case)
42
+ - **Image requirements**: (e.g., minimum resolution, preferred aspect ratios)
43
+ - **SEO focus areas**: (key topics or keywords)
44
+
45
+ ## Example
46
+
47
+ ```markdown
48
+ ## Brand Voice
49
+
50
+ - **Tone**: Professional but approachable
51
+ - **Personality**: Helpful, knowledgeable, straightforward
52
+ - **Language style**: Clear and concise, avoid jargon unless necessary
53
+
54
+ **Words to use:** streamline, efficient, simple, powerful, reliable
55
+ **Words to avoid:** synergy, leverage, disrupt, revolutionary
56
+
57
+ ## Target Audience
58
+
59
+ - **Primary**: Small to medium business owners looking for a CMS
60
+ - **Technical level**: Intermediate - comfortable with technology but not developers
61
+ - **Pain points**: Current CMS is too complex, need better content management
62
+
63
+ ## Site Purpose
64
+
65
+ - **Primary goal**: Convert visitors to trial signups
66
+ - **Key journeys**:
67
+ 1. Learn about features → Start free trial
68
+ 2. Read case studies → Request demo
69
+ 3. Check pricing → Choose plan
70
+
71
+ ## Content Guidelines
72
+
73
+ - Blog posts: 1000-1500 words
74
+ - All headings in sentence case
75
+ - Include at least one image per blog post
76
+ - Focus on "headless CMS" and "content management" keywords
77
+ ```
@@ -0,0 +1,111 @@
1
+ # Knowledge Base
2
+
3
+ This directory stores domain knowledge, reference information, and facts that AI agents need when working with this site's content.
4
+
5
+ ## Purpose
6
+
7
+ Help agents understand:
8
+
9
+ - Industry terminology and definitions
10
+ - Product or service details
11
+ - Technical specifications
12
+ - Frequently asked questions
13
+ - Reference data and statistics
14
+
15
+ ## Suggested Organization
16
+
17
+ Create files for different knowledge areas:
18
+
19
+ | File | Purpose |
20
+ |------|---------|
21
+ | `products.md` | Product catalog, features, specifications |
22
+ | `services.md` | Service offerings and descriptions |
23
+ | `faq.md` | Common questions and answers |
24
+ | `glossary.md` | Industry terms and definitions |
25
+ | `competitors.md` | Competitive landscape and differentiation |
26
+ | `stats.md` | Key statistics and data points |
27
+
28
+ ## Example File Format
29
+
30
+ ### products.md
31
+
32
+ ```markdown
33
+ # Products
34
+
35
+ ## Product: Widget Pro
36
+
37
+ - **SKU**: WP-001
38
+ - **Category**: Automation Tools
39
+ - **Price**: $99/month
40
+ - **Target customer**: Small business teams
41
+
42
+ ### Key Features
43
+ - Feature A: Description of what it does
44
+ - Feature B: Description of what it does
45
+ - Feature C: Description of what it does
46
+
47
+ ### Use Cases
48
+ - Scenario 1: How customers use this
49
+ - Scenario 2: Another common use case
50
+
51
+ ### Comparison to Widget Basic
52
+ - Pro has X, Basic doesn't
53
+ - Pro supports Y users, Basic supports Z
54
+ ```
55
+
56
+ ### glossary.md
57
+
58
+ ```markdown
59
+ # Glossary
60
+
61
+ ## A
62
+
63
+ **API (Application Programming Interface)**
64
+ A set of protocols that allows different software applications to communicate.
65
+
66
+ **Authentication**
67
+ The process of verifying user identity before granting access.
68
+
69
+ ## B
70
+
71
+ **Block**
72
+ A modular content component in RiverbankCMS (e.g., hero, text, image).
73
+
74
+ ## C
75
+
76
+ **CMS (Content Management System)**
77
+ Software for creating, managing, and publishing digital content.
78
+
79
+ **Content Type**
80
+ A defined structure for a category of content (e.g., blog posts, products).
81
+ ```
82
+
83
+ ### faq.md
84
+
85
+ ```markdown
86
+ # Frequently Asked Questions
87
+
88
+ ## General
89
+
90
+ **Q: What is [Product Name]?**
91
+ A: [Product Name] is a [brief description]. It helps [target audience] to [main benefit].
92
+
93
+ **Q: How much does it cost?**
94
+ A: Pricing starts at $X/month. See our pricing page for full details.
95
+
96
+ ## Technical
97
+
98
+ **Q: What integrations are available?**
99
+ A: We integrate with [List of integrations]. Custom integrations are available via our API.
100
+
101
+ **Q: Is there a free trial?**
102
+ A: Yes, we offer a 14-day free trial with full access to all features.
103
+ ```
104
+
105
+ ## Best Practices
106
+
107
+ - Keep information factual and up-to-date
108
+ - Use consistent formatting across files
109
+ - Include dates when information might become outdated
110
+ - Cross-reference related topics
111
+ - Update when products, services, or facts change