@omniharmonic/openspace-cli 0.1.3 → 0.1.5

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 (241) hide show
  1. package/README.md +14 -9
  2. package/dist/{agents-md-7DESZGEN.js → agents-md-PVK5NBFF.js} +3 -2
  3. package/dist/bin.js +4 -2
  4. package/dist/bin.js.map +1 -1
  5. package/dist/chunk-26AZCID5.js +44 -0
  6. package/dist/chunk-26AZCID5.js.map +1 -0
  7. package/dist/{chunk-TQZ5F7VG.js → chunk-RG7S2MUH.js} +13857 -22780
  8. package/dist/chunk-RG7S2MUH.js.map +1 -0
  9. package/dist/{chunk-AAMRGTSI.js → chunk-UQXJVMUV.js} +9116 -855
  10. package/dist/chunk-UQXJVMUV.js.map +1 -0
  11. package/dist/chunk-WE4QCL3R.js +12836 -0
  12. package/dist/chunk-WE4QCL3R.js.map +1 -0
  13. package/dist/crawl-5ZZ5W7B6.js +9 -0
  14. package/dist/crawl-5ZZ5W7B6.js.map +1 -0
  15. package/dist/index.js +4 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/starter/site/AGENTS.md +13 -6
  18. package/dist/templates/atelier/content/pages/about.json +1 -1
  19. package/dist/templates/atelier/content/pages/commissions.json +1 -1
  20. package/dist/templates/atelier/content/pages/contact.json +1 -1
  21. package/dist/templates/atelier/content/pages/home.json +1 -1
  22. package/dist/templates/atelier/content/pages/work.json +1 -1
  23. package/dist/templates/atelier/content/site.json +1 -1
  24. package/dist/templates/atelier/content/styles.json +1 -1
  25. package/dist/templates/atelier/openspace.json +2 -2
  26. package/dist/templates/atelier/template.json +1 -1
  27. package/dist/templates/beacon/content/collections/events/_collection.json +13 -0
  28. package/dist/templates/beacon/content/collections/events/keeper-training-november.mdoc +14 -0
  29. package/dist/templates/beacon/content/collections/events/planting-day-harbour-ward.mdoc +14 -0
  30. package/dist/templates/beacon/content/collections/events/planting-day-linden-north.mdoc +14 -0
  31. package/dist/templates/beacon/content/collections/news/2026-09-12-heat-map-2026.mdoc +13 -0
  32. package/dist/templates/beacon/content/collections/news/2026-09-30-school-gardens-harvest.mdoc +13 -0
  33. package/dist/templates/beacon/content/collections/news/2026-10-14-planting-season-begins.mdoc +13 -0
  34. package/dist/templates/beacon/content/collections/news/_collection.json +16 -0
  35. package/dist/templates/beacon/content/pages/about.json +572 -0
  36. package/dist/templates/beacon/content/pages/contact.json +260 -0
  37. package/dist/templates/beacon/content/pages/donate.json +406 -0
  38. package/dist/templates/beacon/content/pages/get-involved.json +412 -0
  39. package/dist/templates/beacon/content/pages/home.json +701 -0
  40. package/dist/templates/beacon/content/pages/our-work.json +855 -0
  41. package/dist/templates/beacon/content/site.json +363 -0
  42. package/dist/templates/beacon/content/styles.json +17 -0
  43. package/dist/templates/beacon/media/LICENSES.json +163 -0
  44. package/dist/templates/beacon/openspace.json +21 -0
  45. package/dist/templates/beacon/template.json +113 -0
  46. package/dist/templates/commons/content/pages/about.json +1 -1
  47. package/dist/templates/commons/content/pages/{members.json → directory.json} +16 -16
  48. package/dist/templates/commons/content/pages/home.json +2 -2
  49. package/dist/templates/commons/content/pages/join.json +1 -1
  50. package/dist/templates/commons/content/site.json +3 -3
  51. package/dist/templates/commons/content/styles.json +1 -1
  52. package/dist/templates/commons/openspace.json +2 -2
  53. package/dist/templates/commons/template.json +3 -3
  54. package/dist/templates/darkroom/content/collections/work/_collection.json +13 -0
  55. package/dist/templates/darkroom/content/collections/work/after-hours.mdoc +28 -0
  56. package/dist/templates/darkroom/content/collections/work/dry-season.mdoc +28 -0
  57. package/dist/templates/darkroom/content/collections/work/faces-of-the-guild.mdoc +28 -0
  58. package/dist/templates/darkroom/content/collections/work/two-weddings.mdoc +28 -0
  59. package/dist/templates/darkroom/content/collections/work/white-lines.mdoc +28 -0
  60. package/dist/templates/darkroom/content/pages/about.json +449 -0
  61. package/dist/templates/darkroom/content/pages/contact.json +185 -0
  62. package/dist/templates/darkroom/content/pages/home.json +636 -0
  63. package/dist/templates/darkroom/content/pages/services.json +636 -0
  64. package/dist/templates/darkroom/content/site.json +264 -0
  65. package/dist/templates/darkroom/content/styles.json +17 -0
  66. package/dist/templates/darkroom/media/LICENSES.json +284 -0
  67. package/dist/templates/darkroom/openspace.json +21 -0
  68. package/dist/templates/darkroom/template.json +103 -0
  69. package/dist/templates/encore/content/pages/about.json +1 -1
  70. package/dist/templates/encore/content/pages/contact.json +1 -1
  71. package/dist/templates/encore/content/pages/home.json +87 -1
  72. package/dist/templates/encore/content/pages/music.json +1 -1
  73. package/dist/templates/encore/content/site.json +1 -1
  74. package/dist/templates/encore/content/styles.json +1 -1
  75. package/dist/templates/encore/media/LICENSES.json +22 -0
  76. package/dist/templates/encore/openspace.json +2 -2
  77. package/dist/templates/encore/template.json +1 -1
  78. package/dist/templates/field-notes/content/pages/about.json +1 -1
  79. package/dist/templates/field-notes/content/pages/contact.json +1 -1
  80. package/dist/templates/field-notes/content/pages/home.json +95 -1
  81. package/dist/templates/field-notes/content/pages/subscribe.json +1 -1
  82. package/dist/templates/field-notes/content/site.json +1 -1
  83. package/dist/templates/field-notes/content/styles.json +1 -1
  84. package/dist/templates/field-notes/openspace.json +2 -2
  85. package/dist/templates/field-notes/template.json +1 -1
  86. package/dist/templates/fixwell/content/pages/about.json +508 -0
  87. package/dist/templates/fixwell/content/pages/contact.json +321 -0
  88. package/dist/templates/fixwell/content/pages/home.json +888 -0
  89. package/dist/templates/fixwell/content/pages/pricing.json +467 -0
  90. package/dist/templates/fixwell/content/pages/services.json +648 -0
  91. package/dist/templates/fixwell/content/site.json +293 -0
  92. package/dist/templates/fixwell/content/styles.json +17 -0
  93. package/dist/templates/fixwell/media/LICENSES.json +119 -0
  94. package/dist/templates/fixwell/openspace.json +21 -0
  95. package/dist/templates/fixwell/template.json +108 -0
  96. package/dist/templates/folio/content/collections/projects/_collection.json +13 -0
  97. package/dist/templates/folio/content/collections/projects/field-notes-app.mdoc +28 -0
  98. package/dist/templates/folio/content/collections/projects/harbour-health-dashboards.mdoc +28 -0
  99. package/dist/templates/folio/content/collections/projects/open-budget.mdoc +28 -0
  100. package/dist/templates/folio/content/collections/projects/transit-times.mdoc +28 -0
  101. package/dist/templates/folio/content/collections/writing/2026-08-30-designing-for-night-shifts.mdoc +9 -0
  102. package/dist/templates/folio/content/collections/writing/2026-09-20-testing-with-real-data.mdoc +9 -0
  103. package/dist/templates/folio/content/collections/writing/2026-10-12-one-honest-number.mdoc +9 -0
  104. package/dist/templates/folio/content/collections/writing/_collection.json +16 -0
  105. package/dist/templates/folio/content/pages/about.json +366 -0
  106. package/dist/templates/folio/content/pages/contact.json +218 -0
  107. package/dist/templates/folio/content/pages/experience.json +552 -0
  108. package/dist/templates/folio/content/pages/home.json +410 -0
  109. package/dist/templates/folio/content/site.json +186 -0
  110. package/dist/templates/folio/content/styles.json +17 -0
  111. package/dist/templates/folio/media/LICENSES.json +229 -0
  112. package/dist/templates/folio/openspace.json +21 -0
  113. package/dist/templates/folio/template.json +103 -0
  114. package/dist/templates/gather/content/collections/fringe/_collection.json +13 -0
  115. package/dist/templates/gather/content/collections/fringe/library-open-studio.mdoc +14 -0
  116. package/dist/templates/gather/content/collections/fringe/morning-run.mdoc +14 -0
  117. package/dist/templates/gather/content/collections/fringe/plain-language-pub-quiz.mdoc +14 -0
  118. package/dist/templates/gather/content/pages/about.json +435 -0
  119. package/dist/templates/gather/content/pages/contact.json +196 -0
  120. package/dist/templates/gather/content/pages/home.json +527 -0
  121. package/dist/templates/gather/content/pages/programme.json +449 -0
  122. package/dist/templates/gather/content/pages/speakers.json +225 -0
  123. package/dist/templates/gather/content/pages/tickets.json +495 -0
  124. package/dist/templates/gather/content/pages/venue.json +382 -0
  125. package/dist/templates/gather/content/site.json +222 -0
  126. package/dist/templates/gather/content/styles.json +17 -0
  127. package/dist/templates/gather/media/LICENSES.json +185 -0
  128. package/dist/templates/gather/openspace.json +21 -0
  129. package/dist/templates/gather/template.json +118 -0
  130. package/dist/templates/harbor/content/pages/about.json +1 -1
  131. package/dist/templates/harbor/content/pages/contact.json +1 -1
  132. package/dist/templates/harbor/content/pages/get-involved.json +1 -1
  133. package/dist/templates/harbor/content/pages/home.json +1 -1
  134. package/dist/templates/harbor/content/pages/programs.json +1 -1
  135. package/dist/templates/harbor/content/site.json +1 -1
  136. package/dist/templates/harbor/content/styles.json +1 -1
  137. package/dist/templates/harbor/openspace.json +2 -2
  138. package/dist/templates/harbor/template.json +1 -1
  139. package/dist/templates/hearth/content/pages/about.json +1 -1
  140. package/dist/templates/hearth/content/pages/home.json +1 -1
  141. package/dist/templates/hearth/content/pages/menu.json +1 -1
  142. package/dist/templates/hearth/content/pages/private-dining.json +1 -1
  143. package/dist/templates/hearth/content/pages/visit.json +1 -1
  144. package/dist/templates/hearth/content/site.json +1 -1
  145. package/dist/templates/hearth/content/styles.json +1 -1
  146. package/dist/templates/hearth/openspace.json +2 -2
  147. package/dist/templates/hearth/template.json +1 -1
  148. package/dist/templates/inkwell/content/collections/essays/2026-09-17-notebooks.mdoc +13 -0
  149. package/dist/templates/inkwell/content/collections/essays/2026-10-01-kitchen-radio.mdoc +13 -0
  150. package/dist/templates/inkwell/content/collections/essays/2026-10-15-the-same-mile.mdoc +13 -0
  151. package/dist/templates/inkwell/content/collections/essays/_collection.json +21 -0
  152. package/dist/templates/inkwell/content/pages/about.json +281 -0
  153. package/dist/templates/inkwell/content/pages/books.json +459 -0
  154. package/dist/templates/inkwell/content/pages/contact.json +201 -0
  155. package/dist/templates/inkwell/content/pages/home.json +457 -0
  156. package/dist/templates/inkwell/content/pages/speaking.json +522 -0
  157. package/dist/templates/inkwell/content/site.json +222 -0
  158. package/dist/templates/inkwell/content/styles.json +17 -0
  159. package/dist/templates/inkwell/media/LICENSES.json +119 -0
  160. package/dist/templates/inkwell/openspace.json +21 -0
  161. package/dist/templates/inkwell/template.json +108 -0
  162. package/dist/templates/keystone/content/collections/notes/2026-09-17-hard-conversations.mdoc +11 -0
  163. package/dist/templates/keystone/content/collections/notes/2026-10-01-weekly-rhythm.mdoc +11 -0
  164. package/dist/templates/keystone/content/collections/notes/2026-10-15-the-first-manager.mdoc +11 -0
  165. package/dist/templates/keystone/content/collections/notes/_collection.json +21 -0
  166. package/dist/templates/keystone/content/pages/about.json +371 -0
  167. package/dist/templates/keystone/content/pages/contact.json +207 -0
  168. package/dist/templates/keystone/content/pages/home.json +815 -0
  169. package/dist/templates/keystone/content/pages/results.json +396 -0
  170. package/dist/templates/keystone/content/pages/work-with-me.json +477 -0
  171. package/dist/templates/keystone/content/site.json +224 -0
  172. package/dist/templates/keystone/content/styles.json +17 -0
  173. package/dist/templates/keystone/media/LICENSES.json +75 -0
  174. package/dist/templates/keystone/openspace.json +21 -0
  175. package/dist/templates/keystone/template.json +108 -0
  176. package/dist/templates/kiln/content/pages/about.json +1 -1
  177. package/dist/templates/kiln/content/pages/contact.json +1 -1
  178. package/dist/templates/kiln/content/pages/home.json +1 -1
  179. package/dist/templates/kiln/content/pages/workshops.json +1 -1
  180. package/dist/templates/kiln/content/site.json +1 -1
  181. package/dist/templates/kiln/content/styles.json +1 -1
  182. package/dist/templates/kiln/openspace.json +2 -2
  183. package/dist/templates/kiln/template.json +1 -1
  184. package/dist/templates/ledger/content/pages/about.json +1 -1
  185. package/dist/templates/ledger/content/pages/contact.json +1 -1
  186. package/dist/templates/ledger/content/pages/home.json +63 -1
  187. package/dist/templates/ledger/content/pages/services.json +1 -1
  188. package/dist/templates/ledger/content/site.json +1 -1
  189. package/dist/templates/ledger/content/styles.json +1 -1
  190. package/dist/templates/ledger/openspace.json +2 -2
  191. package/dist/templates/ledger/template.json +1 -1
  192. package/dist/templates/link/content/pages/home.json +1 -1
  193. package/dist/templates/link/content/site.json +1 -1
  194. package/dist/templates/link/content/styles.json +1 -1
  195. package/dist/templates/link/openspace.json +2 -2
  196. package/dist/templates/link/template.json +1 -1
  197. package/dist/templates/meadow/content/pages/about.json +1 -1
  198. package/dist/templates/meadow/content/pages/bodywork.json +1 -1
  199. package/dist/templates/meadow/content/pages/classes.json +1 -1
  200. package/dist/templates/meadow/content/pages/contact.json +1 -1
  201. package/dist/templates/meadow/content/pages/home.json +1 -1
  202. package/dist/templates/meadow/content/site.json +1 -1
  203. package/dist/templates/meadow/content/styles.json +1 -1
  204. package/dist/templates/meadow/openspace.json +2 -2
  205. package/dist/templates/meadow/template.json +1 -1
  206. package/dist/templates/orbit/content/collections/changelog/2026-09-21-faster-attachments.mdoc +11 -0
  207. package/dist/templates/orbit/content/collections/changelog/2026-10-05-snooze-until-reply.mdoc +11 -0
  208. package/dist/templates/orbit/content/collections/changelog/2026-10-19-help-centre-search.mdoc +13 -0
  209. package/dist/templates/orbit/content/collections/changelog/_collection.json +39 -0
  210. package/dist/templates/orbit/content/pages/about.json +396 -0
  211. package/dist/templates/orbit/content/pages/contact.json +195 -0
  212. package/dist/templates/orbit/content/pages/features.json +603 -0
  213. package/dist/templates/orbit/content/pages/home.json +1273 -0
  214. package/dist/templates/orbit/content/pages/pricing.json +608 -0
  215. package/dist/templates/orbit/content/site.json +368 -0
  216. package/dist/templates/orbit/content/styles.json +17 -0
  217. package/dist/templates/orbit/media/LICENSES.json +141 -0
  218. package/dist/templates/orbit/openspace.json +21 -0
  219. package/dist/templates/orbit/template.json +108 -0
  220. package/dist/templates/signal/content/pages/about.json +1 -1
  221. package/dist/templates/signal/content/pages/contact.json +1 -1
  222. package/dist/templates/signal/content/pages/home.json +1 -1
  223. package/dist/templates/signal/content/pages/pricing.json +1 -1
  224. package/dist/templates/signal/content/site.json +1 -1
  225. package/dist/templates/signal/content/styles.json +1 -1
  226. package/dist/templates/signal/openspace.json +2 -2
  227. package/dist/templates/signal/template.json +1 -1
  228. package/dist/templates/vow/content/pages/about.json +1 -1
  229. package/dist/templates/vow/content/pages/home.json +1 -1
  230. package/dist/templates/vow/content/pages/registry.json +1 -1
  231. package/dist/templates/vow/content/pages/rsvp.json +1 -1
  232. package/dist/templates/vow/content/pages/schedule.json +1 -1
  233. package/dist/templates/vow/content/pages/travel.json +1 -1
  234. package/dist/templates/vow/content/site.json +1 -1
  235. package/dist/templates/vow/content/styles.json +1 -1
  236. package/dist/templates/vow/openspace.json +2 -2
  237. package/dist/templates/vow/template.json +1 -1
  238. package/package.json +7 -7
  239. package/dist/chunk-AAMRGTSI.js.map +0 -1
  240. package/dist/chunk-TQZ5F7VG.js.map +0 -1
  241. /package/dist/{agents-md-7DESZGEN.js.map → agents-md-PVK5NBFF.js.map} +0 -0
@@ -0,0 +1,9 @@
1
+ import { createRequire as __osCreateRequire } from "node:module"; const require = __osCreateRequire(import.meta.url);
2
+ import {
3
+ crawlGeneric
4
+ } from "./chunk-WE4QCL3R.js";
5
+ import "./chunk-26AZCID5.js";
6
+ export {
7
+ crawlGeneric
8
+ };
9
+ //# sourceMappingURL=crawl-5ZZ5W7B6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/index.js CHANGED
@@ -6,8 +6,10 @@ import {
6
6
  formatReport,
7
7
  run,
8
8
  runCheck
9
- } from "./chunk-TQZ5F7VG.js";
10
- import "./chunk-AAMRGTSI.js";
9
+ } from "./chunk-RG7S2MUH.js";
10
+ import "./chunk-WE4QCL3R.js";
11
+ import "./chunk-UQXJVMUV.js";
12
+ import "./chunk-26AZCID5.js";
11
13
 
12
14
  // src/index.ts
13
15
  var name = "@omniharmonic/openspace-cli";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export const name = \"@omniharmonic/openspace-cli\";\n\nexport {\n type Budgets,\n type CheckOptions,\n type CheckReport,\n DEFAULT_BUDGETS,\n type Finding,\n formatReport,\n runCheck,\n} from \"./check\";\nexport { createProgram, run, VERSION } from \"./program\";\n"],"mappings":";;;;;;;;;;;;AAAO,IAAM,OAAO;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export const name = \"@omniharmonic/openspace-cli\";\n\nexport {\n type Budgets,\n type CheckOptions,\n type CheckReport,\n DEFAULT_BUDGETS,\n type Finding,\n formatReport,\n runCheck,\n} from \"./check\";\nexport { createProgram, run, VERSION } from \"./program\";\n"],"mappings":";;;;;;;;;;;;;;AAAO,IAAM,OAAO;","names":[]}
@@ -13,7 +13,7 @@ changes land on `main` (`.github/workflows/publish.yml`).
13
13
  and form (`frm_`) has a stable id. Keep ids when editing; new ids are the prefix plus 10
14
14
  lowercase Crockford base32 characters (no i, l, o, u).
15
15
  3. **Only valid block types and fields** (listed below; full JSON Schema at
16
- https://schema.openspace.dev/v1/). Unknown fields fail the build.
16
+ https://schema.openspace.host/v1/). Unknown fields fail the build.
17
17
  4. **Styles change through tokens** in `content/styles.json` (palette, type pairing, density,
18
18
  shape…), never inline CSS. Sections pick one of five color themes.
19
19
  5. **Never put secrets in content** (API keys, tokens, passwords). `openspace check` fails on them.
@@ -28,7 +28,7 @@ changes land on `main` (`.github/workflows/publish.yml`).
28
28
  ## Layout
29
29
 
30
30
  ```
31
- openspace.json site id, Hub URL, deploy target, features (https://schema.openspace.dev/v1/site-config.json)
31
+ openspace.json site id, Hub URL, deploy target, features (https://schema.openspace.host/v1/site-config.json)
32
32
  content/site.json title, navigation, header, footer, SEO defaults, redirects
33
33
  content/styles.json design tokens and Site Styles choices
34
34
  content/media.json metadata for files in media/ (alt text, size, focal point, credit)
@@ -109,7 +109,7 @@ A clear call to action linking to a page, booking tool, email or file. Use: Once
109
109
  One self-contained item — a service, offer, event or article teaser — with an optional link. Use: Place 2–4 cards side by side in stack columns for services or offers. `overlay` sets text on the photo; `horizontal` suits wide columns. Avoid: Long body text (keep under ~40 words); different aspect ratios across cards in a row.
110
110
 
111
111
  - Variants: `stacked`, `horizontal`, `overlay`, `minimal`
112
- - Fields: `image?: image { src, alt }`, `aspect: "original" | "1:1" | "4:5" | "2:3" | "3:2" | "16:9" | "21:9"`, `icon?: "check" | "star" | "heart" | "leaf" | "sprout" | "flower" | "sun" | "moon" | "sparkles" | "mountain" | "waves" | "map-pin" | "phone" | "mail" | "message-circle" | "clock" | "calendar" | "coffee" | "utensils" | "music" | "camera" | "palette" | "brush" | "book-open" | "graduation-cap" | "user" | "users" | "heart-handshake" | "home" | "shield-check" | "lock" | "award" | "target" | "lightbulb" | "zap" | "rocket" | "gift" | "shopping-bag" | "package" | "truck" | "recycle" | "globe" | "wifi" | "car" | "bike" | "dumbbell" | "accessibility" | "baby" | "dog" | "paw-print" | "scissors" | "wrench" | "arrow-right"`, `eyebrow?: text ≤ 40`, `heading: text ≤ 90`, `body: richText`, `link?: link`, `linkLabel?: text ≤ 30`
112
+ - Fields: `image?: image { src, alt }`, `aspect: "original" | "1:1" | "4:5" | "2:3" | "3:2" | "16:9" | "21:9"`, `icon?: "check" | "star" | "heart" | "leaf" | "sprout" | "flower" | "sun" | "moon" | "sparkles" | "mountain" | "waves" | "map-pin" | "phone" | "mail" | "message-circle" | "clock" | "calendar" | "coffee" | "utensils" | "music" | "camera" | "palette" | "brush" | "book-open" | "graduation-cap" | "user" | "users" | "heart-handshake" | "home" | "shield-check" | "lock" | "award" | "target" | "lightbulb" | "zap" | "rocket" | "gift" | "shopping-bag" | "package" | "truck" | "recycle" | "globe" | "wifi" | "car" | "bike" | "dumbbell" | "accessibility" | "baby" | "dog" | "paw-print" | "scissors" | "wrench" | "arrow-right" | "minus" | "x" | "trending-up" | "layers" | "code" | "plug" | "headphones" | "briefcase" | "droplet" | "hammer" | "flame" | "ticket" | "mic" | "pen-tool" | "feather" | "chart-bar" | "timer" | "hand-heart" | "plane" | "bed" | "building" | "ruler" | "search" | "smartphone" | "cloud" | "repeat" | "percent" | "handshake" | "stethoscope" | "gauge" | "workflow" | "puzzle" | "wine" | "cake" | "tent" | "eye" | "image" | "file-text" | "video" | "key-round"`, `eyebrow?: text ≤ 40`, `heading: text ≤ 90`, `body: richText`, `link?: link`, `linkLabel?: text ≤ 30`
113
113
 
114
114
  ### `chart` — Chart
115
115
 
@@ -200,7 +200,7 @@ When a place is open, day by day. Use: Contact, visit and footer areas of shops,
200
200
  A scannable list of features, amenities, benefits or what's included. Use: Services and pricing pages, 'what to expect' sections. 3–8 items. Avoid: Using icons that don't match the meaning; paragraphs instead of one-line points.
201
201
 
202
202
  - Variants: `list`, `tiles`, `checklist`
203
- - Fields: `items: list of { icon: "check" | "star" | "heart" | "leaf" | "sprout" | "flower" | "sun" | "moon" | "sparkles" | "mountain" | "waves" | "map-pin" | "phone" | "mail" | "message-circle" | "clock" | "calendar" | "coffee" | "utensils" | "music" | "camera" | "palette" | "brush" | "book-open" | "graduation-cap" | "user" | "users" | "heart-handshake" | "home" | "shield-check" | "lock" | "award" | "target" | "lightbulb" | "zap" | "rocket" | "gift" | "shopping-bag" | "package" | "truck" | "recycle" | "globe" | "wifi" | "car" | "bike" | "dumbbell" | "accessibility" | "baby" | "dog" | "paw-print" | "scissors" | "wrench" | "arrow-right", title: text ≤ 60, text?: text ≤ 200 }`, `columns: "1" | "2" | "3" | "4"`
203
+ - Fields: `items: list of { icon: "check" | "star" | "heart" | "leaf" | "sprout" | "flower" | "sun" | "moon" | "sparkles" | "mountain" | "waves" | "map-pin" | "phone" | "mail" | "message-circle" | "clock" | "calendar" | "coffee" | "utensils" | "music" | "camera" | "palette" | "brush" | "book-open" | "graduation-cap" | "user" | "users" | "heart-handshake" | "home" | "shield-check" | "lock" | "award" | "target" | "lightbulb" | "zap" | "rocket" | "gift" | "shopping-bag" | "package" | "truck" | "recycle" | "globe" | "wifi" | "car" | "bike" | "dumbbell" | "accessibility" | "baby" | "dog" | "paw-print" | "scissors" | "wrench" | "arrow-right" | "minus" | "x" | "trending-up" | "layers" | "code" | "plug" | "headphones" | "briefcase" | "droplet" | "hammer" | "flame" | "ticket" | "mic" | "pen-tool" | "feather" | "chart-bar" | "timer" | "hand-heart" | "plane" | "bed" | "building" | "ruler" | "search" | "smartphone" | "cloud" | "repeat" | "percent" | "handshake" | "stethoscope" | "gauge" | "workflow" | "puzzle" | "wine" | "cake" | "tent" | "eye" | "image" | "file-text" | "video" | "key-round", title: text ≤ 60, text?: text ≤ 200 }`, `columns: "1" | "2" | "3" | "4"`
204
204
 
205
205
  ### `image` — Image
206
206
 
@@ -221,7 +221,7 @@ A visual divider between pieces of content. Use: To separate groups inside a sec
221
221
  A link-in-bio list: a few large, tappable links under a photo and one-line bio. Use: On a dedicated links page shared from social profiles, or a compact 'start here' list. Put the most important link first and highlight at most one. Avoid: More than ~8 links; vague labels like 'Click here'; duplicating the main navigation.
222
222
 
223
223
  - Variants: `stacked`, `outline`, `cards`
224
- - Fields: `photo?: image { src, alt }`, `name?: text ≤ 60`, `bio?: text ≤ 200`, `links: list of { label: text ≤ 60, link: link, icon?: "check" | "star" | "heart" | "leaf" | "sprout" | "flower" | "sun" | "moon" | "sparkles" | "mountain" | "waves" | "map-pin" | "phone" | "mail" | "message-circle" | "clock" | "calendar" | "coffee" | "utensils" | "music" | "camera" | "palette" | "brush" | "book-open" | "graduation-cap" | "user" | "users" | "heart-handshake" | "home" | "shield-check" | "lock" | "award" | "target" | "lightbulb" | "zap" | "rocket" | "gift" | "shopping-bag" | "package" | "truck" | "recycle" | "globe" | "wifi" | "car" | "bike" | "dumbbell" | "accessibility" | "baby" | "dog" | "paw-print" | "scissors" | "wrench" | "arrow-right", highlight: boolean }`, `showSocial: boolean`
224
+ - Fields: `photo?: image { src, alt }`, `name?: text ≤ 60`, `bio?: text ≤ 200`, `links: list of { label: text ≤ 60, link: link, icon?: "check" | "star" | "heart" | "leaf" | "sprout" | "flower" | "sun" | "moon" | "sparkles" | "mountain" | "waves" | "map-pin" | "phone" | "mail" | "message-circle" | "clock" | "calendar" | "coffee" | "utensils" | "music" | "camera" | "palette" | "brush" | "book-open" | "graduation-cap" | "user" | "users" | "heart-handshake" | "home" | "shield-check" | "lock" | "award" | "target" | "lightbulb" | "zap" | "rocket" | "gift" | "shopping-bag" | "package" | "truck" | "recycle" | "globe" | "wifi" | "car" | "bike" | "dumbbell" | "accessibility" | "baby" | "dog" | "paw-print" | "scissors" | "wrench" | "arrow-right" | "minus" | "x" | "trending-up" | "layers" | "code" | "plug" | "headphones" | "briefcase" | "droplet" | "hammer" | "flame" | "ticket" | "mic" | "pen-tool" | "feather" | "chart-bar" | "timer" | "hand-heart" | "plane" | "bed" | "building" | "ruler" | "search" | "smartphone" | "cloud" | "repeat" | "percent" | "handshake" | "stethoscope" | "gauge" | "workflow" | "puzzle" | "wine" | "cake" | "tent" | "eye" | "image" | "file-text" | "video" | "key-round", highlight: boolean }`, `showSocial: boolean`
225
225
 
226
226
  ### `logo-strip` — Logo strip
227
227
 
@@ -263,7 +263,7 @@ Collects email subscribers (double opt-in) for the owner's newsletter. Use: Foot
263
263
  Compares plans, packages or tiers with prices and what each includes. Use: Pricing, membership and service-package pages. 2–4 plans; mark at most one as featured. Keep inclusions parallel across plans. Avoid: Prices the owner hasn't confirmed; hidden fees; more than ~6 inclusions per plan; using it for a single product (use the product block).
264
264
 
265
265
  - Variants: `cards`, `columns`, `compact`
266
- - Fields: `plans: list of { name: text ≤ 60, price: text ≤ 24, period?: text ≤ 30, description?: text ≤ 200, features: list of { text: text ≤ 120 }, buttonLabel?: text ≤ 30, link?: link, featured: boolean, badge?: text ≤ 24 }`, `note?: text ≤ 200`
266
+ - Fields: `plans: list of { name: text ≤ 60, price: text ≤ 24, period?: text ≤ 30, description?: text ≤ 200, features: list of { text: text ≤ 120 }, buttonLabel?: text ≤ 30, link?: link, featured: boolean, badge?: text ≤ 24, altPrice?: text ≤ 24, altPeriod?: text ≤ 30 }`, `note?: text ≤ 200`, `periodLabel?: text ≤ 20`, `altPeriodLabel?: text ≤ 20`, `altNote?: text ≤ 24`
267
267
 
268
268
  ### `product` — Product
269
269
 
@@ -349,6 +349,13 @@ Lists items from a collection (blog posts, events, projects, episodes, products)
349
349
  - Variants: `grid`, `list`, `carousel`, `wall`
350
350
  - Fields: `heading?: text ≤ 80`, `headingLevel: "h2" | "h3" | "h4"`, `source: reference`, `columns: "2" | "3" | "4"`, `showImage: boolean`, `showDate: boolean`, `showExcerpt: boolean`, `showMeta: boolean`, `linkLabel?: text ≤ 30`, `link?: link`, `emptyMessage: text ≤ 160`
351
351
 
352
+ ### `table` — Comparison table
353
+
354
+ Compares plans, packages, products or options feature by feature in a real, accessible table. Use: Under a pricing section (full plan comparison), for specs, or 'us vs. the usual way'. 2–4 columns and 4–12 rows read best; use 'yes'/'no' for checks and dashes, group rows to break long lists. Avoid: Layout tables; more than five columns (phones scroll sideways); claims about competitors the owner can't back up; comparisons with named rival brands.
355
+
356
+ - Variants: `lines`, `striped`, `boxed`
357
+ - Fields: `caption?: text ≤ 120`, `corner?: text ≤ 40`, `columns: list of { label: text ≤ 40, detail?: text ≤ 40, highlight: boolean }`, `rows: list of { label: text ≤ 80, group: boolean, cells: list of { value: text ≤ 60 } }`, `note?: text ≤ 200`
358
+
352
359
  ### `tabs` — Tabs
353
360
 
354
361
  Parallel pieces of content shown one at a time, switched by tabs. Use: Comparable options (class styles, service tiers, menus by meal) where visitors want one at a time. 2–5 tabs with short labels. Avoid: Content everyone needs to read (tabs hide it); long labels; sequences (use a timeline) or FAQs (use an accordion).
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/page.json",
2
+ "$schema": "https://schema.openspace.host/v1/page.json",
3
3
  "id": "pg_0fq27dh81s",
4
4
  "title": "About",
5
5
  "slug": "about",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/page.json",
2
+ "$schema": "https://schema.openspace.host/v1/page.json",
3
3
  "id": "pg_k1vx320q55",
4
4
  "title": "Commissions",
5
5
  "slug": "commissions",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/page.json",
2
+ "$schema": "https://schema.openspace.host/v1/page.json",
3
3
  "id": "pg_h72a8wvyfr",
4
4
  "title": "Contact",
5
5
  "slug": "contact",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/page.json",
2
+ "$schema": "https://schema.openspace.host/v1/page.json",
3
3
  "id": "pg_z815j3m0n5",
4
4
  "title": "Home",
5
5
  "slug": "",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/page.json",
2
+ "$schema": "https://schema.openspace.host/v1/page.json",
3
3
  "id": "pg_excq64amzm",
4
4
  "title": "Work",
5
5
  "slug": "work",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/site.json",
2
+ "$schema": "https://schema.openspace.host/v1/site.json",
3
3
  "title": "Elias Varga",
4
4
  "tagline": "Land, light and the buildings between.",
5
5
  "nav": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/styles.json",
2
+ "$schema": "https://schema.openspace.host/v1/styles.json",
3
3
  "choices": {
4
4
  "palette": {
5
5
  "brand": "oklch(0.25 0 0)",
@@ -1,12 +1,12 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/site-config.json",
2
+ "$schema": "https://schema.openspace.host/v1/site-config.json",
3
3
  "siteId": "st_840xf2yefq",
4
4
  "schemaVersion": 1,
5
5
  "template": {
6
6
  "id": "atelier",
7
7
  "version": "1.0.0"
8
8
  },
9
- "hub": "https://hub.openspace.dev",
9
+ "hub": "https://hub.openspace.host",
10
10
  "deploy": {
11
11
  "target": "github-pages",
12
12
  "url": "https://example.github.io/atelier",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://schema.openspace.dev/v1/template.json",
2
+ "$schema": "https://schema.openspace.host/v1/template.json",
3
3
  "id": "atelier",
4
4
  "name": "Atelier",
5
5
  "description": "A gallery-first portfolio for photographers and visual artists: a full-bleed slideshow, a project index and lightboxes, with chrome that stays out of the way.",
@@ -0,0 +1,13 @@
1
+ {
2
+ "kind": "events",
3
+ "label": "Planting days",
4
+ "itemLabel": "Planting day",
5
+ "list": {
6
+ "layout": "list",
7
+ "pageSize": 20,
8
+ "sort": "date-asc"
9
+ },
10
+ "itemPage": {
11
+ "layout": "split"
12
+ }
13
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ status: published
3
+ title: Tree keeper training
4
+ start: 2026-11-14T10:00:00-05:00
5
+ end: 2026-11-14T11:00:00-05:00
6
+ timezone: America/New_York
7
+ location:
8
+ name: The tree yard
9
+ address: 41 Mill Street, Eastport, ME
10
+ price: Free
11
+ excerpt: One hour to learn watering, mulching and what a stressed tree looks like.
12
+ ---
13
+
14
+ Every keeper goes home with a watering bag, a mulch fork and a laminated care card.
@@ -0,0 +1,14 @@
1
+ ---
2
+ status: published
3
+ title: "Planting day: Harbour Ward"
4
+ start: 2026-11-07T09:00:00-05:00
5
+ end: 2026-11-07T13:00:00-05:00
6
+ timezone: America/New_York
7
+ location:
8
+ name: Harbour Primary School
9
+ address: 18 Water Street, Eastport, ME
10
+ price: Free
11
+ excerpt: Plant twenty-five trees along Water Street. Tools, gloves and breakfast provided.
12
+ ---
13
+
14
+ Meet at the school gates at 9am. We'll split into teams of five, each with an experienced leader.
@@ -0,0 +1,14 @@
1
+ ---
2
+ status: published
3
+ title: "Planting day: Linden North"
4
+ start: 2026-11-21T09:00:00-05:00
5
+ end: 2026-11-21T13:00:00-05:00
6
+ timezone: America/New_York
7
+ location:
8
+ name: Linden Avenue and 5th Street
9
+ address: Linden Avenue, Eastport, ME
10
+ price: Free
11
+ excerpt: Finish the avenue with thirty trees, then lunch in the church hall.
12
+ ---
13
+
14
+ Bring a water bottle. Children over six are welcome with an adult.
@@ -0,0 +1,13 @@
1
+ ---
2
+ status: published
3
+ title: What this summer's heat map tells us
4
+ date: 2026-09-12
5
+ author: Grace Liu
6
+ excerpt: Blocks with five-year-old trees were up to 6°F cooler at street level on the hottest days.
7
+ image: https://images.unsplash.com/photo-1777150895644-2ca253ee1c93?w=1600&q=80
8
+ imageAlt: A young tree seedling held in two hands
9
+ ---
10
+
11
+ Volunteers measured street temperatures on twenty blocks during July's heatwave. Blocks with five-year-old trees were up to 6°F cooler than those without.
12
+
13
+ We'll use the map to choose next spring's planting sites.
@@ -0,0 +1,13 @@
1
+ ---
2
+ status: published
3
+ title: A record harvest in school gardens
4
+ date: 2026-09-30
5
+ author: Owen Price
6
+ excerpt: "Squash, beans and a lot of very proud children: the school gardens had their best year yet."
7
+ image: https://images.unsplash.com/photo-1631195414013-85b70ff2c180?w=1600&q=80
8
+ imageAlt: Raised beds full of flowers in a school garden
9
+ ---
10
+
11
+ Twelve school gardens grew enough squash, beans and herbs for a harvest lunch at every school this autumn.
12
+
13
+ Next term, three more schools join the programme.
@@ -0,0 +1,13 @@
1
+ ---
2
+ status: published
3
+ title: Planting season begins on Linden Avenue
4
+ date: 2026-10-14
5
+ author: Maya Chen
6
+ excerpt: Forty volunteers, thirty-two trees and one very muddy Saturday to open the season.
7
+ image: https://images.unsplash.com/photo-1544928938-6852c1925194?w=1600&q=80
8
+ imageAlt: Volunteers holding shovels at a planting day
9
+ ---
10
+
11
+ Our first planting day of the season brought forty volunteers to Linden Avenue, where thirty-two London planes and red maples went into the ground before lunch.
12
+
13
+ Thank you to everyone who came — and to Twin Oaks for the coffee.
@@ -0,0 +1,16 @@
1
+ {
2
+ "kind": "blog",
3
+ "label": "News",
4
+ "itemLabel": "Story",
5
+ "list": {
6
+ "layout": "grid",
7
+ "pageSize": 12,
8
+ "sort": "date-desc"
9
+ },
10
+ "itemPage": {
11
+ "layout": "article",
12
+ "showDate": true,
13
+ "showAuthor": true,
14
+ "showRelated": true
15
+ }
16
+ }