@omniharmonic/openspace-cli 0.0.0-stage → 0.1.1

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 (205) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +74 -2
  3. package/dist/agents-md-2DTXWUZQ.js +8 -0
  4. package/dist/agents-md-2DTXWUZQ.js.map +1 -0
  5. package/dist/bin.d.ts +1 -0
  6. package/dist/bin.js +11 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/chunk-3F6TAUAT.js +41167 -0
  9. package/dist/chunk-3F6TAUAT.js.map +1 -0
  10. package/dist/chunk-LTJEM3DN.js +17161 -0
  11. package/dist/chunk-LTJEM3DN.js.map +1 -0
  12. package/dist/index.d.ts +83 -0
  13. package/dist/index.js +23 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/starter/site/.github/workflows/publish.yml +38 -0
  16. package/dist/starter/site/AGENTS.md +392 -0
  17. package/dist/starter/site/astro.config.mjs +8 -0
  18. package/dist/starter/site/package.json +21 -0
  19. package/dist/starter/site/public/.gitkeep +0 -0
  20. package/dist/starter/site/src/pages/[...slug].astro +10 -0
  21. package/dist/starter/site/tsconfig.json +5 -0
  22. package/dist/starter/variants/cloudflare/.github/openspace/gated-sync.mjs +121 -0
  23. package/dist/starter/variants/cloudflare/.github/workflows/publish.yml +70 -0
  24. package/dist/starter/variants/cloudflare/astro.config.mjs +11 -0
  25. package/dist/starter/variants/cloudflare/package.json +23 -0
  26. package/dist/starter/variants/cloudflare/wrangler.jsonc +13 -0
  27. package/dist/templates/atelier/content/collections/projects/_collection.json +13 -0
  28. package/dist/templates/atelier/content/collections/projects/cordillera.mdoc +32 -0
  29. package/dist/templates/atelier/content/collections/projects/field-studies.mdoc +32 -0
  30. package/dist/templates/atelier/content/collections/projects/salt-and-glass.mdoc +32 -0
  31. package/dist/templates/atelier/content/collections/projects/white-city.mdoc +32 -0
  32. package/dist/templates/atelier/content/pages/about.json +180 -0
  33. package/dist/templates/atelier/content/pages/commissions.json +307 -0
  34. package/dist/templates/atelier/content/pages/contact.json +117 -0
  35. package/dist/templates/atelier/content/pages/home.json +524 -0
  36. package/dist/templates/atelier/content/pages/work.json +332 -0
  37. package/dist/templates/atelier/content/site.json +190 -0
  38. package/dist/templates/atelier/content/styles.json +25 -0
  39. package/dist/templates/atelier/media/LICENSES.json +218 -0
  40. package/dist/templates/atelier/openspace.json +21 -0
  41. package/dist/templates/atelier/template.json +115 -0
  42. package/dist/templates/commons/content/collections/gatherings/_collection.json +13 -0
  43. package/dist/templates/commons/content/collections/gatherings/grant-writing-workshop.mdoc +17 -0
  44. package/dist/templates/commons/content/collections/gatherings/seed-swap.mdoc +16 -0
  45. package/dist/templates/commons/content/collections/gatherings/winter-general-assembly.mdoc +17 -0
  46. package/dist/templates/commons/content/pages/about.json +227 -0
  47. package/dist/templates/commons/content/pages/home.json +540 -0
  48. package/dist/templates/commons/content/pages/join.json +304 -0
  49. package/dist/templates/commons/content/pages/members.json +499 -0
  50. package/dist/templates/commons/content/site.json +306 -0
  51. package/dist/templates/commons/content/styles.json +27 -0
  52. package/dist/templates/commons/media/LICENSES.json +108 -0
  53. package/dist/templates/commons/openspace.json +21 -0
  54. package/dist/templates/commons/template.json +113 -0
  55. package/dist/templates/encore/content/collections/sessions/_collection.json +19 -0
  56. package/dist/templates/encore/content/collections/sessions/session-10-headphones-on.mdoc +16 -0
  57. package/dist/templates/encore/content/collections/sessions/session-11-neon-tide.mdoc +16 -0
  58. package/dist/templates/encore/content/collections/sessions/session-12-slow-static.mdoc +16 -0
  59. package/dist/templates/encore/content/collections/tour/_collection.json +13 -0
  60. package/dist/templates/encore/content/collections/tour/brooklyn-elsewhere.mdoc +18 -0
  61. package/dist/templates/encore/content/collections/tour/chicago-thalia-hall.mdoc +18 -0
  62. package/dist/templates/encore/content/collections/tour/london-electric-ballroom.mdoc +18 -0
  63. package/dist/templates/encore/content/collections/tour/minneapolis-first-avenue.mdoc +18 -0
  64. package/dist/templates/encore/content/collections/tour/toronto-danforth.mdoc +18 -0
  65. package/dist/templates/encore/content/pages/about.json +251 -0
  66. package/dist/templates/encore/content/pages/contact.json +122 -0
  67. package/dist/templates/encore/content/pages/home.json +363 -0
  68. package/dist/templates/encore/content/pages/music.json +297 -0
  69. package/dist/templates/encore/content/site.json +293 -0
  70. package/dist/templates/encore/content/styles.json +17 -0
  71. package/dist/templates/encore/media/LICENSES.json +97 -0
  72. package/dist/templates/encore/openspace.json +21 -0
  73. package/dist/templates/encore/template.json +103 -0
  74. package/dist/templates/field-notes/content/collections/essays/_collection.json +31 -0
  75. package/dist/templates/field-notes/content/collections/essays/a-year-of-apples.mdoc +25 -0
  76. package/dist/templates/field-notes/content/collections/essays/learning-a-field.mdoc +32 -0
  77. package/dist/templates/field-notes/content/collections/essays/small-weather.mdoc +25 -0
  78. package/dist/templates/field-notes/content/collections/essays/the-wall-builders.mdoc +29 -0
  79. package/dist/templates/field-notes/content/pages/about.json +236 -0
  80. package/dist/templates/field-notes/content/pages/contact.json +116 -0
  81. package/dist/templates/field-notes/content/pages/home.json +428 -0
  82. package/dist/templates/field-notes/content/pages/subscribe.json +273 -0
  83. package/dist/templates/field-notes/content/site.json +218 -0
  84. package/dist/templates/field-notes/content/styles.json +27 -0
  85. package/dist/templates/field-notes/media/LICENSES.json +119 -0
  86. package/dist/templates/field-notes/openspace.json +21 -0
  87. package/dist/templates/field-notes/template.json +112 -0
  88. package/dist/templates/harbor/content/collections/events/_collection.json +13 -0
  89. package/dist/templates/harbor/content/collections/events/coat-drive-sorting-day.mdoc +17 -0
  90. package/dist/templates/harbor/content/collections/events/safe-at-home-build-day.mdoc +17 -0
  91. package/dist/templates/harbor/content/collections/events/spring-community-supper.mdoc +17 -0
  92. package/dist/templates/harbor/content/collections/events/winter-coat-giveaway.mdoc +16 -0
  93. package/dist/templates/harbor/content/collections/news/2026-08-28-back-to-school-at-homework-harbor.mdoc +17 -0
  94. package/dist/templates/harbor/content/collections/news/2026-09-15-meet-the-repair-crew.mdoc +21 -0
  95. package/dist/templates/harbor/content/collections/news/2026-10-08-the-2025-annual-report.mdoc +25 -0
  96. package/dist/templates/harbor/content/collections/news/_collection.json +34 -0
  97. package/dist/templates/harbor/content/pages/about.json +366 -0
  98. package/dist/templates/harbor/content/pages/contact.json +233 -0
  99. package/dist/templates/harbor/content/pages/get-involved.json +425 -0
  100. package/dist/templates/harbor/content/pages/home.json +524 -0
  101. package/dist/templates/harbor/content/pages/programs.json +611 -0
  102. package/dist/templates/harbor/content/site.json +377 -0
  103. package/dist/templates/harbor/content/styles.json +25 -0
  104. package/dist/templates/harbor/media/LICENSES.json +141 -0
  105. package/dist/templates/harbor/openspace.json +21 -0
  106. package/dist/templates/harbor/template.json +115 -0
  107. package/dist/templates/hearth/content/pages/about.json +246 -0
  108. package/dist/templates/hearth/content/pages/home.json +937 -0
  109. package/dist/templates/hearth/content/pages/menu.json +396 -0
  110. package/dist/templates/hearth/content/pages/private-dining.json +288 -0
  111. package/dist/templates/hearth/content/pages/visit.json +257 -0
  112. package/dist/templates/hearth/content/site.json +214 -0
  113. package/dist/templates/hearth/content/styles.json +25 -0
  114. package/dist/templates/hearth/media/LICENSES.json +196 -0
  115. package/dist/templates/hearth/openspace.json +21 -0
  116. package/dist/templates/hearth/template.json +116 -0
  117. package/dist/templates/kiln/content/collections/classes/_collection.json +13 -0
  118. package/dist/templates/kiln/content/collections/classes/glaze-day-march.mdoc +17 -0
  119. package/dist/templates/kiln/content/collections/classes/hand-building-february.mdoc +17 -0
  120. package/dist/templates/kiln/content/collections/classes/spring-studio-sale.mdoc +15 -0
  121. package/dist/templates/kiln/content/collections/classes/wheel-weekend-january.mdoc +17 -0
  122. package/dist/templates/kiln/content/collections/shop/_collection.json +14 -0
  123. package/dist/templates/kiln/content/collections/shop/ash-bud-vases.mdoc +18 -0
  124. package/dist/templates/kiln/content/collections/shop/harbor-planter.mdoc +18 -0
  125. package/dist/templates/kiln/content/collections/shop/morning-cup-pair.mdoc +24 -0
  126. package/dist/templates/kiln/content/collections/shop/sea-glass-planter.mdoc +18 -0
  127. package/dist/templates/kiln/content/collections/shop/tide-vase.mdoc +23 -0
  128. package/dist/templates/kiln/content/collections/shop/walnut-step-stool.mdoc +18 -0
  129. package/dist/templates/kiln/content/pages/about.json +344 -0
  130. package/dist/templates/kiln/content/pages/contact.json +232 -0
  131. package/dist/templates/kiln/content/pages/home.json +754 -0
  132. package/dist/templates/kiln/content/pages/workshops.json +352 -0
  133. package/dist/templates/kiln/content/site.json +263 -0
  134. package/dist/templates/kiln/content/styles.json +17 -0
  135. package/dist/templates/kiln/media/LICENSES.json +119 -0
  136. package/dist/templates/kiln/openspace.json +21 -0
  137. package/dist/templates/kiln/template.json +103 -0
  138. package/dist/templates/ledger/content/collections/case-studies/_collection.json +14 -0
  139. package/dist/templates/ledger/content/collections/case-studies/fieldwork-coffee.mdoc +29 -0
  140. package/dist/templates/ledger/content/collections/case-studies/larkspur-foods.mdoc +29 -0
  141. package/dist/templates/ledger/content/collections/case-studies/ostrander-clinics.mdoc +29 -0
  142. package/dist/templates/ledger/content/collections/insights/2026-08-10-one-page-of-numbers.mdoc +12 -0
  143. package/dist/templates/ledger/content/collections/insights/2026-09-07-hiring-your-first-coo.mdoc +17 -0
  144. package/dist/templates/ledger/content/collections/insights/2026-10-05-the-decision-log.mdoc +15 -0
  145. package/dist/templates/ledger/content/collections/insights/_collection.json +21 -0
  146. package/dist/templates/ledger/content/pages/about.json +298 -0
  147. package/dist/templates/ledger/content/pages/contact.json +158 -0
  148. package/dist/templates/ledger/content/pages/home.json +621 -0
  149. package/dist/templates/ledger/content/pages/services.json +639 -0
  150. package/dist/templates/ledger/content/site.json +336 -0
  151. package/dist/templates/ledger/content/styles.json +17 -0
  152. package/dist/templates/ledger/media/LICENSES.json +86 -0
  153. package/dist/templates/ledger/openspace.json +21 -0
  154. package/dist/templates/ledger/template.json +102 -0
  155. package/dist/templates/link/content/pages/home.json +278 -0
  156. package/dist/templates/link/content/site.json +168 -0
  157. package/dist/templates/link/content/styles.json +17 -0
  158. package/dist/templates/link/media/LICENSES.json +97 -0
  159. package/dist/templates/link/openspace.json +21 -0
  160. package/dist/templates/link/template.json +87 -0
  161. package/dist/templates/meadow/content/collections/journal/2026-09-02-meet-daniel.mdoc +20 -0
  162. package/dist/templates/meadow/content/collections/journal/2026-09-28-a-practice-for-dark-mornings.mdoc +24 -0
  163. package/dist/templates/meadow/content/collections/journal/2026-10-12-why-twelve-mats.mdoc +26 -0
  164. package/dist/templates/meadow/content/collections/journal/_collection.json +34 -0
  165. package/dist/templates/meadow/content/collections/workshops/_collection.json +13 -0
  166. package/dist/templates/meadow/content/collections/workshops/breath-and-rest-workshop.mdoc +17 -0
  167. package/dist/templates/meadow/content/collections/workshops/foundations-four-weeks.mdoc +17 -0
  168. package/dist/templates/meadow/content/collections/workshops/manzanita-spring-retreat.mdoc +17 -0
  169. package/dist/templates/meadow/content/collections/workshops/winter-solstice-restorative.mdoc +17 -0
  170. package/dist/templates/meadow/content/pages/about.json +344 -0
  171. package/dist/templates/meadow/content/pages/bodywork.json +330 -0
  172. package/dist/templates/meadow/content/pages/classes.json +820 -0
  173. package/dist/templates/meadow/content/pages/contact.json +240 -0
  174. package/dist/templates/meadow/content/pages/home.json +556 -0
  175. package/dist/templates/meadow/content/site.json +290 -0
  176. package/dist/templates/meadow/content/styles.json +25 -0
  177. package/dist/templates/meadow/media/LICENSES.json +130 -0
  178. package/dist/templates/meadow/openspace.json +21 -0
  179. package/dist/templates/meadow/template.json +116 -0
  180. package/dist/templates/signal/content/collections/changelog/2026-09-08-faster-sms.mdoc +11 -0
  181. package/dist/templates/signal/content/collections/changelog/2026-09-22-postmortem-drafts.mdoc +11 -0
  182. package/dist/templates/signal/content/collections/changelog/2026-10-06-quiet-hours.mdoc +13 -0
  183. package/dist/templates/signal/content/collections/changelog/2026-10-20-status-pages-that-update-themselves.mdoc +17 -0
  184. package/dist/templates/signal/content/collections/changelog/_collection.json +39 -0
  185. package/dist/templates/signal/content/pages/about.json +258 -0
  186. package/dist/templates/signal/content/pages/contact.json +122 -0
  187. package/dist/templates/signal/content/pages/home.json +1062 -0
  188. package/dist/templates/signal/content/pages/pricing.json +460 -0
  189. package/dist/templates/signal/content/site.json +345 -0
  190. package/dist/templates/signal/content/styles.json +17 -0
  191. package/dist/templates/signal/media/LICENSES.json +119 -0
  192. package/dist/templates/signal/openspace.json +21 -0
  193. package/dist/templates/signal/template.json +103 -0
  194. package/dist/templates/vow/content/pages/about.json +314 -0
  195. package/dist/templates/vow/content/pages/home.json +400 -0
  196. package/dist/templates/vow/content/pages/registry.json +207 -0
  197. package/dist/templates/vow/content/pages/rsvp.json +145 -0
  198. package/dist/templates/vow/content/pages/schedule.json +281 -0
  199. package/dist/templates/vow/content/pages/travel.json +326 -0
  200. package/dist/templates/vow/content/site.json +200 -0
  201. package/dist/templates/vow/content/styles.json +17 -0
  202. package/dist/templates/vow/media/LICENSES.json +130 -0
  203. package/dist/templates/vow/openspace.json +21 -0
  204. package/dist/templates/vow/template.json +113 -0
  205. package/package.json +71 -3
@@ -0,0 +1,119 @@
1
+ {
2
+ "$comment": "Licenses for the demo media in the Kiln template. Replace the demo photos with your own; this file can be deleted once none of them are used.",
3
+ "design": {
4
+ "license": "CC-BY-4.0",
5
+ "licenseUrl": "https://creativecommons.org/licenses/by/4.0/"
6
+ },
7
+ "media": [
8
+ {
9
+ "kind": "image",
10
+ "src": "https://images.unsplash.com/photo-1459411552884-841db9b3cc2a",
11
+ "title": "A small cactus in a terracotta pot against a blush wall",
12
+ "author": "Annie Spratt",
13
+ "authorUrl": "https://unsplash.com/@anniespratt",
14
+ "source": "Unsplash",
15
+ "sourceUrl": "https://unsplash.com/photos/green-cactus-plant-on-brown-pot-fbAnIjhrOL4",
16
+ "license": "Unsplash License",
17
+ "licenseUrl": "https://unsplash.com/license"
18
+ },
19
+ {
20
+ "kind": "image",
21
+ "src": "https://images.unsplash.com/photo-1485955900006-10f4d324d411",
22
+ "title": "A spiky succulent in a mint-green pot on a white table",
23
+ "author": "Galina N",
24
+ "authorUrl": "https://unsplash.com/@galina88",
25
+ "source": "Unsplash",
26
+ "sourceUrl": "https://unsplash.com/photos/green-succulent-in-teal-ceramic-vase-miziNqvJx5M",
27
+ "license": "Unsplash License",
28
+ "licenseUrl": "https://unsplash.com/license"
29
+ },
30
+ {
31
+ "kind": "image",
32
+ "src": "https://images.unsplash.com/photo-1494790108377-be9c29b29330",
33
+ "title": "Portrait of a woman in a red sweater, laughing",
34
+ "author": "Michael Dam",
35
+ "authorUrl": "https://unsplash.com/@michaeldam",
36
+ "source": "Unsplash",
37
+ "sourceUrl": "https://unsplash.com/photos/closeup-photography-of-woman-smiling-mEZ3PoFGs_k",
38
+ "license": "Unsplash License",
39
+ "licenseUrl": "https://unsplash.com/license"
40
+ },
41
+ {
42
+ "kind": "image",
43
+ "src": "https://images.unsplash.com/photo-1503602642458-232111445657",
44
+ "title": "A simple wooden stool against a pale blue wall",
45
+ "author": "Ruslan Bardash",
46
+ "authorUrl": "https://unsplash.com/@ruslanbardash",
47
+ "source": "Unsplash",
48
+ "sourceUrl": "https://unsplash.com/photos/beige-wooden-bar-stool-4kTbAMRAHtQ",
49
+ "license": "Unsplash License",
50
+ "licenseUrl": "https://unsplash.com/license"
51
+ },
52
+ {
53
+ "kind": "image",
54
+ "src": "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d",
55
+ "title": "Portrait of a smiling man in a white t-shirt",
56
+ "author": "Joseph Gonzalez",
57
+ "authorUrl": "https://unsplash.com/@miracletwentyone",
58
+ "source": "Unsplash",
59
+ "sourceUrl": "https://unsplash.com/photos/man-wearing-white-v-neck-shirt-iFgRcqHznqg",
60
+ "license": "Unsplash License",
61
+ "licenseUrl": "https://unsplash.com/license"
62
+ },
63
+ {
64
+ "kind": "image",
65
+ "src": "https://images.unsplash.com/photo-1509042239860-f550ce710b93",
66
+ "title": "Two cappuccinos with latte art beside potted herbs",
67
+ "author": "Nathan Dumlao",
68
+ "authorUrl": "https://unsplash.com/@nate_dumlao",
69
+ "source": "Unsplash",
70
+ "sourceUrl": "https://unsplash.com/photos/shallow-focus-photography-of-coffee-late-in-mug-on-table-zUNs99PGDg0",
71
+ "license": "Unsplash License",
72
+ "licenseUrl": "https://unsplash.com/license"
73
+ },
74
+ {
75
+ "kind": "image",
76
+ "src": "https://images.unsplash.com/photo-1544005313-94ddf0286df2",
77
+ "title": "Portrait of a woman with long brown hair in a striped shirt",
78
+ "author": "Štefan Štefančík",
79
+ "authorUrl": "https://unsplash.com/@cikstefan",
80
+ "source": "Unsplash",
81
+ "sourceUrl": "https://unsplash.com/photos/smiling-woman-wearing-white-and-black-pinstriped-collared-top-QXevDflbl8A",
82
+ "license": "Unsplash License",
83
+ "licenseUrl": "https://unsplash.com/license"
84
+ },
85
+ {
86
+ "kind": "image",
87
+ "src": "https://images.unsplash.com/photo-1565193566173-7a0ee3dbe261",
88
+ "title": "Three matte grey vases with dried stems against a dark wall",
89
+ "author": "Tom Crew",
90
+ "authorUrl": "https://unsplash.com/@tomcrewceramics",
91
+ "source": "Unsplash",
92
+ "sourceUrl": "https://unsplash.com/photos/three-white-bottles-j6sxCTf3UyU",
93
+ "license": "Unsplash License",
94
+ "licenseUrl": "https://unsplash.com/license"
95
+ },
96
+ {
97
+ "kind": "image",
98
+ "src": "https://images.unsplash.com/photo-1597696929736-6d13bed8e6a8",
99
+ "title": "Handmade ceramic vases in soft clay colours on a shelf",
100
+ "author": "Chloe Bolton",
101
+ "authorUrl": "https://unsplash.com/@crystalmind_design",
102
+ "source": "Unsplash",
103
+ "sourceUrl": "https://unsplash.com/photos/ceramic-vases-on-wooden-surface-R0qthXq3jec",
104
+ "license": "Unsplash License",
105
+ "licenseUrl": "https://unsplash.com/license"
106
+ },
107
+ {
108
+ "kind": "image",
109
+ "src": "https://images.unsplash.com/photo-1780387477222-730504564368",
110
+ "title": "Portrait of a smiling grey-haired woman in a beige jumpsuit",
111
+ "author": "Centre for Ageing Better",
112
+ "authorUrl": "https://unsplash.com/@ageing_better",
113
+ "source": "Unsplash",
114
+ "sourceUrl": "https://unsplash.com/photos/woman-in-beige-jumpsuit-smiling-sitting-on-a-stool-IxacjtwPdGM",
115
+ "license": "Unsplash License",
116
+ "licenseUrl": "https://unsplash.com/license"
117
+ }
118
+ ]
119
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://schema.openspace.dev/v1/site-config.json",
3
+ "siteId": "st_pp2mxjq3a1",
4
+ "schemaVersion": 1,
5
+ "template": {
6
+ "id": "kiln",
7
+ "version": "1.0.0"
8
+ },
9
+ "hub": "https://hub.openspace.dev",
10
+ "deploy": {
11
+ "target": "github-pages",
12
+ "url": "https://example.github.io/kiln",
13
+ "customDomain": null
14
+ },
15
+ "features": {
16
+ "forms": true,
17
+ "newsletter": true,
18
+ "analytics": true,
19
+ "search": false
20
+ }
21
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "$schema": "https://schema.openspace.dev/v1/template.json",
3
+ "id": "kiln",
4
+ "name": "Kiln",
5
+ "description": "A tactile, crafted site for makers and small shops: a product grid, the maker's story and weekend workshops, ready for checkout when commerce arrives.",
6
+ "persona": "Makers, small shops",
7
+ "mood": "Tactile, crafted",
8
+ "version": "1.0.0",
9
+ "tags": [
10
+ "shop",
11
+ "maker",
12
+ "ceramics",
13
+ "products",
14
+ "workshops",
15
+ "craft"
16
+ ],
17
+ "sample": {
18
+ "name": "Saltmarsh Pottery",
19
+ "tagline": "Pots for everyday rituals."
20
+ },
21
+ "thumbnailPage": "pg_szfgyxn8pz",
22
+ "looks": [
23
+ {
24
+ "id": "charcoal-clay",
25
+ "name": "Charcoal & Clay",
26
+ "description": "Fired clay against charcoal and bone, with Gloock headings and soft corners.",
27
+ "choices": {
28
+ "palette": {
29
+ "brand": "oklch(0.52 0.08 50)",
30
+ "neutral": "warm",
31
+ "contrast": "standard",
32
+ "source": "curated"
33
+ },
34
+ "pairing": "gloock-albert-sans",
35
+ "density": "comfortable",
36
+ "shape": "soft",
37
+ "buttons": "solid",
38
+ "motion": "subtle",
39
+ "imageTreatment": "grain"
40
+ }
41
+ },
42
+ {
43
+ "id": "glaze",
44
+ "name": "Celadon",
45
+ "description": "A pale celadon glaze green with Alegreya and rounded shapes.",
46
+ "choices": {
47
+ "palette": {
48
+ "brand": "oklch(0.58 0.06 170)",
49
+ "neutral": "warm",
50
+ "contrast": "standard",
51
+ "source": "brand"
52
+ },
53
+ "pairing": "alegreya",
54
+ "density": "airy",
55
+ "shape": "round",
56
+ "buttons": "pill-solid",
57
+ "motion": "subtle",
58
+ "imageTreatment": "rounded"
59
+ }
60
+ },
61
+ {
62
+ "id": "workshop",
63
+ "name": "Workshop",
64
+ "description": "Ink black and raw terracotta with Josefin Sans, crisp and graphic.",
65
+ "choices": {
66
+ "palette": {
67
+ "brand": "oklch(0.55 0.13 40)",
68
+ "neutral": "warm",
69
+ "contrast": "standard",
70
+ "source": "brand"
71
+ },
72
+ "pairing": "josefin-crimson",
73
+ "density": "comfortable",
74
+ "shape": "sharp",
75
+ "buttons": "outline",
76
+ "motion": "subtle",
77
+ "imageTreatment": "none"
78
+ }
79
+ }
80
+ ],
81
+ "pages": [
82
+ {
83
+ "id": "pg_szfgyxn8pz",
84
+ "title": "Home",
85
+ "slug": ""
86
+ },
87
+ {
88
+ "id": "pg_rgdkzzbgjy",
89
+ "title": "Workshops",
90
+ "slug": "workshops"
91
+ },
92
+ {
93
+ "id": "pg_me0855hfs5",
94
+ "title": "About",
95
+ "slug": "about"
96
+ },
97
+ {
98
+ "id": "pg_qpse8ffgrr",
99
+ "title": "Contact",
100
+ "slug": "contact"
101
+ }
102
+ ]
103
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "kind": "portfolio",
3
+ "label": "Case studies",
4
+ "itemLabel": "Case study",
5
+ "list": {
6
+ "layout": "cards",
7
+ "pageSize": 12,
8
+ "sort": "date-desc"
9
+ },
10
+ "itemPage": {
11
+ "layout": "article",
12
+ "showRelated": true
13
+ }
14
+ }
@@ -0,0 +1,29 @@
1
+ ---
2
+ status: published
3
+ title: Six months as a fractional COO
4
+ date: 2025-09-01
5
+ year: 2025
6
+ client: Fieldwork Coffee
7
+ role: Operations reset
8
+ excerpt: Steadying a roaster and four cafés while the founders searched for a permanent operations lead.
9
+ image: https://images.unsplash.com/photo-1497215728101-856f4ea42174?w=1600&q=80
10
+ imageAlt: "Fieldwork Coffee: Six months as a fractional COO"
11
+ ---
12
+
13
+ ## The challenge
14
+
15
+ Fieldwork's head of operations left two weeks before their busiest season, with a new café opening and a wholesale contract to deliver.
16
+
17
+ ## What we did
18
+
19
+ - Ran the weekly operating meeting and quarterly planning for six months
20
+ - Rebuilt the roasting schedule around wholesale orders
21
+ - Wrote the operations playbook and helped hire the permanent lead
22
+
23
+ ## The outcome
24
+
25
+ The café opened on time, wholesale orders shipped complete and the new operations lead inherited a written playbook on day one.
26
+
27
+ {% quote attribution="Jonah Mercer, co-founder" %}
28
+ Naomi kept the wheels on while we caught our breath.
29
+ {% /quote %}
@@ -0,0 +1,29 @@
1
+ ---
2
+ status: published
3
+ title: Getting the founder out of every decision
4
+ date: 2026-09-01
5
+ year: 2026
6
+ client: Larkspur Foods
7
+ role: Operations reset
8
+ excerpt: A 90-person food maker where every purchase over $500 waited on the founder's inbox.
9
+ image: https://images.unsplash.com/photo-1522202176988-66273c2fd55f?w=1600&q=80
10
+ imageAlt: "Larkspur Foods: Getting the founder out of every decision"
11
+ ---
12
+
13
+ ## The challenge
14
+
15
+ Larkspur had grown from a farmers' market stall to 90 people and three product lines in five years. Every purchase, hire and price change still went through Priya, the founder, who was answering email at midnight.
16
+
17
+ ## What we did
18
+
19
+ - Mapped 140 recurring decisions and gave each one a single owner
20
+ - Replaced six weekly meetings with one 50-minute leadership meeting
21
+ - Built a one-page weekly scorecard from data the team already had
22
+
23
+ ## The outcome
24
+
25
+ Within a quarter, decisions waiting on the founder fell from 30 a week to 6. Priya now spends Fridays on product development, which is why she started the company.
26
+
27
+ {% quote attribution="Priya Raman, founder" %}
28
+ I got my Fridays back, and the team makes better calls than I did.
29
+ {% /quote %}
@@ -0,0 +1,29 @@
1
+ ---
2
+ status: published
3
+ title: A COO search that finally worked
4
+ date: 2025-09-01
5
+ year: 2025
6
+ client: Ostrander Clinics
7
+ role: Operations reset
8
+ excerpt: Two failed hires, one clear scorecard and a COO who is still there.
9
+ image: https://images.unsplash.com/photo-1542744173-8e7e53415bb0?w=1600&q=80
10
+ imageAlt: "Ostrander Clinics: A COO search that finally worked"
11
+ ---
12
+
13
+ ## The challenge
14
+
15
+ Ostrander Clinics had hired two COOs in three years and lost both within a year. The partners agreed they needed help, but not on what the role actually was.
16
+
17
+ ## What we did
18
+
19
+ - Facilitated three working sessions to write a shared role scorecard
20
+ - Ran structured interviews and a paid work sample with four finalists
21
+ - Wrote a 90-day onboarding plan and coached the new COO through it
22
+
23
+ ## The outcome
24
+
25
+ The new COO started in four months and has now led the group through two clinic openings. Patient wait times are down by a third.
26
+
27
+ {% quote attribution="Daniel Ostrander, managing partner" %}
28
+ For the first time, we agreed on what we were hiring for.
29
+ {% /quote %}
@@ -0,0 +1,12 @@
1
+ ---
2
+ status: published
3
+ title: One page of numbers
4
+ date: 2026-08-10
5
+ tags:
6
+ - metrics
7
+ excerpt: Why the best scorecards fit on a single sheet of paper.
8
+ ---
9
+
10
+ If your weekly report needs scrolling, nobody reads the bottom half. Pick the eight numbers that would change a decision this week, put them on one page, and show the trend next to each one.
11
+
12
+ Everything else can live in a dashboard for the people who need it.
@@ -0,0 +1,17 @@
1
+ ---
2
+ status: published
3
+ title: Before you hire your first COO
4
+ date: 2026-09-07
5
+ tags:
6
+ - hiring
7
+ - leadership
8
+ excerpt: Three questions to answer before you write the job description.
9
+ ---
10
+
11
+ Founders usually start a COO search with a job description. Start with these questions instead:
12
+
13
+ 1. Which decisions do you want to stop making?
14
+ 2. Which ones will you never give up?
15
+ 3. How will you know, in a year, that the hire worked?
16
+
17
+ If your leadership team answers them differently, the search will fail however good the candidates are.
@@ -0,0 +1,15 @@
1
+ ---
2
+ status: published
3
+ title: Keep a decision log, not more meetings
4
+ date: 2026-10-05
5
+ categories: []
6
+ tags:
7
+ - operations
8
+ excerpt: The cheapest operations tool I know is a shared document with four columns.
9
+ ---
10
+
11
+ Most teams don't have a meeting problem. They have a memory problem: nobody can remember what was decided, so it gets decided again.
12
+
13
+ A decision log fixes that. Four columns: **the decision**, **who owns it**, **when**, and **why**. Keep it in a shared document and link to it from every meeting agenda.
14
+
15
+ After a month, you'll notice which decisions keep coming back, and that tells you where ownership is unclear.
@@ -0,0 +1,21 @@
1
+ {
2
+ "kind": "blog",
3
+ "label": "Insights",
4
+ "slugPattern": "{date}-{title}",
5
+ "list": {
6
+ "layout": "list",
7
+ "pageSize": 12,
8
+ "sort": "date-desc"
9
+ },
10
+ "itemPage": {
11
+ "layout": "article",
12
+ "showDate": true,
13
+ "showAuthor": false,
14
+ "showRelated": true
15
+ },
16
+ "feed": {
17
+ "enabled": true,
18
+ "title": "Calder Advisory insights",
19
+ "description": "Essays on running a growing company."
20
+ }
21
+ }