@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,556 @@
1
+ {
2
+ "$schema": "https://schema.openspace.dev/v1/page.json",
3
+ "id": "pg_13fyssvz8c",
4
+ "title": "Home",
5
+ "slug": "",
6
+ "seo": {
7
+ "description": "Unhurried yoga classes and therapeutic massage on SE Division Street in Portland. Twelve mats per class, and tea afterwards."
8
+ },
9
+ "sections": [
10
+ {
11
+ "id": "sec_h9tnehxdvb",
12
+ "preset": "hero/arch-window@1",
13
+ "label": "Arched image",
14
+ "layout": {
15
+ "mode": "stack",
16
+ "columns": {
17
+ "d": [
18
+ 7,
19
+ 5
20
+ ],
21
+ "m": [
22
+ 12
23
+ ]
24
+ },
25
+ "align": "center",
26
+ "gap": "2xl"
27
+ },
28
+ "style": {
29
+ "colorTheme": "light-accent",
30
+ "padding": {
31
+ "d": "xl",
32
+ "m": "lg"
33
+ }
34
+ },
35
+ "blocks": [
36
+ {
37
+ "id": "blk_vct7gw95n1",
38
+ "type": "heading",
39
+ "v": 1,
40
+ "fields": {
41
+ "text": "Slow yoga and bodywork for real bodies",
42
+ "level": "h1",
43
+ "size": "h1",
44
+ "eyebrow": "Yoga & bodywork · SE Portland",
45
+ "subheading": "Small, patient classes for every kind of body, and massage therapists who listen first. Twelve mats a class, tea afterwards, and nobody in a hurry."
46
+ },
47
+ "column": 0,
48
+ "variant": "plain"
49
+ },
50
+ {
51
+ "id": "blk_e5hr89w7pd",
52
+ "type": "button",
53
+ "v": 1,
54
+ "fields": {
55
+ "label": "See the class schedule",
56
+ "link": {
57
+ "type": "page",
58
+ "page": "pg_f7jcnz65me"
59
+ },
60
+ "role": "primary",
61
+ "secondaryLabel": "Book a massage",
62
+ "secondaryLink": {
63
+ "type": "page",
64
+ "page": "pg_xmmxstbmvf"
65
+ },
66
+ "note": "New here? Your first week is $25."
67
+ },
68
+ "column": 0,
69
+ "variant": "default"
70
+ },
71
+ {
72
+ "id": "blk_40we6p1z3t",
73
+ "type": "image",
74
+ "v": 1,
75
+ "fields": {
76
+ "image": {
77
+ "src": "https://images.unsplash.com/photo-1506126613408-eca07ce68773?w=1080&q=80",
78
+ "alt": "A woman meditating cross-legged on a wooden deck in the early light",
79
+ "width": 1080,
80
+ "height": 1256
81
+ },
82
+ "aspect": "4:5",
83
+ "lightbox": false
84
+ },
85
+ "column": 1,
86
+ "variant": "default",
87
+ "style": {
88
+ "imageTreatment": "arch"
89
+ }
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "id": "sec_410jh9fyhr",
95
+ "preset": "about/values@1",
96
+ "label": "Values",
97
+ "layout": {
98
+ "mode": "stack",
99
+ "columns": {
100
+ "d": [
101
+ 12
102
+ ]
103
+ },
104
+ "gap": "xl"
105
+ },
106
+ "style": {
107
+ "colorTheme": "light"
108
+ },
109
+ "blocks": [
110
+ {
111
+ "id": "blk_7psjscjt6v",
112
+ "type": "heading",
113
+ "v": 1,
114
+ "fields": {
115
+ "text": "Come exactly as you are",
116
+ "level": "h2",
117
+ "size": "auto",
118
+ "eyebrow": "The Fernwood way",
119
+ "subheading": "No mirrors, no performance, no perfect poses. Just a warm room and teachers who meet you where you are today."
120
+ },
121
+ "variant": "plain",
122
+ "style": {
123
+ "align": {
124
+ "d": "center"
125
+ }
126
+ }
127
+ },
128
+ {
129
+ "id": "blk_mv4z5w22bh",
130
+ "type": "icon-list",
131
+ "v": 1,
132
+ "fields": {
133
+ "items": [
134
+ {
135
+ "icon": "users",
136
+ "title": "Twelve mats, never more",
137
+ "text": "Small enough that your teacher learns your name, your knees and what helps on a hard day."
138
+ },
139
+ {
140
+ "icon": "clock",
141
+ "title": "Time to arrive",
142
+ "text": "Doors open fifteen minutes early so you can settle, stretch and leave the day outside."
143
+ },
144
+ {
145
+ "icon": "leaf",
146
+ "title": "Tea after every class",
147
+ "text": "A pot of something warm on the bench by the window, and people worth talking to."
148
+ }
149
+ ],
150
+ "columns": "3"
151
+ },
152
+ "variant": "tiles"
153
+ }
154
+ ]
155
+ },
156
+ {
157
+ "id": "sec_fa4k8m8p03",
158
+ "preset": "services/alternating@1",
159
+ "label": "Alternating image and text",
160
+ "layout": {
161
+ "mode": "grid",
162
+ "rows": {
163
+ "d": 33,
164
+ "m": 43
165
+ },
166
+ "items": {
167
+ "blk_cb635hcq7q": {
168
+ "d": {
169
+ "x": 1,
170
+ "y": 1,
171
+ "w": 12,
172
+ "h": 16
173
+ },
174
+ "m": {
175
+ "x": 1,
176
+ "y": 1,
177
+ "w": 8,
178
+ "h": 11
179
+ }
180
+ },
181
+ "blk_bjf6j96tvq": {
182
+ "d": {
183
+ "x": 15,
184
+ "y": 4,
185
+ "w": 9,
186
+ "h": 10
187
+ },
188
+ "m": {
189
+ "x": 1,
190
+ "y": 12,
191
+ "w": 8,
192
+ "h": 10
193
+ }
194
+ },
195
+ "blk_k8k73t543t": {
196
+ "d": {
197
+ "x": 13,
198
+ "y": 18,
199
+ "w": 12,
200
+ "h": 16
201
+ },
202
+ "m": {
203
+ "x": 1,
204
+ "y": 23,
205
+ "w": 8,
206
+ "h": 11
207
+ }
208
+ },
209
+ "blk_rh0p0k8tdv": {
210
+ "d": {
211
+ "x": 2,
212
+ "y": 21,
213
+ "w": 9,
214
+ "h": 10
215
+ },
216
+ "m": {
217
+ "x": 1,
218
+ "y": 34,
219
+ "w": 8,
220
+ "h": 10
221
+ }
222
+ }
223
+ }
224
+ },
225
+ "style": {
226
+ "colorTheme": "light-accent"
227
+ },
228
+ "blocks": [
229
+ {
230
+ "id": "blk_cb635hcq7q",
231
+ "type": "image",
232
+ "v": 1,
233
+ "fields": {
234
+ "image": {
235
+ "src": "https://images.unsplash.com/photo-1545205597-3d9d02c29597?w=1280&q=80",
236
+ "alt": "A small group holding tree pose together on a misty morning",
237
+ "width": 1280,
238
+ "height": 853
239
+ },
240
+ "aspect": "original",
241
+ "lightbox": false
242
+ },
243
+ "variant": "default"
244
+ },
245
+ {
246
+ "id": "blk_bjf6j96tvq",
247
+ "type": "text",
248
+ "v": 1,
249
+ "fields": {
250
+ "content": {
251
+ "type": "doc",
252
+ "content": [
253
+ {
254
+ "type": "paragraph",
255
+ "attrs": {
256
+ "preset": "eyebrow"
257
+ },
258
+ "content": [
259
+ {
260
+ "type": "text",
261
+ "text": "Group classes"
262
+ }
263
+ ]
264
+ },
265
+ {
266
+ "type": "heading",
267
+ "attrs": {
268
+ "level": 2,
269
+ "preset": "h2"
270
+ },
271
+ "content": [
272
+ {
273
+ "type": "text",
274
+ "text": "Thirty classes a week"
275
+ }
276
+ ]
277
+ },
278
+ {
279
+ "type": "paragraph",
280
+ "content": [
281
+ {
282
+ "type": "text",
283
+ "text": "From a gentle 6:30am flow to Friday-night restorative with bolsters and blankets. Every class offers options, so beginners and long-time students share the same room happily."
284
+ }
285
+ ]
286
+ },
287
+ {
288
+ "type": "paragraph",
289
+ "content": [
290
+ {
291
+ "type": "text",
292
+ "text": "See this week's schedule →",
293
+ "marks": [
294
+ {
295
+ "type": "link",
296
+ "attrs": {
297
+ "href": "/classes/"
298
+ }
299
+ }
300
+ ]
301
+ }
302
+ ]
303
+ }
304
+ ]
305
+ }
306
+ },
307
+ "variant": "default"
308
+ },
309
+ {
310
+ "id": "blk_k8k73t543t",
311
+ "type": "image",
312
+ "v": 1,
313
+ "fields": {
314
+ "image": {
315
+ "src": "https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=1280&q=80",
316
+ "alt": "A therapist warming oil in her hands before a back massage",
317
+ "width": 1280,
318
+ "height": 853
319
+ },
320
+ "aspect": "original",
321
+ "lightbox": false
322
+ },
323
+ "variant": "default"
324
+ },
325
+ {
326
+ "id": "blk_rh0p0k8tdv",
327
+ "type": "text",
328
+ "v": 1,
329
+ "fields": {
330
+ "content": {
331
+ "type": "doc",
332
+ "content": [
333
+ {
334
+ "type": "paragraph",
335
+ "attrs": {
336
+ "preset": "eyebrow"
337
+ },
338
+ "content": [
339
+ {
340
+ "type": "text",
341
+ "text": "Bodywork"
342
+ }
343
+ ]
344
+ },
345
+ {
346
+ "type": "heading",
347
+ "attrs": {
348
+ "level": 2,
349
+ "preset": "h2"
350
+ },
351
+ "content": [
352
+ {
353
+ "type": "text",
354
+ "text": "Massage that listens"
355
+ }
356
+ ]
357
+ },
358
+ {
359
+ "type": "paragraph",
360
+ "content": [
361
+ {
362
+ "type": "text",
363
+ "text": "Therapeutic, deep tissue and pregnancy massage with licensed therapists in two quiet rooms upstairs. Sixty or ninety minutes, with evening appointments four nights a week."
364
+ }
365
+ ]
366
+ },
367
+ {
368
+ "type": "paragraph",
369
+ "content": [
370
+ {
371
+ "type": "text",
372
+ "text": "Treatments and prices →",
373
+ "marks": [
374
+ {
375
+ "type": "link",
376
+ "attrs": {
377
+ "href": "/bodywork/"
378
+ }
379
+ }
380
+ ]
381
+ }
382
+ ]
383
+ }
384
+ ]
385
+ }
386
+ },
387
+ "variant": "default"
388
+ }
389
+ ]
390
+ },
391
+ {
392
+ "id": "sec_pc46zd5vz0",
393
+ "preset": "testimonials/large-single@1",
394
+ "label": "One big testimonial",
395
+ "layout": {
396
+ "mode": "stack",
397
+ "columns": {
398
+ "d": [
399
+ 12
400
+ ]
401
+ },
402
+ "width": "narrow"
403
+ },
404
+ "style": {
405
+ "colorTheme": "dark-accent",
406
+ "padding": {
407
+ "d": "xl",
408
+ "m": "lg"
409
+ }
410
+ },
411
+ "blocks": [
412
+ {
413
+ "id": "blk_7tkvwpv9hf",
414
+ "type": "testimonial",
415
+ "v": 1,
416
+ "fields": {
417
+ "quote": {
418
+ "type": "doc",
419
+ "content": [
420
+ {
421
+ "type": "paragraph",
422
+ "content": [
423
+ {
424
+ "type": "text",
425
+ "text": "I walked in with a stiff back and a lot of nerves. A year later I practise three mornings a week, and the people on the mats beside me have become friends."
426
+ }
427
+ ]
428
+ }
429
+ ]
430
+ },
431
+ "name": "Rosalind Achebe",
432
+ "role": "Student since 2025",
433
+ "photo": {
434
+ "src": "https://images.unsplash.com/photo-1544005313-94ddf0286df2?w=320&q=80",
435
+ "alt": "Portrait of Rosalind, a Fernwood student",
436
+ "width": 320,
437
+ "height": 479
438
+ }
439
+ },
440
+ "variant": "large",
441
+ "style": {
442
+ "align": {
443
+ "d": "center"
444
+ }
445
+ }
446
+ }
447
+ ]
448
+ },
449
+ {
450
+ "id": "sec_p13sa37w5e",
451
+ "preset": "events/cards@1",
452
+ "label": "Event cards",
453
+ "layout": {
454
+ "mode": "stack",
455
+ "columns": {
456
+ "d": [
457
+ 12
458
+ ]
459
+ }
460
+ },
461
+ "style": {
462
+ "colorTheme": "light"
463
+ },
464
+ "blocks": [
465
+ {
466
+ "id": "blk_h18g7jk3by",
467
+ "type": "events",
468
+ "v": 1,
469
+ "fields": {
470
+ "heading": "Workshops & retreats",
471
+ "headingLevel": "h2",
472
+ "source": {
473
+ "collection": "workshops",
474
+ "filter": {
475
+ "upcoming": true
476
+ },
477
+ "limit": 3
478
+ },
479
+ "showImage": true,
480
+ "showLocation": true,
481
+ "showExcerpt": true,
482
+ "registerLabel": "Save a place",
483
+ "emptyMessage": "New workshops are posted at the start of each season — check back soon.",
484
+ "structuredData": true
485
+ },
486
+ "variant": "cards"
487
+ }
488
+ ]
489
+ },
490
+ {
491
+ "id": "sec_yz86mmmw5k",
492
+ "preset": "cta/banner@1",
493
+ "label": "Centred banner",
494
+ "layout": {
495
+ "mode": "stack",
496
+ "columns": {
497
+ "d": [
498
+ 12
499
+ ]
500
+ },
501
+ "width": "narrow",
502
+ "gap": "lg"
503
+ },
504
+ "style": {
505
+ "colorTheme": "brand",
506
+ "padding": {
507
+ "d": "xl",
508
+ "m": "lg"
509
+ }
510
+ },
511
+ "blocks": [
512
+ {
513
+ "id": "blk_2pwm6s19me",
514
+ "type": "heading",
515
+ "v": 1,
516
+ "fields": {
517
+ "text": "New to Fernwood? Start with a week",
518
+ "level": "h2",
519
+ "size": "auto",
520
+ "subheading": "Seven days of unlimited classes for $25, so you can find the teachers and times that feel right."
521
+ },
522
+ "variant": "plain",
523
+ "style": {
524
+ "align": {
525
+ "d": "center"
526
+ }
527
+ }
528
+ },
529
+ {
530
+ "id": "blk_9fm50v7anj",
531
+ "type": "button",
532
+ "v": 1,
533
+ "fields": {
534
+ "label": "Claim your intro week",
535
+ "link": {
536
+ "type": "url",
537
+ "url": "https://cal.com/fernwood-yoga"
538
+ },
539
+ "role": "primary",
540
+ "secondaryLabel": "Gift a class card",
541
+ "secondaryLink": {
542
+ "type": "page",
543
+ "page": "pg_av2p7shq0g"
544
+ }
545
+ },
546
+ "variant": "large",
547
+ "style": {
548
+ "align": {
549
+ "d": "center"
550
+ }
551
+ }
552
+ }
553
+ ]
554
+ }
555
+ ]
556
+ }