@port60/template-kit 0.8.0 → 0.10.0
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.
- package/README.md +10 -3
- package/bin/cli.mjs +26 -4
- package/package.json +1 -1
- package/src/commands/content.mjs +42 -0
- package/src/commands/create.mjs +10 -7
- package/src/commands/dev.mjs +134 -8
- package/src/commands/model.mjs +34 -0
- package/src/commands/packageCmd.mjs +3 -3
- package/src/commands/refresh.mjs +48 -0
- package/src/commands/upgrade.mjs +44 -0
- package/src/commands/validate.mjs +2 -3
- package/src/lib/agentsMd.mjs +78 -21
- package/src/vendor/contract/v1/behaviours.json +129 -0
- package/src/vendor/contract/v1/content-bounds.json +3 -3
- package/src/vendor/contract/v1/content-model.json +193 -0
- package/src/vendor/contract/v1/context.json +1985 -141
- package/src/vendor/contract/v1/dialect.json +3 -3
- package/src/vendor/contract/v1/fonts.json +1 -1
- package/src/vendor/contract/v1/imagery.json +4 -4
- package/src/vendor/contract/v1/islands.json +256 -110
- package/src/vendor/contract/v1/layout.json +25 -0
- package/src/vendor/contract/v1/manifest.schema.json +60 -14
- package/src/vendor/contract/v1/sections.json +330 -61
- package/src/vendor/contract/v1/tokens.json +1 -1
- package/src/vendor/contract/v1.lock.json +1 -1
- package/src/vendor/engine/content-footprint.mjs +79 -0
- package/src/vendor/validator/behaviors-runtime.js +2 -0
- package/src/vendor/validator/fixture-art.mjs +109 -0
- package/src/vendor/validator/model-reference.mjs +92 -0
- package/src/vendor/validator/platform-base.css +4250 -0
- package/src/vendor/validator/preview.mjs +497 -23
- package/src/vendor/validator/site-context.mjs +97 -0
- package/src/vendor/validator/validate.mjs +214 -14
- package/starter/assets/theme.css +54 -8
- package/starter/layout.liquid +15 -16
- package/starter/manifest.json +10 -5
- package/starter/sections/campaigns.liquid +23 -0
- package/starter/sections/homeHero.liquid +26 -11
- package/starter/sections/people.liquid +1 -1
- package/starter/sections/values.liquid +6 -1
|
@@ -1,12 +1,61 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "The data context templates render with. Templates receive ONLY platform-provided data
|
|
2
|
+
"description": "The data context templates render with. Templates receive ONLY platform-provided data, never secrets, never other tenants' data. Additive-only within a contract major. Section renderers get {section, brand}; the layout gets {brand, nav, socials}; page templates (pages/{page}.liquid) get their page's documented objects + brand.",
|
|
3
3
|
"variables": [
|
|
4
|
+
{
|
|
5
|
+
"path": "site",
|
|
6
|
+
"availableIn": [
|
|
7
|
+
"section",
|
|
8
|
+
"layout"
|
|
9
|
+
],
|
|
10
|
+
"description": "The one content tree (content model v1, contract/v1/content-model.json): site.brand, site.nav, site.socials, site.locale and the typed collections under site.content.*. Available to every render scope; page templates receive it alongside their page objects."
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"path": "site.brand",
|
|
14
|
+
"availableIn": [
|
|
15
|
+
"section",
|
|
16
|
+
"layout"
|
|
17
|
+
],
|
|
18
|
+
"description": "The organisation's branding (same shape as the flat-era brand object)."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "site.nav",
|
|
22
|
+
"availableIn": [
|
|
23
|
+
"section",
|
|
24
|
+
"layout"
|
|
25
|
+
],
|
|
26
|
+
"description": "Navigation: items (curated main or platform-derived), footer, derived, the flat-era nav shape, re-addressed."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "site.socials",
|
|
30
|
+
"availableIn": [
|
|
31
|
+
"section",
|
|
32
|
+
"layout"
|
|
33
|
+
],
|
|
34
|
+
"description": "Social links, the flat-era socials shape."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"path": "site.locale",
|
|
38
|
+
"availableIn": [
|
|
39
|
+
"section",
|
|
40
|
+
"layout"
|
|
41
|
+
],
|
|
42
|
+
"description": "Locale: code, direction, languages."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "site.content",
|
|
46
|
+
"availableIn": [
|
|
47
|
+
"section",
|
|
48
|
+
"layout"
|
|
49
|
+
],
|
|
50
|
+
"description": "The typed collections: services, events, articles, campaigns, causes, courses, volunteering, media, resources, locations, schedules, about. EVERY collection is bounded (cap + moreHref in the model registry), every enum is open, every optional field explicitly nullable, and the model only ever grows. The validator computes your template's content footprint from the paths you read and stamps the required minimum model version at publish; dynamic indexing into site.content is refused so the footprint stays decidable."
|
|
51
|
+
},
|
|
4
52
|
{
|
|
5
53
|
"path": "section",
|
|
6
54
|
"availableIn": [
|
|
7
55
|
"section"
|
|
8
56
|
],
|
|
9
|
-
"description": "The typed content of the section being rendered
|
|
57
|
+
"description": "The typed content of the section being rendered, its shape is the section type's fields (see the section catalogue).",
|
|
58
|
+
"deprecated": true
|
|
10
59
|
},
|
|
11
60
|
{
|
|
12
61
|
"path": "brand.name",
|
|
@@ -14,7 +63,8 @@
|
|
|
14
63
|
"section",
|
|
15
64
|
"layout"
|
|
16
65
|
],
|
|
17
|
-
"description": "The charity's display name."
|
|
66
|
+
"description": "The charity's display name.",
|
|
67
|
+
"deprecated": true
|
|
18
68
|
},
|
|
19
69
|
{
|
|
20
70
|
"path": "brand.tagline",
|
|
@@ -22,168 +72,288 @@
|
|
|
22
72
|
"section",
|
|
23
73
|
"layout"
|
|
24
74
|
],
|
|
25
|
-
"description": "The charity's tagline."
|
|
75
|
+
"description": "The charity's tagline.",
|
|
76
|
+
"deprecated": true
|
|
26
77
|
},
|
|
27
78
|
{
|
|
28
79
|
"path": "brand.logoUrl",
|
|
29
80
|
"availableIn": [
|
|
30
81
|
"layout"
|
|
31
82
|
],
|
|
32
|
-
"description": "The charity's logo URL, or null when none is set
|
|
83
|
+
"description": "The charity's logo URL, or null when none is set, always branch on it.",
|
|
84
|
+
"deprecated": true
|
|
33
85
|
},
|
|
34
86
|
{
|
|
35
87
|
"path": "brand.logoType",
|
|
36
88
|
"availableIn": [
|
|
37
89
|
"layout"
|
|
38
90
|
],
|
|
39
|
-
"description": "'full' (the image already contains the name
|
|
91
|
+
"description": "'full' (the image already contains the name, show it alone) or 'icon' (a mark, show it beside brand.name).",
|
|
92
|
+
"deprecated": true
|
|
40
93
|
},
|
|
41
94
|
{
|
|
42
95
|
"path": "brand.footerLogoUrl",
|
|
43
|
-
"description": "Optional FOOTER mark (often a lighter or single-colour logo variant the tenant uploads for dark footers), or null
|
|
96
|
+
"description": "Optional FOOTER mark (often a lighter or single-colour logo variant the tenant uploads for dark footers), or null, always branch. When unset, fall back to your own choice: the main logo, or the name as text.",
|
|
44
97
|
"availableIn": [
|
|
45
98
|
"layout"
|
|
46
|
-
]
|
|
99
|
+
],
|
|
100
|
+
"deprecated": true
|
|
47
101
|
},
|
|
48
102
|
{
|
|
49
103
|
"path": "nav.items",
|
|
50
104
|
"availableIn": [
|
|
51
105
|
"layout"
|
|
52
106
|
],
|
|
53
|
-
"description": "The site's primary navigation. By default platform-derived per tenant (pages that exist, features that are on); when the tenant has curated a header menu, this IS that menu instead
|
|
107
|
+
"description": "The site's primary navigation. By default platform-derived per tenant (pages that exist, features that are on); when the tenant has curated a header menu, this IS that menu instead, the same { label, href, cta?, external?, children? } shape either way, so render ALL of it exactly as before.",
|
|
108
|
+
"deprecated": true
|
|
54
109
|
},
|
|
55
110
|
{
|
|
56
111
|
"path": "nav.items[].label",
|
|
57
112
|
"availableIn": [
|
|
58
113
|
"layout"
|
|
59
114
|
],
|
|
60
|
-
"description": "The item's display label (tenant-chosen for some items
|
|
115
|
+
"description": "The item's display label (tenant-chosen for some items, treat as text, it is escaped like everything else).",
|
|
116
|
+
"deprecated": true
|
|
61
117
|
},
|
|
62
118
|
{
|
|
63
119
|
"path": "nav.items[].href",
|
|
64
120
|
"availableIn": [
|
|
65
121
|
"layout"
|
|
66
122
|
],
|
|
67
|
-
"description": "The item's destination path."
|
|
123
|
+
"description": "The item's destination path.",
|
|
124
|
+
"deprecated": true
|
|
68
125
|
},
|
|
69
126
|
{
|
|
70
127
|
"path": "nav.items[].cta",
|
|
71
128
|
"availableIn": [
|
|
72
129
|
"layout"
|
|
73
130
|
],
|
|
74
|
-
"description": "True for the call-to-action item (Donate)
|
|
131
|
+
"description": "True for the call-to-action item (Donate), style it prominently.",
|
|
132
|
+
"deprecated": true
|
|
75
133
|
},
|
|
76
134
|
{
|
|
77
135
|
"path": "nav.items[].children",
|
|
78
136
|
"availableIn": [
|
|
79
137
|
"layout"
|
|
80
138
|
],
|
|
81
|
-
"description": "Optional sub-items
|
|
139
|
+
"description": "Optional sub-items for dropdowns and mega menus. Children use the same item shape and may carry one further children level, giving a maximum of two levels below the top item.",
|
|
140
|
+
"deprecated": true
|
|
82
141
|
},
|
|
83
142
|
{
|
|
84
143
|
"path": "nav.items[].external",
|
|
85
144
|
"availableIn": [
|
|
86
145
|
"layout"
|
|
87
146
|
],
|
|
88
|
-
"description": "True when the item points off-site (a tenant-curated external link)
|
|
147
|
+
"description": "True when the item points off-site (a tenant-curated external link), add target=\"_blank\" rel=\"noopener\". Absent/false for internal links.",
|
|
148
|
+
"deprecated": true
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"path": "nav.items[].group",
|
|
152
|
+
"availableIn": [
|
|
153
|
+
"layout"
|
|
154
|
+
],
|
|
155
|
+
"description": "Optional tenant-authored column or topic label for grouping items inside a mega menu.",
|
|
156
|
+
"deprecated": true
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"path": "nav.items[].description",
|
|
160
|
+
"availableIn": [
|
|
161
|
+
"layout"
|
|
162
|
+
],
|
|
163
|
+
"description": "Optional short supporting text for a richer navigation card.",
|
|
164
|
+
"deprecated": true
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"path": "nav.items[].imageUrl",
|
|
168
|
+
"availableIn": [
|
|
169
|
+
"layout"
|
|
170
|
+
],
|
|
171
|
+
"description": "Optional image URL for a navigation card. Always branch when absent.",
|
|
172
|
+
"deprecated": true
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"path": "nav.items[].megaMenu",
|
|
176
|
+
"availableIn": [
|
|
177
|
+
"layout"
|
|
178
|
+
],
|
|
179
|
+
"description": "Optional mega-menu presentation metadata on a top-level item: columns (2 to 4) and an optional promo object with title, text, href, label and imageUrl. It is content only; the template owns hover, focus and responsive presentation in CSS.",
|
|
180
|
+
"deprecated": true
|
|
89
181
|
},
|
|
90
182
|
{
|
|
91
183
|
"path": "nav.footer",
|
|
92
184
|
"availableIn": [
|
|
93
185
|
"layout"
|
|
94
186
|
],
|
|
95
|
-
"description": "The tenant's curated FOOTER menu
|
|
187
|
+
"description": "The tenant's curated FOOTER menu, the same item shape as nav.items[] (label, href, cta?, external?, children?). EMPTY when the tenant hasn't built one, so branch on nav.footer.size before rendering a footer-menu block (derive or omit). Optional to support, a template that ignores it simply shows its own footer.",
|
|
188
|
+
"deprecated": true
|
|
96
189
|
},
|
|
97
190
|
{
|
|
98
191
|
"path": "nav.derived",
|
|
99
192
|
"availableIn": [
|
|
100
193
|
"layout"
|
|
101
194
|
],
|
|
102
|
-
"description": "The platform's AUTOMATIC nav (same item shape as nav.items[]), always present even when the tenant has curated nav.items. Use it when you want the auto, feature-aware list somewhere regardless of the tenant's header curation; most templates just render nav.items."
|
|
195
|
+
"description": "The platform's AUTOMATIC nav (same item shape as nav.items[]), always present even when the tenant has curated nav.items. Use it when you want the auto, feature-aware list somewhere regardless of the tenant's header curation; most templates just render nav.items.",
|
|
196
|
+
"deprecated": true
|
|
103
197
|
},
|
|
104
198
|
{
|
|
105
199
|
"path": "socials",
|
|
106
200
|
"availableIn": [
|
|
107
201
|
"layout"
|
|
108
202
|
],
|
|
109
|
-
"description": "The tenant's configured social links (possibly empty). Render icons via iconSvg
|
|
203
|
+
"description": "The tenant's configured social links (possibly empty). Render icons via iconSvg, platform-generated markup, safe for the raw filter (the one exception beyond richtext fields).",
|
|
204
|
+
"deprecated": true
|
|
110
205
|
},
|
|
111
206
|
{
|
|
112
207
|
"path": "socials[].platform",
|
|
113
208
|
"availableIn": [
|
|
114
209
|
"layout"
|
|
115
210
|
],
|
|
116
|
-
"description": "Platform key (facebook, instagram, x, …)."
|
|
211
|
+
"description": "Platform key (facebook, instagram, x, …).",
|
|
212
|
+
"deprecated": true
|
|
117
213
|
},
|
|
118
214
|
{
|
|
119
215
|
"path": "socials[].url",
|
|
120
216
|
"availableIn": [
|
|
121
217
|
"layout"
|
|
122
218
|
],
|
|
123
|
-
"description": "The profile URL."
|
|
219
|
+
"description": "The profile URL.",
|
|
220
|
+
"deprecated": true
|
|
124
221
|
},
|
|
125
222
|
{
|
|
126
223
|
"path": "socials[].iconSvg",
|
|
127
224
|
"availableIn": [
|
|
128
225
|
"layout"
|
|
129
226
|
],
|
|
130
|
-
"description": "The platform-drawn icon SVG for this network
|
|
227
|
+
"description": "The platform-drawn icon SVG for this network, output with | raw.",
|
|
228
|
+
"deprecated": true
|
|
131
229
|
},
|
|
132
230
|
{
|
|
133
231
|
"path": "worship",
|
|
134
232
|
"availableIn": [
|
|
135
233
|
"layout"
|
|
136
234
|
],
|
|
137
|
-
"description": "The tenant's worship-schedule rail (prayer/service times), or null when not configured
|
|
235
|
+
"description": "The tenant's worship-schedule rail (prayer/service times), or null when not configured, ALWAYS branch on it. Faith-neutral: every label is tenant data. Render it as header chrome (the reference pattern is a utility bar above the nav); omit entirely when null. Rendering it requires declaring supports.worship in the manifest (the validator checks both directions), the choosers use that declaration to steer worship-enabled tenants.",
|
|
236
|
+
"deprecated": true
|
|
138
237
|
},
|
|
139
238
|
{
|
|
140
239
|
"path": "worship.times",
|
|
141
240
|
"availableIn": [
|
|
142
241
|
"layout"
|
|
143
242
|
],
|
|
144
|
-
"description": "Up to 8 rows of {name, begins, congregation}
|
|
243
|
+
"description": "Up to 8 rows of {name, begins, congregation}, name is the prayer/service name; begins and congregation are display strings (times or short text), either may be null.",
|
|
244
|
+
"deprecated": true
|
|
145
245
|
},
|
|
146
246
|
{
|
|
147
247
|
"path": "worship.beginsLabel",
|
|
148
248
|
"availableIn": [
|
|
149
249
|
"layout"
|
|
150
250
|
],
|
|
151
|
-
"description": "Row label for the begins times (tenant-set; defaults to 'Begins')."
|
|
251
|
+
"description": "Row label for the begins times (tenant-set; defaults to 'Begins').",
|
|
252
|
+
"deprecated": true
|
|
152
253
|
},
|
|
153
254
|
{
|
|
154
255
|
"path": "worship.congregationLabel",
|
|
155
256
|
"availableIn": [
|
|
156
257
|
"layout"
|
|
157
258
|
],
|
|
158
|
-
"description": "Row label for the congregation times (tenant-set; e.g. \"Jama'at\"; defaults to 'Congregation'). Only meaningful when at least one row carries a congregation value."
|
|
259
|
+
"description": "Row label for the congregation times (tenant-set; e.g. \"Jama'at\"; defaults to 'Congregation'). Only meaningful when at least one row carries a congregation value.",
|
|
260
|
+
"deprecated": true
|
|
159
261
|
},
|
|
160
262
|
{
|
|
161
263
|
"path": "worship.note",
|
|
162
264
|
"availableIn": [
|
|
163
265
|
"layout"
|
|
164
266
|
],
|
|
165
|
-
"description": "A short free-text line for the rail (e.g. \"Jum'a 13:15 & 14:15\"), or null."
|
|
267
|
+
"description": "A short free-text line for the rail (e.g. \"Jum'a 13:15 & 14:15\"), or null.",
|
|
268
|
+
"deprecated": true
|
|
166
269
|
},
|
|
167
270
|
{
|
|
168
271
|
"path": "worship.href",
|
|
169
272
|
"availableIn": [
|
|
170
273
|
"layout"
|
|
171
274
|
],
|
|
172
|
-
"description": "A same-site path the note links to (a service page with full timetables), or null."
|
|
275
|
+
"description": "A same-site path the note links to (a service page with full timetables), or null.",
|
|
276
|
+
"deprecated": true
|
|
173
277
|
},
|
|
174
278
|
{
|
|
175
279
|
"path": "worship.today",
|
|
176
280
|
"availableIn": [
|
|
177
281
|
"layout"
|
|
178
282
|
],
|
|
179
|
-
"description": "Today's date, platform-formatted (e.g. \"24 July 2026\")."
|
|
283
|
+
"description": "Today's date, platform-formatted (e.g. \"24 July 2026\").",
|
|
284
|
+
"deprecated": true
|
|
180
285
|
},
|
|
181
286
|
{
|
|
182
287
|
"path": "worship.todayAlt",
|
|
183
288
|
"availableIn": [
|
|
184
289
|
"layout"
|
|
185
290
|
],
|
|
186
|
-
"description": "Today in the tenant's alternate calendar (Islamic civil calendar, e.g. \"11 Safar 1448\") when they opted in, else null
|
|
291
|
+
"description": "Today in the tenant's alternate calendar (Islamic civil calendar, e.g. \"11 Safar 1448\") when they opted in, else null, always branch.",
|
|
292
|
+
"deprecated": true
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"path": "worship.next",
|
|
296
|
+
"availableIn": [
|
|
297
|
+
"layout"
|
|
298
|
+
],
|
|
299
|
+
"description": "The next prayer or service as {name, begins, congregation, target}, or null. target is an ISO timestamp in the organisation's timezone. Templates may display it statically; use the next_prayer island for a ticking countdown.",
|
|
300
|
+
"deprecated": true
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"path": "worship.jumah",
|
|
304
|
+
"availableIn": [
|
|
305
|
+
"layout"
|
|
306
|
+
],
|
|
307
|
+
"description": "Structured Friday congregations as rows of {name, begins, congregation}. Empty for schedules without configured Friday times.",
|
|
308
|
+
"deprecated": true
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"path": "worship.hijri",
|
|
312
|
+
"availableIn": [
|
|
313
|
+
"layout"
|
|
314
|
+
],
|
|
315
|
+
"description": "Structured alternate-calendar data. Contract v1 exposes {display}, or null when disabled.",
|
|
316
|
+
"deprecated": true
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"path": "worship.observances",
|
|
320
|
+
"availableIn": [
|
|
321
|
+
"layout"
|
|
322
|
+
],
|
|
323
|
+
"description": "Upcoming structured observances as {name, date, href}. Empty until the tenant has authored observances.",
|
|
324
|
+
"deprecated": true
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"path": "locale",
|
|
328
|
+
"availableIn": [
|
|
329
|
+
"layout"
|
|
330
|
+
],
|
|
331
|
+
"description": "The public rendering locale and direction. Always present as {code, direction, languages}.",
|
|
332
|
+
"deprecated": true
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"path": "locale.code",
|
|
336
|
+
"availableIn": [
|
|
337
|
+
"layout"
|
|
338
|
+
],
|
|
339
|
+
"description": "Current BCP 47 language code, currently en, cy or ar.",
|
|
340
|
+
"deprecated": true
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"path": "locale.direction",
|
|
344
|
+
"availableIn": [
|
|
345
|
+
"layout"
|
|
346
|
+
],
|
|
347
|
+
"description": "ltr or rtl. The platform also applies this direction to the document element.",
|
|
348
|
+
"deprecated": true
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"path": "locale.languages",
|
|
352
|
+
"availableIn": [
|
|
353
|
+
"layout"
|
|
354
|
+
],
|
|
355
|
+
"description": "Supported public languages as {code, label, direction}. Place the language_switch island for platform-owned switching behaviour.",
|
|
356
|
+
"deprecated": true
|
|
187
357
|
},
|
|
188
358
|
{
|
|
189
359
|
"path": "events",
|
|
@@ -191,279 +361,489 @@
|
|
|
191
361
|
"page:events",
|
|
192
362
|
"section:events"
|
|
193
363
|
],
|
|
194
|
-
"description": "The tenant's published events, soonest first
|
|
364
|
+
"description": "The tenant's published events, soonest first, a CURATED read-only view for display. On page:events it is every published event; on section:events it is the TICKETED ones (the section's purpose). Transactional steps (RSVP, ticket purchase) stay platform-owned on the detail view, link with detailHref, never rebuild those flows.",
|
|
365
|
+
"deprecated": true
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"path": "causes",
|
|
369
|
+
"availableIn": [
|
|
370
|
+
"section:appealGrid",
|
|
371
|
+
"section:emergency"
|
|
372
|
+
],
|
|
373
|
+
"description": "Published and currently available appeals. This is a display-only summary; payment processor identifiers and transaction configuration are never exposed. Empty when there is no active appeal.",
|
|
374
|
+
"deprecated": true
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"path": "causes[]",
|
|
378
|
+
"availableIn": [
|
|
379
|
+
"section:appealGrid",
|
|
380
|
+
"section:emergency"
|
|
381
|
+
],
|
|
382
|
+
"description": "An appeal card with id, title, slug, description, imageUrl, targetAmount, raisedAmount, progressPercentage, href and a boolean paymentOptions summary. Always use href to reach the platform donation flow.",
|
|
383
|
+
"deprecated": true
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"path": "services",
|
|
387
|
+
"availableIn": [
|
|
388
|
+
"section:programmes"
|
|
389
|
+
],
|
|
390
|
+
"description": "Published services and programmes in display order. Empty when none are published, so omit the section rather than inventing cards.",
|
|
391
|
+
"deprecated": true
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"path": "services[]",
|
|
395
|
+
"availableIn": [
|
|
396
|
+
"section:programmes"
|
|
397
|
+
],
|
|
398
|
+
"description": "A service card with id, title, slug, summary, imageUrl and href. Use href rather than constructing a route.",
|
|
399
|
+
"deprecated": true
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"path": "resources",
|
|
403
|
+
"availableIn": [
|
|
404
|
+
"section:resources"
|
|
405
|
+
],
|
|
406
|
+
"description": "Public documents from the tenant's media library, newest first. Private assets are never included. Empty when no public documents exist.",
|
|
407
|
+
"deprecated": true
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"path": "resources[]",
|
|
411
|
+
"availableIn": [
|
|
412
|
+
"section:resources"
|
|
413
|
+
],
|
|
414
|
+
"description": "A safe document link with id, title, folder, url, contentType, bytes and publishedAt. Always use url rather than constructing storage paths.",
|
|
415
|
+
"deprecated": true
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"path": "locations",
|
|
419
|
+
"availableIn": [
|
|
420
|
+
"section:locations"
|
|
421
|
+
],
|
|
422
|
+
"description": "Public locations from the tenant's venue book, primary first. Empty when no venues are configured.",
|
|
423
|
+
"deprecated": true
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"path": "locations[]",
|
|
427
|
+
"availableIn": [
|
|
428
|
+
"section:locations"
|
|
429
|
+
],
|
|
430
|
+
"description": "A public location with id, name, address, latitude, longitude, primary and directionsHref. Provider references and private notes are excluded.",
|
|
431
|
+
"deprecated": true
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"path": "opportunities",
|
|
435
|
+
"availableIn": [
|
|
436
|
+
"section:volunteering"
|
|
437
|
+
],
|
|
438
|
+
"description": "Published volunteering opportunities in display order. Each item contains id, slug, title, summary, imageUrl and content with location, schedule, commitment, dates, expected hours and shift dates. Sign-up remains the volunteer_signup island.",
|
|
439
|
+
"deprecated": true
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"path": "media",
|
|
443
|
+
"availableIn": [
|
|
444
|
+
"section:media"
|
|
445
|
+
],
|
|
446
|
+
"description": "Published structured media entries. Each item contains id, slug, title, summary, imageUrl and content with mediaType, mediaUrl, speaker, publishedAt and duration.",
|
|
447
|
+
"deprecated": true
|
|
195
448
|
},
|
|
196
449
|
{
|
|
197
450
|
"path": "infoEvents",
|
|
198
451
|
"availableIn": [
|
|
199
452
|
"section:whatsOn"
|
|
200
453
|
],
|
|
201
|
-
"description": "The tenant's INFO events (special days
|
|
454
|
+
"description": "The tenant's INFO events (special days, no sign-up, no payment), soonest first. The same curated event shape as events[]. Render them your way, or place {% island 'whats_on_strip' %} for the ready-made strip. Empty when none, render nothing you invent (derive or omit).",
|
|
455
|
+
"deprecated": true
|
|
202
456
|
},
|
|
203
457
|
{
|
|
204
458
|
"path": "latestArticles",
|
|
205
459
|
"availableIn": [
|
|
206
460
|
"section:articles"
|
|
207
461
|
],
|
|
208
|
-
"description": "The newest published articles (up to 6), newest first. Render them your way, or place {% island 'latest_articles' %} for the ready-made strip. Empty when none
|
|
462
|
+
"description": "The newest published articles (up to 6), newest first. Render them your way, or place {% island 'latest_articles' %} for the ready-made strip. Empty when none, derive or omit.",
|
|
463
|
+
"deprecated": true
|
|
209
464
|
},
|
|
210
465
|
{
|
|
211
466
|
"path": "latestArticles[].title",
|
|
212
467
|
"availableIn": [
|
|
213
468
|
"section:articles"
|
|
214
469
|
],
|
|
215
|
-
"description": "The article's title."
|
|
470
|
+
"description": "The article's title.",
|
|
471
|
+
"deprecated": true
|
|
216
472
|
},
|
|
217
473
|
{
|
|
218
474
|
"path": "latestArticles[].href",
|
|
219
475
|
"availableIn": [
|
|
220
476
|
"section:articles"
|
|
221
477
|
],
|
|
222
|
-
"description": "The canonical link to the article
|
|
478
|
+
"description": "The canonical link to the article, always use this.",
|
|
479
|
+
"deprecated": true
|
|
223
480
|
},
|
|
224
481
|
{
|
|
225
482
|
"path": "latestArticles[].excerpt",
|
|
226
483
|
"availableIn": [
|
|
227
484
|
"section:articles"
|
|
228
485
|
],
|
|
229
|
-
"description": "Short summary, or null
|
|
486
|
+
"description": "Short summary, or null, branch on it.",
|
|
487
|
+
"deprecated": true
|
|
230
488
|
},
|
|
231
489
|
{
|
|
232
490
|
"path": "latestArticles[].imageUrl",
|
|
233
491
|
"availableIn": [
|
|
234
492
|
"section:articles"
|
|
235
493
|
],
|
|
236
|
-
"description": "Cover image URL, or null
|
|
494
|
+
"description": "Cover image URL, or null, always branch.",
|
|
495
|
+
"deprecated": true
|
|
237
496
|
},
|
|
238
497
|
{
|
|
239
498
|
"path": "latestArticles[].publishedAt",
|
|
240
499
|
"availableIn": [
|
|
241
500
|
"section:articles"
|
|
242
501
|
],
|
|
243
|
-
"description": "ISO-8601 publish time, or null
|
|
502
|
+
"description": "ISO-8601 publish time, or null, format with the date filter.",
|
|
503
|
+
"deprecated": true
|
|
244
504
|
},
|
|
245
505
|
{
|
|
246
506
|
"path": "latestArticles[].readingMinutes",
|
|
247
507
|
"availableIn": [
|
|
248
508
|
"section:articles"
|
|
249
509
|
],
|
|
250
|
-
"description": "Estimated reading minutes, or null."
|
|
510
|
+
"description": "Estimated reading minutes, or null.",
|
|
511
|
+
"deprecated": true
|
|
251
512
|
},
|
|
252
513
|
{
|
|
253
514
|
"path": "latestArticles[].categories",
|
|
254
515
|
"availableIn": [
|
|
255
516
|
"section:articles"
|
|
256
517
|
],
|
|
257
|
-
"description": "The article's category names (possibly empty)
|
|
518
|
+
"description": "The article's category names (possibly empty), treat as text.",
|
|
519
|
+
"deprecated": true
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"path": "campaigns",
|
|
523
|
+
"availableIn": [
|
|
524
|
+
"section:campaigns"
|
|
525
|
+
],
|
|
526
|
+
"description": "The tenant's live campaigns, in display order. Empty when none are live, render nothing.",
|
|
527
|
+
"deprecated": true
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
"path": "campaigns[].title",
|
|
531
|
+
"availableIn": [
|
|
532
|
+
"section:campaigns"
|
|
533
|
+
],
|
|
534
|
+
"description": "The campaign's name.",
|
|
535
|
+
"deprecated": true
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"path": "campaigns[].href",
|
|
539
|
+
"availableIn": [
|
|
540
|
+
"section:campaigns"
|
|
541
|
+
],
|
|
542
|
+
"description": "The canonical link to the campaign page, always use this.",
|
|
543
|
+
"deprecated": true
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"path": "campaigns[].summary",
|
|
547
|
+
"availableIn": [
|
|
548
|
+
"section:campaigns"
|
|
549
|
+
],
|
|
550
|
+
"description": "Short summary, or null, branch on it.",
|
|
551
|
+
"deprecated": true
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"path": "campaigns[].imageUrl",
|
|
555
|
+
"availableIn": [
|
|
556
|
+
"section:campaigns"
|
|
557
|
+
],
|
|
558
|
+
"description": "Featured image URL, or null, always branch.",
|
|
559
|
+
"deprecated": true
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
"path": "campaignsLabel",
|
|
563
|
+
"availableIn": [
|
|
564
|
+
"section:campaigns"
|
|
565
|
+
],
|
|
566
|
+
"description": "What the tenant calls their campaigns section (\"Campaigns\" by default), the heading fallback.",
|
|
567
|
+
"deprecated": true
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"path": "articles",
|
|
571
|
+
"availableIn": [
|
|
572
|
+
"page:articles"
|
|
573
|
+
],
|
|
574
|
+
"description": "Published article summaries for the current listing or selected category. Each item contains id, title, slug, excerpt, imageUrl, authorName, authorRole, categories, publishedAt, readingMinutes, engagement counts and href.",
|
|
575
|
+
"deprecated": true
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
"path": "selectedCategory",
|
|
579
|
+
"availableIn": [
|
|
580
|
+
"page:articles"
|
|
581
|
+
],
|
|
582
|
+
"description": "The active category filter, or null on an unfiltered listing.",
|
|
583
|
+
"deprecated": true
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"path": "article",
|
|
587
|
+
"availableIn": [
|
|
588
|
+
"page:article"
|
|
589
|
+
],
|
|
590
|
+
"description": "The article detail being displayed. It carries the article summary fields plus sanitised bodyHtml, updatedAt and allowComments. Render bodyHtml with the raw filter; engagement and comments remain platform islands.",
|
|
591
|
+
"deprecated": true
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"path": "relatedArticles",
|
|
595
|
+
"availableIn": [
|
|
596
|
+
"page:article"
|
|
597
|
+
],
|
|
598
|
+
"description": "Up to three other published article summaries, newest first.",
|
|
599
|
+
"deprecated": true
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
"path": "categories",
|
|
603
|
+
"availableIn": [
|
|
604
|
+
"page:articles",
|
|
605
|
+
"page:article"
|
|
606
|
+
],
|
|
607
|
+
"description": "Categories currently used by published articles. Each item has name, count and href.",
|
|
608
|
+
"deprecated": true
|
|
258
609
|
},
|
|
259
610
|
{
|
|
260
611
|
"path": "events[].id",
|
|
261
612
|
"availableIn": [
|
|
262
613
|
"page:events"
|
|
263
614
|
],
|
|
264
|
-
"description": "Stable event id."
|
|
615
|
+
"description": "Stable event id.",
|
|
616
|
+
"deprecated": true
|
|
265
617
|
},
|
|
266
618
|
{
|
|
267
619
|
"path": "events[].name",
|
|
268
620
|
"availableIn": [
|
|
269
621
|
"page:events"
|
|
270
622
|
],
|
|
271
|
-
"description": "The event's name."
|
|
623
|
+
"description": "The event's name.",
|
|
624
|
+
"deprecated": true
|
|
272
625
|
},
|
|
273
626
|
{
|
|
274
627
|
"path": "events[].description",
|
|
275
628
|
"availableIn": [
|
|
276
629
|
"page:events"
|
|
277
630
|
],
|
|
278
|
-
"description": "Plain-text description, or null
|
|
631
|
+
"description": "Plain-text description, or null, branch on it.",
|
|
632
|
+
"deprecated": true
|
|
279
633
|
},
|
|
280
634
|
{
|
|
281
635
|
"path": "events[].registrationMode",
|
|
282
636
|
"availableIn": [
|
|
283
637
|
"page:events"
|
|
284
638
|
],
|
|
285
|
-
"description": "INFO (no sign-up), RSVP (free sign-up) or TICKETED (paid)."
|
|
639
|
+
"description": "INFO (no sign-up), RSVP (free sign-up) or TICKETED (paid).",
|
|
640
|
+
"deprecated": true
|
|
286
641
|
},
|
|
287
642
|
{
|
|
288
643
|
"path": "events[].startsAt",
|
|
289
644
|
"availableIn": [
|
|
290
645
|
"page:events"
|
|
291
646
|
],
|
|
292
|
-
"description": "ISO-8601 start
|
|
647
|
+
"description": "ISO-8601 start, format with the date filter.",
|
|
648
|
+
"deprecated": true
|
|
293
649
|
},
|
|
294
650
|
{
|
|
295
651
|
"path": "events[].endsAt",
|
|
296
652
|
"availableIn": [
|
|
297
653
|
"page:events"
|
|
298
654
|
],
|
|
299
|
-
"description": "ISO-8601 end, or null."
|
|
655
|
+
"description": "ISO-8601 end, or null.",
|
|
656
|
+
"deprecated": true
|
|
300
657
|
},
|
|
301
658
|
{
|
|
302
659
|
"path": "events[].venueName",
|
|
303
660
|
"availableIn": [
|
|
304
661
|
"page:events"
|
|
305
662
|
],
|
|
306
|
-
"description": "Venue name, or null (online events may have none)."
|
|
663
|
+
"description": "Venue name, or null (online events may have none).",
|
|
664
|
+
"deprecated": true
|
|
307
665
|
},
|
|
308
666
|
{
|
|
309
667
|
"path": "events[].online",
|
|
310
668
|
"availableIn": [
|
|
311
669
|
"page:events"
|
|
312
670
|
],
|
|
313
|
-
"description": "True for online events."
|
|
671
|
+
"description": "True for online events.",
|
|
672
|
+
"deprecated": true
|
|
314
673
|
},
|
|
315
674
|
{
|
|
316
675
|
"path": "events[].imageUrl",
|
|
317
676
|
"availableIn": [
|
|
318
677
|
"page:events"
|
|
319
678
|
],
|
|
320
|
-
"description": "Promo image URL, or null
|
|
679
|
+
"description": "Promo image URL, or null, always branch.",
|
|
680
|
+
"deprecated": true
|
|
321
681
|
},
|
|
322
682
|
{
|
|
323
683
|
"path": "events[].onSale",
|
|
324
684
|
"availableIn": [
|
|
325
685
|
"page:events"
|
|
326
686
|
],
|
|
327
|
-
"description": "False before sales open."
|
|
687
|
+
"description": "False before sales open.",
|
|
688
|
+
"deprecated": true
|
|
328
689
|
},
|
|
329
690
|
{
|
|
330
691
|
"path": "events[].soldOut",
|
|
331
692
|
"availableIn": [
|
|
332
693
|
"page:events"
|
|
333
694
|
],
|
|
334
|
-
"description": "True when no capacity remains."
|
|
695
|
+
"description": "True when no capacity remains.",
|
|
696
|
+
"deprecated": true
|
|
335
697
|
},
|
|
336
698
|
{
|
|
337
699
|
"path": "events[].priceFrom",
|
|
338
700
|
"availableIn": [
|
|
339
701
|
"page:events"
|
|
340
702
|
],
|
|
341
|
-
"description": "The cheapest ticket price (number), or null for free/INFO events."
|
|
703
|
+
"description": "The cheapest ticket price (number), or null for free/INFO events.",
|
|
704
|
+
"deprecated": true
|
|
342
705
|
},
|
|
343
706
|
{
|
|
344
707
|
"path": "events[].currency",
|
|
345
708
|
"availableIn": [
|
|
346
709
|
"page:events"
|
|
347
710
|
],
|
|
348
|
-
"description": "ISO currency code for priceFrom, or null."
|
|
711
|
+
"description": "ISO currency code for priceFrom, or null.",
|
|
712
|
+
"deprecated": true
|
|
349
713
|
},
|
|
350
714
|
{
|
|
351
715
|
"path": "events[].detailHref",
|
|
352
716
|
"availableIn": [
|
|
353
717
|
"page:events"
|
|
354
718
|
],
|
|
355
|
-
"description": "The canonical link to this event's detail view
|
|
719
|
+
"description": "The canonical link to this event's detail view, always use this, never build URLs yourself.",
|
|
720
|
+
"deprecated": true
|
|
356
721
|
},
|
|
357
722
|
{
|
|
358
723
|
"path": "course",
|
|
359
724
|
"availableIn": [
|
|
360
725
|
"page:course"
|
|
361
726
|
],
|
|
362
|
-
"description": "The course this page addresses
|
|
727
|
+
"description": "The course this page addresses, a CURATED read-only view for display. The enrolment journey itself is the platform-owned course_enrol island; place it, never rebuild it.",
|
|
728
|
+
"deprecated": true
|
|
363
729
|
},
|
|
364
730
|
{
|
|
365
731
|
"path": "course.id",
|
|
366
732
|
"availableIn": [
|
|
367
733
|
"page:course"
|
|
368
734
|
],
|
|
369
|
-
"description": "Stable course id."
|
|
735
|
+
"description": "Stable course id.",
|
|
736
|
+
"deprecated": true
|
|
370
737
|
},
|
|
371
738
|
{
|
|
372
739
|
"path": "course.title",
|
|
373
740
|
"availableIn": [
|
|
374
741
|
"page:course"
|
|
375
742
|
],
|
|
376
|
-
"description": "The course's title."
|
|
743
|
+
"description": "The course's title.",
|
|
744
|
+
"deprecated": true
|
|
377
745
|
},
|
|
378
746
|
{
|
|
379
747
|
"path": "course.description",
|
|
380
748
|
"availableIn": [
|
|
381
749
|
"page:course"
|
|
382
750
|
],
|
|
383
|
-
"description": "Plain-text summary, or null
|
|
751
|
+
"description": "Plain-text summary, or null, branch on it. Prefer aboutHtml for the body when present.",
|
|
752
|
+
"deprecated": true
|
|
384
753
|
},
|
|
385
754
|
{
|
|
386
755
|
"path": "course.aboutHtml",
|
|
387
756
|
"availableIn": [
|
|
388
757
|
"page:course"
|
|
389
758
|
],
|
|
390
|
-
"description": "The tenant-authored About page as SANITISED HTML (platform-sanitised on save; images resolved)
|
|
759
|
+
"description": "The tenant-authored About page as SANITISED HTML (platform-sanitised on save; images resolved), render with the raw filter inside your prose styles, or null when not written.",
|
|
760
|
+
"deprecated": true
|
|
391
761
|
},
|
|
392
762
|
{
|
|
393
763
|
"path": "course.imageUrl",
|
|
394
764
|
"availableIn": [
|
|
395
765
|
"page:course"
|
|
396
766
|
],
|
|
397
|
-
"description": "The MAIN image (hero) URL, or null
|
|
767
|
+
"description": "The MAIN image (hero) URL, or null, always branch.",
|
|
768
|
+
"deprecated": true
|
|
398
769
|
},
|
|
399
770
|
{
|
|
400
771
|
"path": "course.venue",
|
|
401
772
|
"availableIn": [
|
|
402
773
|
"page:course"
|
|
403
774
|
],
|
|
404
|
-
"description": "Venue display text, or null."
|
|
775
|
+
"description": "Venue display text, or null.",
|
|
776
|
+
"deprecated": true
|
|
405
777
|
},
|
|
406
778
|
{
|
|
407
779
|
"path": "course.audience",
|
|
408
780
|
"availableIn": [
|
|
409
781
|
"page:course"
|
|
410
782
|
],
|
|
411
|
-
"description": "EVERYONE, or CHILD for children-only courses (parents enrol their children)."
|
|
783
|
+
"description": "EVERYONE, or CHILD for children-only courses (parents enrol their children).",
|
|
784
|
+
"deprecated": true
|
|
412
785
|
},
|
|
413
786
|
{
|
|
414
787
|
"path": "course.billingMode",
|
|
415
788
|
"availableIn": [
|
|
416
789
|
"page:course"
|
|
417
790
|
],
|
|
418
|
-
"description": "UPFRONT (one payment), TERM (committed term fee), or ROLLING (monthly with notice)."
|
|
791
|
+
"description": "UPFRONT (one payment), TERM (committed term fee), or ROLLING (monthly with notice).",
|
|
792
|
+
"deprecated": true
|
|
419
793
|
},
|
|
420
794
|
{
|
|
421
795
|
"path": "course.termStart",
|
|
422
796
|
"availableIn": [
|
|
423
797
|
"page:course"
|
|
424
798
|
],
|
|
425
|
-
"description": "ISO date the term starts, or null
|
|
799
|
+
"description": "ISO date the term starts, or null, format with the date filter.",
|
|
800
|
+
"deprecated": true
|
|
426
801
|
},
|
|
427
802
|
{
|
|
428
803
|
"path": "course.termEnd",
|
|
429
804
|
"availableIn": [
|
|
430
805
|
"page:course"
|
|
431
806
|
],
|
|
432
|
-
"description": "ISO date the term ends, or null."
|
|
807
|
+
"description": "ISO date the term ends, or null.",
|
|
808
|
+
"deprecated": true
|
|
433
809
|
},
|
|
434
810
|
{
|
|
435
811
|
"path": "course.currency",
|
|
436
812
|
"availableIn": [
|
|
437
813
|
"page:course"
|
|
438
814
|
],
|
|
439
|
-
"description": "ISO currency code for priceFrom."
|
|
815
|
+
"description": "ISO currency code for priceFrom.",
|
|
816
|
+
"deprecated": true
|
|
440
817
|
},
|
|
441
818
|
{
|
|
442
819
|
"path": "course.priceFrom",
|
|
443
820
|
"availableIn": [
|
|
444
821
|
"page:course"
|
|
445
822
|
],
|
|
446
|
-
"description": "The cheapest priced option (number), or null when every option is free."
|
|
823
|
+
"description": "The cheapest priced option (number), or null when every option is free.",
|
|
824
|
+
"deprecated": true
|
|
447
825
|
},
|
|
448
826
|
{
|
|
449
827
|
"path": "course.soldOut",
|
|
450
828
|
"availableIn": [
|
|
451
829
|
"page:course"
|
|
452
830
|
],
|
|
453
|
-
"description": "True when no option has places left (the island shows the standard note)."
|
|
831
|
+
"description": "True when no option has places left (the island shows the standard note).",
|
|
832
|
+
"deprecated": true
|
|
454
833
|
},
|
|
455
834
|
{
|
|
456
835
|
"path": "course.backHref",
|
|
457
836
|
"availableIn": [
|
|
458
837
|
"page:course"
|
|
459
838
|
],
|
|
460
|
-
"description": "The canonical link back to the courses listing
|
|
839
|
+
"description": "The canonical link back to the courses listing, always use this.",
|
|
840
|
+
"deprecated": true
|
|
461
841
|
}
|
|
462
842
|
],
|
|
463
843
|
"fixtures": {
|
|
464
844
|
"brand": {
|
|
465
|
-
"name": "
|
|
466
|
-
"tagline": "
|
|
845
|
+
"name": "The Lantern Trust",
|
|
846
|
+
"tagline": "Neighbours, looked after.",
|
|
467
847
|
"logoUrl": null,
|
|
468
848
|
"logoType": "full",
|
|
469
849
|
"footerLogoUrl": null
|
|
@@ -493,13 +873,31 @@
|
|
|
493
873
|
"children": [
|
|
494
874
|
{
|
|
495
875
|
"label": "Food bank",
|
|
496
|
-
"href": "/services?service=food-bank"
|
|
876
|
+
"href": "/services?service=food-bank",
|
|
877
|
+
"group": "Support",
|
|
878
|
+
"description": "Emergency food parcels and practical advice."
|
|
497
879
|
},
|
|
498
880
|
{
|
|
499
|
-
"label": "
|
|
500
|
-
"href": "
|
|
881
|
+
"label": "Community",
|
|
882
|
+
"href": "#",
|
|
883
|
+
"group": "Get involved",
|
|
884
|
+
"children": [
|
|
885
|
+
{
|
|
886
|
+
"label": "Youth club",
|
|
887
|
+
"href": "/services?service=youth-club"
|
|
888
|
+
}
|
|
889
|
+
]
|
|
501
890
|
}
|
|
502
|
-
]
|
|
891
|
+
],
|
|
892
|
+
"megaMenu": {
|
|
893
|
+
"columns": 3,
|
|
894
|
+
"promo": {
|
|
895
|
+
"title": "Visit this week",
|
|
896
|
+
"text": "Find a programme and meet the team.",
|
|
897
|
+
"href": "/services",
|
|
898
|
+
"label": "Explore services"
|
|
899
|
+
}
|
|
900
|
+
}
|
|
503
901
|
},
|
|
504
902
|
{
|
|
505
903
|
"label": "Donate",
|
|
@@ -508,28 +906,64 @@
|
|
|
508
906
|
}
|
|
509
907
|
],
|
|
510
908
|
"footer": [
|
|
511
|
-
{
|
|
512
|
-
|
|
909
|
+
{
|
|
910
|
+
"label": "About us",
|
|
911
|
+
"href": "/about"
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
"label": "Contact",
|
|
915
|
+
"href": "https://example.org/contact",
|
|
916
|
+
"external": true
|
|
917
|
+
},
|
|
513
918
|
{
|
|
514
919
|
"label": "Our work",
|
|
515
920
|
"href": "#",
|
|
516
921
|
"children": [
|
|
517
|
-
{
|
|
922
|
+
{
|
|
923
|
+
"label": "Food bank",
|
|
924
|
+
"href": "/services?service=food-bank"
|
|
925
|
+
}
|
|
518
926
|
]
|
|
519
927
|
}
|
|
520
928
|
],
|
|
521
929
|
"derived": [
|
|
522
|
-
{
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
930
|
+
{
|
|
931
|
+
"label": "Home",
|
|
932
|
+
"href": "/",
|
|
933
|
+
"cta": false
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
"label": "About us",
|
|
937
|
+
"href": "/about",
|
|
938
|
+
"cta": false
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
"label": "Events",
|
|
942
|
+
"href": "/events",
|
|
943
|
+
"cta": false
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
"label": "Donate",
|
|
947
|
+
"href": "/donate",
|
|
948
|
+
"cta": true
|
|
949
|
+
}
|
|
526
950
|
]
|
|
527
951
|
},
|
|
528
952
|
"socials": [
|
|
529
953
|
{
|
|
530
954
|
"platform": "facebook",
|
|
531
|
-
"url": "https://facebook.com/
|
|
955
|
+
"url": "https://facebook.com/lanterntrust",
|
|
532
956
|
"iconSvg": "<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>"
|
|
957
|
+
},
|
|
958
|
+
{
|
|
959
|
+
"platform": "instagram",
|
|
960
|
+
"url": "https://instagram.com/lanterntrust",
|
|
961
|
+
"iconSvg": "<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\"/></svg>"
|
|
962
|
+
},
|
|
963
|
+
{
|
|
964
|
+
"platform": "youtube",
|
|
965
|
+
"url": "https://youtube.com/@lanterntrust",
|
|
966
|
+
"iconSvg": "<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polygon points=\"10,8 16,12 10,16\"/></svg>"
|
|
533
967
|
}
|
|
534
968
|
],
|
|
535
969
|
"worship": {
|
|
@@ -565,69 +999,166 @@
|
|
|
565
999
|
"note": "Jum'a 13:15 & 14:15",
|
|
566
1000
|
"href": "/services?service=prayer-times",
|
|
567
1001
|
"today": "24 July 2026",
|
|
568
|
-
"todayAlt": "11 Safar 1448"
|
|
1002
|
+
"todayAlt": "11 Safar 1448",
|
|
1003
|
+
"next": {
|
|
1004
|
+
"name": "Asr",
|
|
1005
|
+
"begins": "18:30",
|
|
1006
|
+
"congregation": "19:00",
|
|
1007
|
+
"target": "2030-07-24T19:00:00+01:00"
|
|
1008
|
+
},
|
|
1009
|
+
"jumah": [
|
|
1010
|
+
{
|
|
1011
|
+
"name": "Jum'a 1",
|
|
1012
|
+
"begins": null,
|
|
1013
|
+
"congregation": "13:15"
|
|
1014
|
+
},
|
|
1015
|
+
{
|
|
1016
|
+
"name": "Jum'a 2",
|
|
1017
|
+
"begins": null,
|
|
1018
|
+
"congregation": "14:15"
|
|
1019
|
+
}
|
|
1020
|
+
],
|
|
1021
|
+
"hijri": {
|
|
1022
|
+
"display": "11 Safar 1448"
|
|
1023
|
+
},
|
|
1024
|
+
"observances": [
|
|
1025
|
+
{
|
|
1026
|
+
"name": "Community iftar",
|
|
1027
|
+
"date": "2 March 2030",
|
|
1028
|
+
"href": "/events"
|
|
1029
|
+
}
|
|
1030
|
+
]
|
|
1031
|
+
},
|
|
1032
|
+
"locale": {
|
|
1033
|
+
"code": "en",
|
|
1034
|
+
"direction": "ltr",
|
|
1035
|
+
"languages": [
|
|
1036
|
+
{
|
|
1037
|
+
"code": "en",
|
|
1038
|
+
"label": "English",
|
|
1039
|
+
"direction": "ltr"
|
|
1040
|
+
},
|
|
1041
|
+
{
|
|
1042
|
+
"code": "cy",
|
|
1043
|
+
"label": "Cymraeg",
|
|
1044
|
+
"direction": "ltr"
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"code": "ar",
|
|
1048
|
+
"label": "العربية",
|
|
1049
|
+
"direction": "rtl"
|
|
1050
|
+
}
|
|
1051
|
+
]
|
|
569
1052
|
}
|
|
570
1053
|
},
|
|
571
1054
|
"pages": {
|
|
572
1055
|
"events": {
|
|
573
1056
|
"events": [
|
|
574
1057
|
{
|
|
575
|
-
"id": "
|
|
576
|
-
"name": "
|
|
577
|
-
"description": "
|
|
1058
|
+
"id": "22222222-2222-2222-2222-222222222222",
|
|
1059
|
+
"name": "The Lantern Gala",
|
|
1060
|
+
"description": "Our biggest night of the year: supper, music from the Alderford Community Choir, and the annual lantern walk along the river to close.",
|
|
578
1061
|
"registrationMode": "TICKETED",
|
|
579
|
-
"startsAt": "2030-
|
|
1062
|
+
"startsAt": "2030-09-20T19:00:00Z",
|
|
580
1063
|
"endsAt": null,
|
|
581
|
-
"venueName": "
|
|
1064
|
+
"venueName": "The Maltings, Alderford",
|
|
582
1065
|
"online": false,
|
|
583
|
-
"imageUrl":
|
|
1066
|
+
"imageUrl": "p60fixture:event/gala",
|
|
584
1067
|
"onSale": true,
|
|
585
1068
|
"soldOut": false,
|
|
586
|
-
"priceFrom":
|
|
1069
|
+
"priceFrom": 25.0,
|
|
587
1070
|
"currency": "GBP",
|
|
588
|
-
"detailHref": "/events?event=
|
|
1071
|
+
"detailHref": "/events?event=22222222-2222-2222-2222-222222222222"
|
|
589
1072
|
},
|
|
590
1073
|
{
|
|
591
|
-
"id": "
|
|
592
|
-
"name": "
|
|
593
|
-
"description":
|
|
1074
|
+
"id": "44444444-4444-4444-4444-444444444444",
|
|
1075
|
+
"name": "Riverside Harvest Supper",
|
|
1076
|
+
"description": "A long-table supper on the Aldern meadow, cooked by our kitchen volunteers with produce from the community garden.",
|
|
1077
|
+
"registrationMode": "TICKETED",
|
|
1078
|
+
"startsAt": "2030-10-04T18:30:00Z",
|
|
1079
|
+
"endsAt": "2030-10-04T22:00:00Z",
|
|
1080
|
+
"venueName": "Aldern Meadow",
|
|
1081
|
+
"online": false,
|
|
1082
|
+
"imageUrl": "p60fixture:event/harvest",
|
|
1083
|
+
"onSale": true,
|
|
1084
|
+
"soldOut": false,
|
|
1085
|
+
"priceFrom": 12.5,
|
|
1086
|
+
"currency": "GBP",
|
|
1087
|
+
"detailHref": "/events?event=44444444-4444-4444-4444-444444444444"
|
|
1088
|
+
},
|
|
1089
|
+
{
|
|
1090
|
+
"id": "55555555-5555-5555-5555-555555555555",
|
|
1091
|
+
"name": "Volunteer Welcome Evening",
|
|
1092
|
+
"description": "Meet the team, hear where help is needed most this season, and find a role that fits the time you have.",
|
|
594
1093
|
"registrationMode": "RSVP",
|
|
595
|
-
"startsAt": "2030-
|
|
596
|
-
"endsAt": "2030-
|
|
597
|
-
"venueName":
|
|
598
|
-
"online":
|
|
599
|
-
"imageUrl":
|
|
1094
|
+
"startsAt": "2030-09-03T18:00:00Z",
|
|
1095
|
+
"endsAt": "2030-09-03T19:30:00Z",
|
|
1096
|
+
"venueName": "Foundry Lane Hub",
|
|
1097
|
+
"online": false,
|
|
1098
|
+
"imageUrl": "p60fixture:event/welcome",
|
|
600
1099
|
"onSale": true,
|
|
601
|
-
"soldOut":
|
|
1100
|
+
"soldOut": false,
|
|
602
1101
|
"priceFrom": null,
|
|
603
1102
|
"currency": null,
|
|
604
|
-
"detailHref": "/events?event=
|
|
1103
|
+
"detailHref": "/events?event=55555555-5555-5555-5555-555555555555"
|
|
605
1104
|
},
|
|
606
1105
|
{
|
|
607
|
-
"id": "
|
|
608
|
-
"name": "
|
|
609
|
-
"description": "
|
|
1106
|
+
"id": "66666666-6666-6666-6666-666666666666",
|
|
1107
|
+
"name": "Warm Space Wednesdays",
|
|
1108
|
+
"description": "Our hall is open, warm and stocked with tea every Wednesday through the cold months. No booking, no questions, everyone welcome.",
|
|
610
1109
|
"registrationMode": "INFO",
|
|
611
|
-
"startsAt": "2030-
|
|
612
|
-
"endsAt":
|
|
613
|
-
"venueName": "
|
|
1110
|
+
"startsAt": "2030-11-06T10:00:00Z",
|
|
1111
|
+
"endsAt": "2030-11-06T15:00:00Z",
|
|
1112
|
+
"venueName": "St Chad's Hall",
|
|
614
1113
|
"online": false,
|
|
615
1114
|
"imageUrl": null,
|
|
616
1115
|
"onSale": true,
|
|
617
1116
|
"soldOut": false,
|
|
618
1117
|
"priceFrom": null,
|
|
619
1118
|
"currency": null,
|
|
620
|
-
"detailHref": "/events?event=
|
|
621
|
-
}
|
|
1119
|
+
"detailHref": "/events?event=66666666-6666-6666-6666-666666666666"
|
|
1120
|
+
},
|
|
1121
|
+
{
|
|
1122
|
+
"id": "77777777-7777-7777-7777-777777777777",
|
|
1123
|
+
"name": "Money Advice Drop-in",
|
|
1124
|
+
"description": "A quiet hour with our trained advisers. Bring letters you are worried about; we will work through them together.",
|
|
1125
|
+
"registrationMode": "INFO",
|
|
1126
|
+
"startsAt": "2030-09-12T10:00:00Z",
|
|
1127
|
+
"endsAt": "2030-09-12T12:00:00Z",
|
|
1128
|
+
"venueName": null,
|
|
1129
|
+
"online": true,
|
|
1130
|
+
"imageUrl": null,
|
|
1131
|
+
"onSale": true,
|
|
1132
|
+
"soldOut": false,
|
|
1133
|
+
"priceFrom": null,
|
|
1134
|
+
"currency": null,
|
|
1135
|
+
"detailHref": "/events?event=77777777-7777-7777-7777-777777777777"
|
|
1136
|
+
},
|
|
1137
|
+
{
|
|
1138
|
+
"id": "88888888-8888-8888-8888-888888888888",
|
|
1139
|
+
"name": "Winter Fair",
|
|
1140
|
+
"description": "Stalls, carols and the grand raffle in aid of the Winter Appeal. Free entry; every stall staffed by volunteers.",
|
|
1141
|
+
"registrationMode": "TICKETED",
|
|
1142
|
+
"startsAt": "2030-12-07T11:00:00Z",
|
|
1143
|
+
"endsAt": "2030-12-07T16:00:00Z",
|
|
1144
|
+
"venueName": "Alderford Market Square",
|
|
1145
|
+
"online": false,
|
|
1146
|
+
"imageUrl": "p60fixture:event/winterfair",
|
|
1147
|
+
"onSale": true,
|
|
1148
|
+
"soldOut": true,
|
|
1149
|
+
"priceFrom": 0.0,
|
|
1150
|
+
"currency": "GBP",
|
|
1151
|
+
"detailHref": "/events?event=88888888-8888-8888-8888-888888888888"
|
|
1152
|
+
}
|
|
622
1153
|
]
|
|
623
1154
|
},
|
|
624
1155
|
"course": {
|
|
625
1156
|
"course": {
|
|
626
1157
|
"id": "33333333-3333-3333-3333-333333333333",
|
|
627
1158
|
"title": "Junior Athletics",
|
|
628
|
-
"description": "Weekly athletics for children aged 7
|
|
629
|
-
"aboutHtml": "<h2>What we do</h2><p>Track and field fundamentals in a friendly, coached setting.</p><ul><li>
|
|
630
|
-
"imageUrl":
|
|
1159
|
+
"description": "Weekly athletics for children aged 7 to 12, coached by qualified volunteers at the King's Park track.",
|
|
1160
|
+
"aboutHtml": "<h2>What we do</h2><p>Track and field fundamentals in a friendly, coached setting: warm-ups, drills, and a different discipline every week.</p><ul><li>Sprints, relays and middle distance</li><li>Long jump, high jump and throws</li><li>A club mini-meet at the end of every term</li></ul><h2>What to bring</h2><p>Trainers, a water bottle and a waterproof. Everything else, including spikes for the older group, is provided.</p>",
|
|
1161
|
+
"imageUrl": "p60fixture:course/athletics",
|
|
631
1162
|
"venue": "King's Park track",
|
|
632
1163
|
"audience": "CHILD",
|
|
633
1164
|
"billingMode": "ROLLING",
|
|
@@ -638,6 +1169,216 @@
|
|
|
638
1169
|
"soldOut": false,
|
|
639
1170
|
"backHref": "/courses"
|
|
640
1171
|
}
|
|
1172
|
+
},
|
|
1173
|
+
"articles": {
|
|
1174
|
+
"selectedCategory": null,
|
|
1175
|
+
"categories": [
|
|
1176
|
+
{
|
|
1177
|
+
"name": "News",
|
|
1178
|
+
"count": 3,
|
|
1179
|
+
"href": "/articles/all?category=News"
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
"name": "Stories",
|
|
1183
|
+
"count": 2,
|
|
1184
|
+
"href": "/articles/all?category=Stories"
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
"name": "Guides",
|
|
1188
|
+
"count": 1,
|
|
1189
|
+
"href": "/articles/all?category=Guides"
|
|
1190
|
+
}
|
|
1191
|
+
],
|
|
1192
|
+
"articles": [
|
|
1193
|
+
{
|
|
1194
|
+
"id": "88888888-8888-8888-8888-888888888888",
|
|
1195
|
+
"title": "The Community Garden Opens Its Gates",
|
|
1196
|
+
"slug": "community-garden-opens",
|
|
1197
|
+
"excerpt": "Two years of digging, fundraising and Saturday mornings in the rain: the Foundry Lane garden is finally open to everyone.",
|
|
1198
|
+
"imageUrl": "p60fixture:article/garden",
|
|
1199
|
+
"authorName": "Amina Khan",
|
|
1200
|
+
"authorRole": "Community Editor",
|
|
1201
|
+
"categories": [
|
|
1202
|
+
"News"
|
|
1203
|
+
],
|
|
1204
|
+
"publishedAt": "2030-04-12T09:00:00Z",
|
|
1205
|
+
"readingMinutes": 5,
|
|
1206
|
+
"viewCount": 412,
|
|
1207
|
+
"likeCount": 38,
|
|
1208
|
+
"commentCount": 9,
|
|
1209
|
+
"href": "/articles/community-garden-opens"
|
|
1210
|
+
},
|
|
1211
|
+
{
|
|
1212
|
+
"id": "99999999-9999-9999-9999-999999999999",
|
|
1213
|
+
"title": "What a Food Parcel Actually Holds",
|
|
1214
|
+
"slug": "what-a-food-parcel-holds",
|
|
1215
|
+
"excerpt": "People imagine tins and pasta. The real list is longer, more personal, and put together with more care than you might think.",
|
|
1216
|
+
"imageUrl": "p60fixture:article/parcel",
|
|
1217
|
+
"authorName": "Derek Osei",
|
|
1218
|
+
"authorRole": "Food Bank Lead",
|
|
1219
|
+
"categories": [
|
|
1220
|
+
"Stories"
|
|
1221
|
+
],
|
|
1222
|
+
"publishedAt": "2030-03-28T09:00:00Z",
|
|
1223
|
+
"readingMinutes": 6,
|
|
1224
|
+
"viewCount": 655,
|
|
1225
|
+
"likeCount": 61,
|
|
1226
|
+
"commentCount": 14,
|
|
1227
|
+
"href": "/articles/what-a-food-parcel-holds"
|
|
1228
|
+
},
|
|
1229
|
+
{
|
|
1230
|
+
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
1231
|
+
"title": "Meet the Wednesday Kitchen Crew",
|
|
1232
|
+
"slug": "wednesday-kitchen-crew",
|
|
1233
|
+
"excerpt": "Eleven volunteers, one borrowed oven, and a hundred and forty hot meals a week. The kitchen crew tell it in their own words.",
|
|
1234
|
+
"imageUrl": "p60fixture:people/kitchen",
|
|
1235
|
+
"authorName": "Amina Khan",
|
|
1236
|
+
"authorRole": "Community Editor",
|
|
1237
|
+
"categories": [
|
|
1238
|
+
"Stories"
|
|
1239
|
+
],
|
|
1240
|
+
"publishedAt": "2030-03-02T09:00:00Z",
|
|
1241
|
+
"readingMinutes": 7,
|
|
1242
|
+
"viewCount": 388,
|
|
1243
|
+
"likeCount": 45,
|
|
1244
|
+
"commentCount": 11,
|
|
1245
|
+
"href": "/articles/wednesday-kitchen-crew"
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
|
|
1249
|
+
"title": "Winter Appeal: Where Your Money Went",
|
|
1250
|
+
"slug": "winter-appeal-report",
|
|
1251
|
+
"excerpt": "You gave 18,400 pounds in eight weeks. Here is the line-by-line account of what it paid for, and what we learned.",
|
|
1252
|
+
"imageUrl": "p60fixture:campaign/winterreport",
|
|
1253
|
+
"authorName": "Priya Sharma",
|
|
1254
|
+
"authorRole": "Trustee",
|
|
1255
|
+
"categories": [
|
|
1256
|
+
"News"
|
|
1257
|
+
],
|
|
1258
|
+
"publishedAt": "2030-02-14T09:00:00Z",
|
|
1259
|
+
"readingMinutes": 8,
|
|
1260
|
+
"viewCount": 902,
|
|
1261
|
+
"likeCount": 84,
|
|
1262
|
+
"commentCount": 21,
|
|
1263
|
+
"href": "/articles/winter-appeal-report"
|
|
1264
|
+
},
|
|
1265
|
+
{
|
|
1266
|
+
"id": "cccccccc-cccc-cccc-cccc-cccccccccccc",
|
|
1267
|
+
"title": "Five Things Our Money Advisers Wish You Knew",
|
|
1268
|
+
"slug": "money-advice-five-things",
|
|
1269
|
+
"excerpt": "The advice team see the same worries again and again. Most of them have a fix that takes less than an hour.",
|
|
1270
|
+
"imageUrl": null,
|
|
1271
|
+
"authorName": "Tom Bradley",
|
|
1272
|
+
"authorRole": "Advice Service",
|
|
1273
|
+
"categories": [
|
|
1274
|
+
"Guides"
|
|
1275
|
+
],
|
|
1276
|
+
"publishedAt": "2030-01-30T09:00:00Z",
|
|
1277
|
+
"readingMinutes": 4,
|
|
1278
|
+
"viewCount": 1204,
|
|
1279
|
+
"likeCount": 96,
|
|
1280
|
+
"commentCount": 17,
|
|
1281
|
+
"href": "/articles/money-advice-five-things"
|
|
1282
|
+
},
|
|
1283
|
+
{
|
|
1284
|
+
"id": "dddddddd-dddd-dddd-dddd-dddddddddddd",
|
|
1285
|
+
"title": "A Year of Warm Spaces, in Numbers",
|
|
1286
|
+
"slug": "warm-spaces-in-numbers",
|
|
1287
|
+
"excerpt": "Fourteen hundred visits, ninety regulars, and one chess league nobody planned. What happens when you just open the door.",
|
|
1288
|
+
"imageUrl": "p60fixture:service/warmspace",
|
|
1289
|
+
"authorName": "Amina Khan",
|
|
1290
|
+
"authorRole": "Community Editor",
|
|
1291
|
+
"categories": [
|
|
1292
|
+
"News"
|
|
1293
|
+
],
|
|
1294
|
+
"publishedAt": "2030-01-08T09:00:00Z",
|
|
1295
|
+
"readingMinutes": 5,
|
|
1296
|
+
"viewCount": 517,
|
|
1297
|
+
"likeCount": 42,
|
|
1298
|
+
"commentCount": 8,
|
|
1299
|
+
"href": "/articles/warm-spaces-in-numbers"
|
|
1300
|
+
}
|
|
1301
|
+
]
|
|
1302
|
+
},
|
|
1303
|
+
"article": {
|
|
1304
|
+
"article": {
|
|
1305
|
+
"id": "88888888-8888-8888-8888-888888888888",
|
|
1306
|
+
"title": "The Community Garden Opens Its Gates",
|
|
1307
|
+
"slug": "community-garden-opens",
|
|
1308
|
+
"excerpt": "Two years of digging, fundraising and Saturday mornings in the rain: the Foundry Lane garden is finally open to everyone.",
|
|
1309
|
+
"imageUrl": "p60fixture:article/garden",
|
|
1310
|
+
"authorName": "Amina Khan",
|
|
1311
|
+
"authorRole": "Community Editor",
|
|
1312
|
+
"categories": [
|
|
1313
|
+
"News"
|
|
1314
|
+
],
|
|
1315
|
+
"publishedAt": "2030-04-12T09:00:00Z",
|
|
1316
|
+
"readingMinutes": 5,
|
|
1317
|
+
"viewCount": 412,
|
|
1318
|
+
"likeCount": 38,
|
|
1319
|
+
"commentCount": 9,
|
|
1320
|
+
"href": "/articles/community-garden-opens",
|
|
1321
|
+
"updatedAt": "2030-04-12T10:00:00Z",
|
|
1322
|
+
"bodyHtml": "<h2>A shared place to grow</h2><p>The gates opened at ten. By half past, every raised bed had a family around it, the tool shed had a queue, and somebody had already claimed the sunny corner by the wall for tomatoes.</p><p>The Foundry Lane garden has been two years in the making. It began as a patch of rubble behind the old ironworks, offered to us on a peppercorn lease after the Winter Fair of 2028, and it has been built almost entirely by volunteer weekends since: twenty-two raised beds, a wheelchair-accessible path, a rainwater store, and a greenhouse pieced together from three donated ones.</p><blockquote><p>I have lived on this street forty years and never once stood on this ground. Now my grandchildren grow beans here.</p></blockquote><h2>What happens next</h2><p>The beds are allocated, but the garden is not finished, and it is not meant to be. This season the growers' committee has three priorities:</p><ul><li>A covered seating area, so the garden works in the rain it will certainly get</li><li>Weekly sessions with the youth club, growing the salads the kitchen crew cook with</li><li>A seed library in the old gatehouse, free to any Alderford household</li></ul><p>If you can lay a slab, mend a frame or simply keep a kettle going, the volunteer team would love to hear from you. And if you just want somewhere green to sit, the gate is open every day until dusk.</p><h3>Thank you</h3><p>To the eighty-one people who gave to the garden appeal, the six local firms who lent tools and time, and the council officers who said yes when it mattered: this one is yours as much as ours.</p>",
|
|
1323
|
+
"allowComments": true
|
|
1324
|
+
},
|
|
1325
|
+
"relatedArticles": [
|
|
1326
|
+
{
|
|
1327
|
+
"id": "99999999-9999-9999-9999-999999999999",
|
|
1328
|
+
"title": "What a Food Parcel Actually Holds",
|
|
1329
|
+
"slug": "what-a-food-parcel-holds",
|
|
1330
|
+
"excerpt": "People imagine tins and pasta. The real list is longer, more personal, and put together with more care than you might think.",
|
|
1331
|
+
"imageUrl": "p60fixture:article/parcel",
|
|
1332
|
+
"authorName": "Derek Osei",
|
|
1333
|
+
"authorRole": "Food Bank Lead",
|
|
1334
|
+
"categories": [
|
|
1335
|
+
"Stories"
|
|
1336
|
+
],
|
|
1337
|
+
"publishedAt": "2030-03-28T09:00:00Z",
|
|
1338
|
+
"readingMinutes": 6,
|
|
1339
|
+
"viewCount": 655,
|
|
1340
|
+
"likeCount": 61,
|
|
1341
|
+
"commentCount": 14,
|
|
1342
|
+
"href": "/articles/what-a-food-parcel-holds"
|
|
1343
|
+
},
|
|
1344
|
+
{
|
|
1345
|
+
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
|
|
1346
|
+
"title": "Winter Appeal: Where Your Money Went",
|
|
1347
|
+
"slug": "winter-appeal-report",
|
|
1348
|
+
"excerpt": "You gave 18,400 pounds in eight weeks. Here is the line-by-line account of what it paid for, and what we learned.",
|
|
1349
|
+
"imageUrl": "p60fixture:campaign/winterreport",
|
|
1350
|
+
"authorName": "Priya Sharma",
|
|
1351
|
+
"authorRole": "Trustee",
|
|
1352
|
+
"categories": [
|
|
1353
|
+
"News"
|
|
1354
|
+
],
|
|
1355
|
+
"publishedAt": "2030-02-14T09:00:00Z",
|
|
1356
|
+
"readingMinutes": 8,
|
|
1357
|
+
"viewCount": 902,
|
|
1358
|
+
"likeCount": 84,
|
|
1359
|
+
"commentCount": 21,
|
|
1360
|
+
"href": "/articles/winter-appeal-report"
|
|
1361
|
+
},
|
|
1362
|
+
{
|
|
1363
|
+
"id": "dddddddd-dddd-dddd-dddd-dddddddddddd",
|
|
1364
|
+
"title": "A Year of Warm Spaces, in Numbers",
|
|
1365
|
+
"slug": "warm-spaces-in-numbers",
|
|
1366
|
+
"excerpt": "Fourteen hundred visits, ninety regulars, and one chess league nobody planned. What happens when you just open the door.",
|
|
1367
|
+
"imageUrl": "p60fixture:service/warmspace",
|
|
1368
|
+
"authorName": "Amina Khan",
|
|
1369
|
+
"authorRole": "Community Editor",
|
|
1370
|
+
"categories": [
|
|
1371
|
+
"News"
|
|
1372
|
+
],
|
|
1373
|
+
"publishedAt": "2030-01-08T09:00:00Z",
|
|
1374
|
+
"readingMinutes": 5,
|
|
1375
|
+
"viewCount": 517,
|
|
1376
|
+
"likeCount": 42,
|
|
1377
|
+
"commentCount": 8,
|
|
1378
|
+
"href": "/articles/warm-spaces-in-numbers"
|
|
1379
|
+
}
|
|
1380
|
+
],
|
|
1381
|
+
"backHref": "/articles"
|
|
641
1382
|
}
|
|
642
1383
|
},
|
|
643
1384
|
"sections": {
|
|
@@ -645,84 +1386,1187 @@
|
|
|
645
1386
|
"events": [
|
|
646
1387
|
{
|
|
647
1388
|
"id": "22222222-2222-2222-2222-222222222222",
|
|
648
|
-
"name": "
|
|
649
|
-
"description": "
|
|
1389
|
+
"name": "The Lantern Gala",
|
|
1390
|
+
"description": "Our biggest night of the year: supper, music from the Alderford Community Choir, and the annual lantern walk along the river to close.",
|
|
650
1391
|
"registrationMode": "TICKETED",
|
|
651
1392
|
"startsAt": "2030-09-20T19:00:00Z",
|
|
652
1393
|
"endsAt": null,
|
|
653
|
-
"venueName": "
|
|
1394
|
+
"venueName": "The Maltings, Alderford",
|
|
654
1395
|
"online": false,
|
|
655
|
-
"imageUrl":
|
|
1396
|
+
"imageUrl": "p60fixture:event/gala",
|
|
656
1397
|
"onSale": true,
|
|
657
1398
|
"soldOut": false,
|
|
658
|
-
"priceFrom":
|
|
1399
|
+
"priceFrom": 25.0,
|
|
659
1400
|
"currency": "GBP",
|
|
660
1401
|
"detailHref": "/events?event=22222222-2222-2222-2222-222222222222"
|
|
661
1402
|
},
|
|
662
1403
|
{
|
|
663
1404
|
"id": "44444444-4444-4444-4444-444444444444",
|
|
664
|
-
"name": "
|
|
665
|
-
"description": "
|
|
1405
|
+
"name": "Riverside Harvest Supper",
|
|
1406
|
+
"description": "A long-table supper on the Aldern meadow, cooked by our kitchen volunteers with produce from the community garden.",
|
|
666
1407
|
"registrationMode": "TICKETED",
|
|
667
|
-
"startsAt": "2030-
|
|
668
|
-
"endsAt":
|
|
669
|
-
"venueName": "
|
|
1408
|
+
"startsAt": "2030-10-04T18:30:00Z",
|
|
1409
|
+
"endsAt": "2030-10-04T22:00:00Z",
|
|
1410
|
+
"venueName": "Aldern Meadow",
|
|
670
1411
|
"online": false,
|
|
671
|
-
"imageUrl":
|
|
1412
|
+
"imageUrl": "p60fixture:event/harvest",
|
|
672
1413
|
"onSale": true,
|
|
673
1414
|
"soldOut": false,
|
|
674
1415
|
"priceFrom": 12.5,
|
|
675
1416
|
"currency": "GBP",
|
|
676
1417
|
"detailHref": "/events?event=44444444-4444-4444-4444-444444444444"
|
|
1418
|
+
},
|
|
1419
|
+
{
|
|
1420
|
+
"id": "88888888-8888-8888-8888-888888888888",
|
|
1421
|
+
"name": "Winter Fair",
|
|
1422
|
+
"description": "Stalls, carols and the grand raffle in aid of the Winter Appeal. Free entry; every stall staffed by volunteers.",
|
|
1423
|
+
"registrationMode": "TICKETED",
|
|
1424
|
+
"startsAt": "2030-12-07T11:00:00Z",
|
|
1425
|
+
"endsAt": "2030-12-07T16:00:00Z",
|
|
1426
|
+
"venueName": "Alderford Market Square",
|
|
1427
|
+
"online": false,
|
|
1428
|
+
"imageUrl": "p60fixture:event/winterfair",
|
|
1429
|
+
"onSale": true,
|
|
1430
|
+
"soldOut": true,
|
|
1431
|
+
"priceFrom": 0.0,
|
|
1432
|
+
"currency": "GBP",
|
|
1433
|
+
"detailHref": "/events?event=88888888-8888-8888-8888-888888888888"
|
|
677
1434
|
}
|
|
678
1435
|
]
|
|
679
1436
|
},
|
|
680
1437
|
"whatsOn": {
|
|
681
1438
|
"infoEvents": [
|
|
682
1439
|
{
|
|
683
|
-
"id": "
|
|
684
|
-
"name": "
|
|
685
|
-
"description": "
|
|
1440
|
+
"id": "66666666-6666-6666-6666-666666666666",
|
|
1441
|
+
"name": "Warm Space Wednesdays",
|
|
1442
|
+
"description": "Open, warm, tea always on. Every Wednesday through winter.",
|
|
686
1443
|
"registrationMode": "INFO",
|
|
687
|
-
"startsAt": "2030-
|
|
1444
|
+
"startsAt": "2030-11-06T10:00:00Z",
|
|
688
1445
|
"endsAt": null,
|
|
689
|
-
"venueName": "
|
|
1446
|
+
"venueName": "St Chad's Hall",
|
|
690
1447
|
"online": false,
|
|
691
1448
|
"imageUrl": null,
|
|
692
1449
|
"onSale": true,
|
|
693
1450
|
"soldOut": false,
|
|
694
1451
|
"priceFrom": null,
|
|
695
1452
|
"currency": null,
|
|
696
|
-
"detailHref": "/events?event=
|
|
1453
|
+
"detailHref": "/events?event=66666666-6666-6666-6666-666666666666"
|
|
1454
|
+
},
|
|
1455
|
+
{
|
|
1456
|
+
"id": "77777777-7777-7777-7777-777777777777",
|
|
1457
|
+
"name": "Money Advice Drop-in",
|
|
1458
|
+
"description": "Trained advisers, no appointment needed.",
|
|
1459
|
+
"registrationMode": "INFO",
|
|
1460
|
+
"startsAt": "2030-09-12T10:00:00Z",
|
|
1461
|
+
"endsAt": null,
|
|
1462
|
+
"venueName": null,
|
|
1463
|
+
"online": true,
|
|
1464
|
+
"imageUrl": null,
|
|
1465
|
+
"onSale": true,
|
|
1466
|
+
"soldOut": false,
|
|
1467
|
+
"priceFrom": null,
|
|
1468
|
+
"currency": null,
|
|
1469
|
+
"detailHref": "/events?event=77777777-7777-7777-7777-777777777777"
|
|
1470
|
+
},
|
|
1471
|
+
{
|
|
1472
|
+
"id": "99999999-9999-9999-9999-999999999999",
|
|
1473
|
+
"name": "Community Garden Open Morning",
|
|
1474
|
+
"description": "See the beds, meet the growers, take some seedlings home.",
|
|
1475
|
+
"registrationMode": "INFO",
|
|
1476
|
+
"startsAt": "2030-09-14T10:00:00Z",
|
|
1477
|
+
"endsAt": null,
|
|
1478
|
+
"venueName": "Foundry Lane Garden",
|
|
1479
|
+
"online": false,
|
|
1480
|
+
"imageUrl": null,
|
|
1481
|
+
"onSale": true,
|
|
1482
|
+
"soldOut": false,
|
|
1483
|
+
"priceFrom": null,
|
|
1484
|
+
"currency": null,
|
|
1485
|
+
"detailHref": "/events?event=99999999-9999-9999-9999-999999999999"
|
|
697
1486
|
}
|
|
698
1487
|
]
|
|
699
1488
|
},
|
|
700
1489
|
"articles": {
|
|
701
1490
|
"latestArticles": [
|
|
702
1491
|
{
|
|
703
|
-
"title": "
|
|
704
|
-
"href": "/articles/
|
|
705
|
-
"excerpt": "
|
|
706
|
-
"imageUrl":
|
|
707
|
-
"publishedAt": "2030-
|
|
708
|
-
"readingMinutes":
|
|
1492
|
+
"title": "The Community Garden Opens Its Gates",
|
|
1493
|
+
"href": "/articles/community-garden-opens",
|
|
1494
|
+
"excerpt": "Two years of digging, fundraising and Saturday mornings in the rain: the Foundry Lane garden is finally open to everyone.",
|
|
1495
|
+
"imageUrl": "p60fixture:article/garden",
|
|
1496
|
+
"publishedAt": "2030-04-12T09:00:00Z",
|
|
1497
|
+
"readingMinutes": 5,
|
|
709
1498
|
"categories": [
|
|
710
1499
|
"News"
|
|
711
1500
|
]
|
|
712
1501
|
},
|
|
713
1502
|
{
|
|
714
|
-
"title": "
|
|
715
|
-
"href": "/articles/
|
|
716
|
-
"excerpt": "
|
|
717
|
-
"imageUrl":
|
|
718
|
-
"publishedAt": "2030-
|
|
719
|
-
"readingMinutes":
|
|
1503
|
+
"title": "What a Food Parcel Actually Holds",
|
|
1504
|
+
"href": "/articles/what-a-food-parcel-holds",
|
|
1505
|
+
"excerpt": "People imagine tins and pasta. The real list is longer, more personal, and put together with more care than you might think.",
|
|
1506
|
+
"imageUrl": "p60fixture:article/parcel",
|
|
1507
|
+
"publishedAt": "2030-03-28T09:00:00Z",
|
|
1508
|
+
"readingMinutes": 6,
|
|
1509
|
+
"categories": [
|
|
1510
|
+
"Stories"
|
|
1511
|
+
]
|
|
1512
|
+
},
|
|
1513
|
+
{
|
|
1514
|
+
"title": "Meet the Wednesday Kitchen Crew",
|
|
1515
|
+
"href": "/articles/wednesday-kitchen-crew",
|
|
1516
|
+
"excerpt": "Eleven volunteers, one borrowed oven, and a hundred and forty hot meals a week. The kitchen crew tell it in their own words.",
|
|
1517
|
+
"imageUrl": "p60fixture:people/kitchen",
|
|
1518
|
+
"publishedAt": "2030-03-02T09:00:00Z",
|
|
1519
|
+
"readingMinutes": 7,
|
|
1520
|
+
"categories": [
|
|
1521
|
+
"Stories"
|
|
1522
|
+
]
|
|
1523
|
+
},
|
|
1524
|
+
{
|
|
1525
|
+
"title": "Winter Appeal: Where Your Money Went",
|
|
1526
|
+
"href": "/articles/winter-appeal-report",
|
|
1527
|
+
"excerpt": "You gave 18,400 pounds in eight weeks. Here is the line-by-line account of what it paid for, and what we learned.",
|
|
1528
|
+
"imageUrl": "p60fixture:campaign/winterreport",
|
|
1529
|
+
"publishedAt": "2030-02-14T09:00:00Z",
|
|
1530
|
+
"readingMinutes": 8,
|
|
720
1531
|
"categories": [
|
|
721
1532
|
"News"
|
|
722
1533
|
]
|
|
723
1534
|
}
|
|
724
1535
|
]
|
|
1536
|
+
},
|
|
1537
|
+
"campaigns": {
|
|
1538
|
+
"campaigns": [
|
|
1539
|
+
{
|
|
1540
|
+
"id": "99999999-9999-9999-9999-999999999991",
|
|
1541
|
+
"title": "Keep the 27 Bus",
|
|
1542
|
+
"href": "/campaigns/keep-the-27-bus",
|
|
1543
|
+
"summary": "The only bus serving the Fenwick estate is set to be cut. Add your name before the consultation closes.",
|
|
1544
|
+
"imageUrl": "p60fixture:campaign/bus"
|
|
1545
|
+
},
|
|
1546
|
+
{
|
|
1547
|
+
"id": "99999999-9999-9999-9999-999999999992",
|
|
1548
|
+
"title": "A Defibrillator on Every Street",
|
|
1549
|
+
"href": "/campaigns/defibrillator-every-street",
|
|
1550
|
+
"summary": "We are raising for twelve more public defibrillators and training two hundred neighbours to use them.",
|
|
1551
|
+
"imageUrl": "p60fixture:campaign/defib"
|
|
1552
|
+
},
|
|
1553
|
+
{
|
|
1554
|
+
"id": "99999999-9999-9999-9999-999999999993",
|
|
1555
|
+
"title": "Alderford Housing Survey",
|
|
1556
|
+
"href": "/campaigns/housing-survey",
|
|
1557
|
+
"summary": null,
|
|
1558
|
+
"imageUrl": null
|
|
1559
|
+
}
|
|
1560
|
+
],
|
|
1561
|
+
"campaignsLabel": "Campaigns"
|
|
1562
|
+
},
|
|
1563
|
+
"emergency": {
|
|
1564
|
+
"causes": [
|
|
1565
|
+
{
|
|
1566
|
+
"id": "55555555-5555-5555-5555-555555555550",
|
|
1567
|
+
"title": "Flood Response Appeal",
|
|
1568
|
+
"slug": "flood-response",
|
|
1569
|
+
"description": "The Aldern broke its banks on Sunday. Thirty households need dry bedding, dehumidifiers and somewhere warm now.",
|
|
1570
|
+
"imageUrl": "p60fixture:cause/flood",
|
|
1571
|
+
"targetAmount": 50000,
|
|
1572
|
+
"raisedAmount": 18750,
|
|
1573
|
+
"progressPercentage": 38,
|
|
1574
|
+
"href": "/donate/flood-response",
|
|
1575
|
+
"paymentOptions": {
|
|
1576
|
+
"oneOff": true,
|
|
1577
|
+
"recurringCard": true,
|
|
1578
|
+
"directDebit": true
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
]
|
|
1582
|
+
},
|
|
1583
|
+
"appealGrid": {
|
|
1584
|
+
"causes": [
|
|
1585
|
+
{
|
|
1586
|
+
"id": "55555555-5555-5555-5555-555555555551",
|
|
1587
|
+
"title": "Winter Appeal",
|
|
1588
|
+
"slug": "winter-appeal",
|
|
1589
|
+
"description": "Heating top-ups, warm bedding and a hot meal for the households the cold hits hardest.",
|
|
1590
|
+
"imageUrl": "p60fixture:cause/winter",
|
|
1591
|
+
"targetAmount": 20000,
|
|
1592
|
+
"raisedAmount": 12500,
|
|
1593
|
+
"progressPercentage": 63,
|
|
1594
|
+
"href": "/donate/winter-appeal",
|
|
1595
|
+
"paymentOptions": {
|
|
1596
|
+
"oneOff": true,
|
|
1597
|
+
"recurringCard": true,
|
|
1598
|
+
"directDebit": false
|
|
1599
|
+
}
|
|
1600
|
+
},
|
|
1601
|
+
{
|
|
1602
|
+
"id": "55555555-5555-5555-5555-555555555552",
|
|
1603
|
+
"title": "Food Bank Fund",
|
|
1604
|
+
"slug": "food-bank-fund",
|
|
1605
|
+
"description": "Keeps the shelves stocked between donation drives. Ten pounds fills a family parcel.",
|
|
1606
|
+
"imageUrl": "p60fixture:cause/foodbank",
|
|
1607
|
+
"targetAmount": 15000,
|
|
1608
|
+
"raisedAmount": 9800,
|
|
1609
|
+
"progressPercentage": 65,
|
|
1610
|
+
"href": "/donate/food-bank-fund",
|
|
1611
|
+
"paymentOptions": {
|
|
1612
|
+
"oneOff": true,
|
|
1613
|
+
"recurringCard": true,
|
|
1614
|
+
"directDebit": true
|
|
1615
|
+
}
|
|
1616
|
+
},
|
|
1617
|
+
{
|
|
1618
|
+
"id": "55555555-5555-5555-5555-555555555553",
|
|
1619
|
+
"title": "Youth Club Futures",
|
|
1620
|
+
"slug": "youth-club-futures",
|
|
1621
|
+
"description": "Coaching, kit and trips for the seventy young people who come through our doors each week.",
|
|
1622
|
+
"imageUrl": "p60fixture:cause/youth",
|
|
1623
|
+
"targetAmount": 8000,
|
|
1624
|
+
"raisedAmount": 2150,
|
|
1625
|
+
"progressPercentage": 27,
|
|
1626
|
+
"href": "/donate/youth-club-futures",
|
|
1627
|
+
"paymentOptions": {
|
|
1628
|
+
"oneOff": true,
|
|
1629
|
+
"recurringCard": false,
|
|
1630
|
+
"directDebit": false
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
]
|
|
1634
|
+
},
|
|
1635
|
+
"programmes": {
|
|
1636
|
+
"services": [
|
|
1637
|
+
{
|
|
1638
|
+
"id": "66666666-6666-6666-6666-666666666661",
|
|
1639
|
+
"title": "Food Bank",
|
|
1640
|
+
"slug": "food-bank",
|
|
1641
|
+
"summary": "Emergency parcels, no referral needed, from the Foundry Lane depot every weekday morning.",
|
|
1642
|
+
"imageUrl": "p60fixture:service/foodbank",
|
|
1643
|
+
"href": "/services?service=food-bank"
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"id": "66666666-6666-6666-6666-666666666662",
|
|
1647
|
+
"title": "Youth Club",
|
|
1648
|
+
"slug": "youth-club",
|
|
1649
|
+
"summary": "Sports, cooking and somewhere to be for ages 10 to 16, four evenings a week.",
|
|
1650
|
+
"imageUrl": "p60fixture:service/youthclub",
|
|
1651
|
+
"href": "/services?service=youth-club"
|
|
1652
|
+
},
|
|
1653
|
+
{
|
|
1654
|
+
"id": "66666666-6666-6666-6666-666666666663",
|
|
1655
|
+
"title": "Money Advice",
|
|
1656
|
+
"slug": "money-advice",
|
|
1657
|
+
"summary": "Free, confidential help with debt, benefits and the letters that keep you up at night.",
|
|
1658
|
+
"imageUrl": "p60fixture:service/advice",
|
|
1659
|
+
"href": "/services?service=money-advice"
|
|
1660
|
+
},
|
|
1661
|
+
{
|
|
1662
|
+
"id": "66666666-6666-6666-6666-666666666664",
|
|
1663
|
+
"title": "Community Garden",
|
|
1664
|
+
"slug": "community-garden",
|
|
1665
|
+
"summary": "Twenty-two raised beds, a greenhouse and a seed library, open to every Alderford household.",
|
|
1666
|
+
"imageUrl": "p60fixture:service/garden",
|
|
1667
|
+
"href": "/services?service=community-garden"
|
|
1668
|
+
},
|
|
1669
|
+
{
|
|
1670
|
+
"id": "66666666-6666-6666-6666-666666666665",
|
|
1671
|
+
"title": "Warm Spaces",
|
|
1672
|
+
"slug": "warm-spaces",
|
|
1673
|
+
"summary": "Our hall, open and heated through winter, with tea, wifi and company.",
|
|
1674
|
+
"imageUrl": "p60fixture:service/warmspace",
|
|
1675
|
+
"href": "/services?service=warm-spaces"
|
|
1676
|
+
}
|
|
1677
|
+
]
|
|
1678
|
+
},
|
|
1679
|
+
"resources": {
|
|
1680
|
+
"resources": [
|
|
1681
|
+
{
|
|
1682
|
+
"id": "88888888-8888-8888-8888-888888888881",
|
|
1683
|
+
"title": "Annual report 2029.pdf",
|
|
1684
|
+
"folder": "Reports",
|
|
1685
|
+
"url": "/fixture/annual-report-2029.pdf",
|
|
1686
|
+
"contentType": "application/pdf",
|
|
1687
|
+
"bytes": 1245760,
|
|
1688
|
+
"publishedAt": "2030-02-01T10:00:00Z"
|
|
1689
|
+
},
|
|
1690
|
+
{
|
|
1691
|
+
"id": "88888888-8888-8888-8888-888888888882",
|
|
1692
|
+
"title": "Safeguarding policy.pdf",
|
|
1693
|
+
"folder": "Policies",
|
|
1694
|
+
"url": "/fixture/safeguarding-policy.pdf",
|
|
1695
|
+
"contentType": "application/pdf",
|
|
1696
|
+
"bytes": 384000,
|
|
1697
|
+
"publishedAt": "2029-11-12T10:00:00Z"
|
|
1698
|
+
},
|
|
1699
|
+
{
|
|
1700
|
+
"id": "88888888-8888-8888-8888-888888888883",
|
|
1701
|
+
"title": "Volunteer handbook.pdf",
|
|
1702
|
+
"folder": "Volunteering",
|
|
1703
|
+
"url": "/fixture/volunteer-handbook.pdf",
|
|
1704
|
+
"contentType": "application/pdf",
|
|
1705
|
+
"bytes": 942080,
|
|
1706
|
+
"publishedAt": "2030-01-20T10:00:00Z"
|
|
1707
|
+
},
|
|
1708
|
+
{
|
|
1709
|
+
"id": "88888888-8888-8888-8888-888888888884",
|
|
1710
|
+
"title": "Hall hire form.pdf",
|
|
1711
|
+
"folder": "Forms",
|
|
1712
|
+
"url": "/fixture/hall-hire-form.pdf",
|
|
1713
|
+
"contentType": "application/pdf",
|
|
1714
|
+
"bytes": 128000,
|
|
1715
|
+
"publishedAt": "2029-09-02T10:00:00Z"
|
|
1716
|
+
}
|
|
1717
|
+
]
|
|
1718
|
+
},
|
|
1719
|
+
"locations": {
|
|
1720
|
+
"locations": [
|
|
1721
|
+
{
|
|
1722
|
+
"id": "99999999-9999-9999-9999-999999999901",
|
|
1723
|
+
"name": "Foundry Lane Hub",
|
|
1724
|
+
"address": "14 Foundry Lane, Alderford AL2 4RS",
|
|
1725
|
+
"latitude": 53.8008,
|
|
1726
|
+
"longitude": -1.5491,
|
|
1727
|
+
"primary": true,
|
|
1728
|
+
"directionsHref": "https://www.google.com/maps/dir/?api=1&destination=Foundry%20Lane%20Hub"
|
|
1729
|
+
},
|
|
1730
|
+
{
|
|
1731
|
+
"id": "99999999-9999-9999-9999-999999999902",
|
|
1732
|
+
"name": "St Chad's Hall",
|
|
1733
|
+
"address": "Church Walk, Alderford AL1 2JW",
|
|
1734
|
+
"latitude": 53.7975,
|
|
1735
|
+
"longitude": -1.5562,
|
|
1736
|
+
"primary": false,
|
|
1737
|
+
"directionsHref": "https://www.google.com/maps/dir/?api=1&destination=St%20Chad%27s%20Hall"
|
|
1738
|
+
}
|
|
1739
|
+
]
|
|
1740
|
+
},
|
|
1741
|
+
"volunteering": {
|
|
1742
|
+
"opportunities": [
|
|
1743
|
+
{
|
|
1744
|
+
"id": "aaaaaaaa-1111-4111-8111-111111111111",
|
|
1745
|
+
"slug": "garden-volunteer",
|
|
1746
|
+
"title": "Garden Volunteer",
|
|
1747
|
+
"summary": "Keep the Foundry Lane beds thriving: sowing, watering, and showing first-timers where the trowels live.",
|
|
1748
|
+
"imageUrl": "p60fixture:volunteer/garden",
|
|
1749
|
+
"content": {
|
|
1750
|
+
"location": "Foundry Lane Garden",
|
|
1751
|
+
"schedule": "Saturday mornings",
|
|
1752
|
+
"commitment": "Twice a month",
|
|
1753
|
+
"hoursExpected": "3 hours"
|
|
1754
|
+
}
|
|
1755
|
+
},
|
|
1756
|
+
{
|
|
1757
|
+
"id": "aaaaaaaa-1111-4111-8111-111111111112",
|
|
1758
|
+
"slug": "kitchen-crew",
|
|
1759
|
+
"title": "Wednesday Kitchen Crew",
|
|
1760
|
+
"summary": "Help cook and serve the weekly community meal. Full food hygiene training provided.",
|
|
1761
|
+
"imageUrl": "p60fixture:volunteer/kitchen",
|
|
1762
|
+
"content": {
|
|
1763
|
+
"location": "St Chad's Hall",
|
|
1764
|
+
"schedule": "Wednesdays 9am to 2pm",
|
|
1765
|
+
"commitment": "Weekly",
|
|
1766
|
+
"hoursExpected": "5 hours"
|
|
1767
|
+
}
|
|
1768
|
+
},
|
|
1769
|
+
{
|
|
1770
|
+
"id": "aaaaaaaa-1111-4111-8111-111111111113",
|
|
1771
|
+
"slug": "food-bank-driver",
|
|
1772
|
+
"title": "Food Bank Driver",
|
|
1773
|
+
"summary": "Collect supermarket surplus on the morning round. A full licence and a friendly wave required.",
|
|
1774
|
+
"imageUrl": null,
|
|
1775
|
+
"content": {
|
|
1776
|
+
"location": "Foundry Lane depot",
|
|
1777
|
+
"schedule": "Weekday mornings",
|
|
1778
|
+
"commitment": "One morning a week",
|
|
1779
|
+
"hoursExpected": "2 hours"
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
]
|
|
1783
|
+
},
|
|
1784
|
+
"media": {
|
|
1785
|
+
"media": [
|
|
1786
|
+
{
|
|
1787
|
+
"id": "bbbbbbbb-2222-4222-8222-222222222221",
|
|
1788
|
+
"slug": "garden-opening-film",
|
|
1789
|
+
"title": "The Garden Opening, on Film",
|
|
1790
|
+
"summary": "Four minutes from the gates opening, shot by the youth club media group.",
|
|
1791
|
+
"imageUrl": "p60fixture:media/gardenfilm",
|
|
1792
|
+
"content": {
|
|
1793
|
+
"mediaType": "VIDEO",
|
|
1794
|
+
"mediaUrl": "/fixture/garden-opening",
|
|
1795
|
+
"speaker": null,
|
|
1796
|
+
"duration": "4 minutes"
|
|
1797
|
+
}
|
|
1798
|
+
},
|
|
1799
|
+
{
|
|
1800
|
+
"id": "bbbbbbbb-2222-4222-8222-222222222222",
|
|
1801
|
+
"slug": "trustee-talk-2030",
|
|
1802
|
+
"title": "Where the Trust Goes Next",
|
|
1803
|
+
"summary": "Chair of trustees Priya Sharma on the three-year plan, recorded at the spring members' evening.",
|
|
1804
|
+
"imageUrl": "p60fixture:media/talk",
|
|
1805
|
+
"content": {
|
|
1806
|
+
"mediaType": "VIDEO",
|
|
1807
|
+
"mediaUrl": "/fixture/trustee-talk",
|
|
1808
|
+
"speaker": "Priya Sharma",
|
|
1809
|
+
"duration": "18 minutes"
|
|
1810
|
+
}
|
|
1811
|
+
},
|
|
1812
|
+
{
|
|
1813
|
+
"id": "bbbbbbbb-2222-4222-8222-222222222223",
|
|
1814
|
+
"slug": "sound-of-the-kitchen",
|
|
1815
|
+
"title": "Sound of the Kitchen",
|
|
1816
|
+
"summary": "An audio portrait of Wednesday lunchtime, best enjoyed hungry.",
|
|
1817
|
+
"imageUrl": null,
|
|
1818
|
+
"content": {
|
|
1819
|
+
"mediaType": "AUDIO",
|
|
1820
|
+
"mediaUrl": "/fixture/kitchen-audio",
|
|
1821
|
+
"speaker": null,
|
|
1822
|
+
"duration": "9 minutes"
|
|
1823
|
+
}
|
|
1824
|
+
}
|
|
1825
|
+
]
|
|
1826
|
+
},
|
|
1827
|
+
"impactMap": {
|
|
1828
|
+
"impactMap": {
|
|
1829
|
+
"slug": "our-work",
|
|
1830
|
+
"title": "Where the Trust works",
|
|
1831
|
+
"intro": "Every marker is a real place in Alderford.",
|
|
1832
|
+
"viewport": {
|
|
1833
|
+
"centerLat": 53.7995,
|
|
1834
|
+
"centerLng": -1.552,
|
|
1835
|
+
"zoom": 14
|
|
1836
|
+
},
|
|
1837
|
+
"points": [
|
|
1838
|
+
{
|
|
1839
|
+
"latitude": 53.8008,
|
|
1840
|
+
"longitude": -1.5491,
|
|
1841
|
+
"kind": "LOCATION",
|
|
1842
|
+
"title": "Foundry Lane Hub",
|
|
1843
|
+
"summary": "The front door: food bank depot, advice desk and the volunteer office.",
|
|
1844
|
+
"imageUrl": null,
|
|
1845
|
+
"href": null
|
|
1846
|
+
},
|
|
1847
|
+
{
|
|
1848
|
+
"latitude": 53.8014,
|
|
1849
|
+
"longitude": -1.5502,
|
|
1850
|
+
"kind": "CAUSE",
|
|
1851
|
+
"title": "Community Garden",
|
|
1852
|
+
"summary": "Twenty-two raised beds and a seed library, open to every household.",
|
|
1853
|
+
"imageUrl": null,
|
|
1854
|
+
"href": "/donate/food-bank-fund"
|
|
1855
|
+
},
|
|
1856
|
+
{
|
|
1857
|
+
"latitude": 53.7975,
|
|
1858
|
+
"longitude": -1.5562,
|
|
1859
|
+
"kind": "EVENT",
|
|
1860
|
+
"title": "Warm Space Wednesdays",
|
|
1861
|
+
"summary": "St Chad's Hall, open and heated all winter.",
|
|
1862
|
+
"imageUrl": null,
|
|
1863
|
+
"href": "/events?event=66666666-6666-6666-6666-666666666666"
|
|
1864
|
+
},
|
|
1865
|
+
{
|
|
1866
|
+
"latitude": 53.7969,
|
|
1867
|
+
"longitude": -1.5474,
|
|
1868
|
+
"kind": "CAMPAIGN",
|
|
1869
|
+
"title": "Keep the 27 Bus",
|
|
1870
|
+
"summary": "The only bus serving the Fenwick estate is set to be cut.",
|
|
1871
|
+
"imageUrl": null,
|
|
1872
|
+
"href": "/campaigns/keep-the-27-bus"
|
|
1873
|
+
}
|
|
1874
|
+
]
|
|
1875
|
+
}
|
|
1876
|
+
}
|
|
1877
|
+
},
|
|
1878
|
+
"site": {
|
|
1879
|
+
"brand": {
|
|
1880
|
+
"name": "The Lantern Trust",
|
|
1881
|
+
"tagline": "Neighbours, looked after.",
|
|
1882
|
+
"logoUrl": null,
|
|
1883
|
+
"logoType": "full",
|
|
1884
|
+
"footerLogoUrl": null
|
|
1885
|
+
},
|
|
1886
|
+
"nav": {
|
|
1887
|
+
"items": [
|
|
1888
|
+
{
|
|
1889
|
+
"label": "Home",
|
|
1890
|
+
"href": "/",
|
|
1891
|
+
"cta": false
|
|
1892
|
+
},
|
|
1893
|
+
{
|
|
1894
|
+
"label": "About us",
|
|
1895
|
+
"href": "/about",
|
|
1896
|
+
"cta": false
|
|
1897
|
+
},
|
|
1898
|
+
{
|
|
1899
|
+
"label": "Events",
|
|
1900
|
+
"href": "/events",
|
|
1901
|
+
"cta": false
|
|
1902
|
+
},
|
|
1903
|
+
{
|
|
1904
|
+
"label": "Services",
|
|
1905
|
+
"href": "/services",
|
|
1906
|
+
"cta": false,
|
|
1907
|
+
"children": [
|
|
1908
|
+
{
|
|
1909
|
+
"label": "Food bank",
|
|
1910
|
+
"href": "/services?service=food-bank",
|
|
1911
|
+
"group": "Support",
|
|
1912
|
+
"description": "Emergency food parcels and practical advice."
|
|
1913
|
+
},
|
|
1914
|
+
{
|
|
1915
|
+
"label": "Community",
|
|
1916
|
+
"href": "#",
|
|
1917
|
+
"group": "Get involved",
|
|
1918
|
+
"children": [
|
|
1919
|
+
{
|
|
1920
|
+
"label": "Youth club",
|
|
1921
|
+
"href": "/services?service=youth-club"
|
|
1922
|
+
}
|
|
1923
|
+
]
|
|
1924
|
+
}
|
|
1925
|
+
],
|
|
1926
|
+
"megaMenu": {
|
|
1927
|
+
"columns": 3,
|
|
1928
|
+
"promo": {
|
|
1929
|
+
"title": "Visit this week",
|
|
1930
|
+
"text": "Find a programme and meet the team.",
|
|
1931
|
+
"href": "/services",
|
|
1932
|
+
"label": "Explore services"
|
|
1933
|
+
}
|
|
1934
|
+
}
|
|
1935
|
+
},
|
|
1936
|
+
{
|
|
1937
|
+
"label": "Donate",
|
|
1938
|
+
"href": "/donate",
|
|
1939
|
+
"cta": true
|
|
1940
|
+
}
|
|
1941
|
+
],
|
|
1942
|
+
"footer": [
|
|
1943
|
+
{
|
|
1944
|
+
"label": "About us",
|
|
1945
|
+
"href": "/about"
|
|
1946
|
+
},
|
|
1947
|
+
{
|
|
1948
|
+
"label": "Contact",
|
|
1949
|
+
"href": "https://example.org/contact",
|
|
1950
|
+
"external": true
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
"label": "Our work",
|
|
1954
|
+
"href": "#",
|
|
1955
|
+
"children": [
|
|
1956
|
+
{
|
|
1957
|
+
"label": "Food bank",
|
|
1958
|
+
"href": "/services?service=food-bank"
|
|
1959
|
+
}
|
|
1960
|
+
]
|
|
1961
|
+
}
|
|
1962
|
+
],
|
|
1963
|
+
"derived": [
|
|
1964
|
+
{
|
|
1965
|
+
"label": "Home",
|
|
1966
|
+
"href": "/",
|
|
1967
|
+
"cta": false
|
|
1968
|
+
},
|
|
1969
|
+
{
|
|
1970
|
+
"label": "About us",
|
|
1971
|
+
"href": "/about",
|
|
1972
|
+
"cta": false
|
|
1973
|
+
},
|
|
1974
|
+
{
|
|
1975
|
+
"label": "Events",
|
|
1976
|
+
"href": "/events",
|
|
1977
|
+
"cta": false
|
|
1978
|
+
},
|
|
1979
|
+
{
|
|
1980
|
+
"label": "Donate",
|
|
1981
|
+
"href": "/donate",
|
|
1982
|
+
"cta": true
|
|
1983
|
+
}
|
|
1984
|
+
]
|
|
1985
|
+
},
|
|
1986
|
+
"socials": [
|
|
1987
|
+
{
|
|
1988
|
+
"platform": "facebook",
|
|
1989
|
+
"url": "https://facebook.com/lanterntrust",
|
|
1990
|
+
"iconSvg": "<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>"
|
|
1991
|
+
},
|
|
1992
|
+
{
|
|
1993
|
+
"platform": "instagram",
|
|
1994
|
+
"url": "https://instagram.com/lanterntrust",
|
|
1995
|
+
"iconSvg": "<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\"/></svg>"
|
|
1996
|
+
},
|
|
1997
|
+
{
|
|
1998
|
+
"platform": "youtube",
|
|
1999
|
+
"url": "https://youtube.com/@lanterntrust",
|
|
2000
|
+
"iconSvg": "<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polygon points=\"10,8 16,12 10,16\"/></svg>"
|
|
2001
|
+
}
|
|
2002
|
+
],
|
|
2003
|
+
"locale": {
|
|
2004
|
+
"code": "en",
|
|
2005
|
+
"direction": "ltr",
|
|
2006
|
+
"languages": [
|
|
2007
|
+
{
|
|
2008
|
+
"code": "en",
|
|
2009
|
+
"label": "English",
|
|
2010
|
+
"direction": "ltr"
|
|
2011
|
+
},
|
|
2012
|
+
{
|
|
2013
|
+
"code": "cy",
|
|
2014
|
+
"label": "Cymraeg",
|
|
2015
|
+
"direction": "ltr"
|
|
2016
|
+
},
|
|
2017
|
+
{
|
|
2018
|
+
"code": "ar",
|
|
2019
|
+
"label": "العربية",
|
|
2020
|
+
"direction": "rtl"
|
|
2021
|
+
}
|
|
2022
|
+
]
|
|
2023
|
+
},
|
|
2024
|
+
"content": {
|
|
2025
|
+
"services": [
|
|
2026
|
+
{
|
|
2027
|
+
"id": "66666666-6666-6666-6666-666666666661",
|
|
2028
|
+
"title": "Food Bank",
|
|
2029
|
+
"slug": "food-bank",
|
|
2030
|
+
"summary": "Emergency parcels, no referral needed, from the Foundry Lane depot every weekday morning.",
|
|
2031
|
+
"imageUrl": "p60fixture:service/foodbank",
|
|
2032
|
+
"href": "/services?service=food-bank"
|
|
2033
|
+
},
|
|
2034
|
+
{
|
|
2035
|
+
"id": "66666666-6666-6666-6666-666666666662",
|
|
2036
|
+
"title": "Youth Club",
|
|
2037
|
+
"slug": "youth-club",
|
|
2038
|
+
"summary": "Sports, cooking and somewhere to be for ages 10 to 16, four evenings a week.",
|
|
2039
|
+
"imageUrl": "p60fixture:service/youthclub",
|
|
2040
|
+
"href": "/services?service=youth-club"
|
|
2041
|
+
},
|
|
2042
|
+
{
|
|
2043
|
+
"id": "66666666-6666-6666-6666-666666666663",
|
|
2044
|
+
"title": "Money Advice",
|
|
2045
|
+
"slug": "money-advice",
|
|
2046
|
+
"summary": "Free, confidential help with debt, benefits and the letters that keep you up at night.",
|
|
2047
|
+
"imageUrl": "p60fixture:service/advice",
|
|
2048
|
+
"href": "/services?service=money-advice"
|
|
2049
|
+
},
|
|
2050
|
+
{
|
|
2051
|
+
"id": "66666666-6666-6666-6666-666666666664",
|
|
2052
|
+
"title": "Community Garden",
|
|
2053
|
+
"slug": "community-garden",
|
|
2054
|
+
"summary": "Twenty-two raised beds, a greenhouse and a seed library, open to every Alderford household.",
|
|
2055
|
+
"imageUrl": "p60fixture:service/garden",
|
|
2056
|
+
"href": "/services?service=community-garden"
|
|
2057
|
+
},
|
|
2058
|
+
{
|
|
2059
|
+
"id": "66666666-6666-6666-6666-666666666665",
|
|
2060
|
+
"title": "Warm Spaces",
|
|
2061
|
+
"slug": "warm-spaces",
|
|
2062
|
+
"summary": "Our hall, open and heated through winter, with tea, wifi and company.",
|
|
2063
|
+
"imageUrl": "p60fixture:service/warmspace",
|
|
2064
|
+
"href": "/services?service=warm-spaces"
|
|
2065
|
+
}
|
|
2066
|
+
],
|
|
2067
|
+
"events": [
|
|
2068
|
+
{
|
|
2069
|
+
"id": "22222222-2222-2222-2222-222222222222",
|
|
2070
|
+
"name": "The Lantern Gala",
|
|
2071
|
+
"description": "Our biggest night of the year: supper, music from the Alderford Community Choir, and the annual lantern walk along the river to close.",
|
|
2072
|
+
"registrationMode": "TICKETED",
|
|
2073
|
+
"startsAt": "2030-09-20T19:00:00Z",
|
|
2074
|
+
"endsAt": null,
|
|
2075
|
+
"venueName": "The Maltings, Alderford",
|
|
2076
|
+
"online": false,
|
|
2077
|
+
"imageUrl": "p60fixture:event/gala",
|
|
2078
|
+
"onSale": true,
|
|
2079
|
+
"soldOut": false,
|
|
2080
|
+
"priceFrom": 25.0,
|
|
2081
|
+
"currency": "GBP",
|
|
2082
|
+
"detailHref": "/events?event=22222222-2222-2222-2222-222222222222"
|
|
2083
|
+
},
|
|
2084
|
+
{
|
|
2085
|
+
"id": "44444444-4444-4444-4444-444444444444",
|
|
2086
|
+
"name": "Riverside Harvest Supper",
|
|
2087
|
+
"description": "A long-table supper on the Aldern meadow, cooked by our kitchen volunteers with produce from the community garden.",
|
|
2088
|
+
"registrationMode": "TICKETED",
|
|
2089
|
+
"startsAt": "2030-10-04T18:30:00Z",
|
|
2090
|
+
"endsAt": "2030-10-04T22:00:00Z",
|
|
2091
|
+
"venueName": "Aldern Meadow",
|
|
2092
|
+
"online": false,
|
|
2093
|
+
"imageUrl": "p60fixture:event/harvest",
|
|
2094
|
+
"onSale": true,
|
|
2095
|
+
"soldOut": false,
|
|
2096
|
+
"priceFrom": 12.5,
|
|
2097
|
+
"currency": "GBP",
|
|
2098
|
+
"detailHref": "/events?event=44444444-4444-4444-4444-444444444444"
|
|
2099
|
+
},
|
|
2100
|
+
{
|
|
2101
|
+
"id": "55555555-5555-5555-5555-555555555555",
|
|
2102
|
+
"name": "Volunteer Welcome Evening",
|
|
2103
|
+
"description": "Meet the team, hear where help is needed most this season, and find a role that fits the time you have.",
|
|
2104
|
+
"registrationMode": "RSVP",
|
|
2105
|
+
"startsAt": "2030-09-03T18:00:00Z",
|
|
2106
|
+
"endsAt": "2030-09-03T19:30:00Z",
|
|
2107
|
+
"venueName": "Foundry Lane Hub",
|
|
2108
|
+
"online": false,
|
|
2109
|
+
"imageUrl": "p60fixture:event/welcome",
|
|
2110
|
+
"onSale": true,
|
|
2111
|
+
"soldOut": false,
|
|
2112
|
+
"priceFrom": null,
|
|
2113
|
+
"currency": null,
|
|
2114
|
+
"detailHref": "/events?event=55555555-5555-5555-5555-555555555555"
|
|
2115
|
+
},
|
|
2116
|
+
{
|
|
2117
|
+
"id": "66666666-6666-6666-6666-666666666666",
|
|
2118
|
+
"name": "Warm Space Wednesdays",
|
|
2119
|
+
"description": "Our hall is open, warm and stocked with tea every Wednesday through the cold months. No booking, no questions, everyone welcome.",
|
|
2120
|
+
"registrationMode": "INFO",
|
|
2121
|
+
"startsAt": "2030-11-06T10:00:00Z",
|
|
2122
|
+
"endsAt": "2030-11-06T15:00:00Z",
|
|
2123
|
+
"venueName": "St Chad's Hall",
|
|
2124
|
+
"online": false,
|
|
2125
|
+
"imageUrl": null,
|
|
2126
|
+
"onSale": true,
|
|
2127
|
+
"soldOut": false,
|
|
2128
|
+
"priceFrom": null,
|
|
2129
|
+
"currency": null,
|
|
2130
|
+
"detailHref": "/events?event=66666666-6666-6666-6666-666666666666"
|
|
2131
|
+
},
|
|
2132
|
+
{
|
|
2133
|
+
"id": "77777777-7777-7777-7777-777777777777",
|
|
2134
|
+
"name": "Money Advice Drop-in",
|
|
2135
|
+
"description": "A quiet hour with our trained advisers. Bring letters you are worried about; we will work through them together.",
|
|
2136
|
+
"registrationMode": "INFO",
|
|
2137
|
+
"startsAt": "2030-09-12T10:00:00Z",
|
|
2138
|
+
"endsAt": "2030-09-12T12:00:00Z",
|
|
2139
|
+
"venueName": null,
|
|
2140
|
+
"online": true,
|
|
2141
|
+
"imageUrl": null,
|
|
2142
|
+
"onSale": true,
|
|
2143
|
+
"soldOut": false,
|
|
2144
|
+
"priceFrom": null,
|
|
2145
|
+
"currency": null,
|
|
2146
|
+
"detailHref": "/events?event=77777777-7777-7777-7777-777777777777"
|
|
2147
|
+
},
|
|
2148
|
+
{
|
|
2149
|
+
"id": "88888888-8888-8888-8888-888888888888",
|
|
2150
|
+
"name": "Winter Fair",
|
|
2151
|
+
"description": "Stalls, carols and the grand raffle in aid of the Winter Appeal. Free entry; every stall staffed by volunteers.",
|
|
2152
|
+
"registrationMode": "TICKETED",
|
|
2153
|
+
"startsAt": "2030-12-07T11:00:00Z",
|
|
2154
|
+
"endsAt": "2030-12-07T16:00:00Z",
|
|
2155
|
+
"venueName": "Alderford Market Square",
|
|
2156
|
+
"online": false,
|
|
2157
|
+
"imageUrl": "p60fixture:event/winterfair",
|
|
2158
|
+
"onSale": true,
|
|
2159
|
+
"soldOut": true,
|
|
2160
|
+
"priceFrom": 0.0,
|
|
2161
|
+
"currency": "GBP",
|
|
2162
|
+
"detailHref": "/events?event=88888888-8888-8888-8888-888888888888"
|
|
2163
|
+
}
|
|
2164
|
+
],
|
|
2165
|
+
"articles": [
|
|
2166
|
+
{
|
|
2167
|
+
"id": "88888888-8888-8888-8888-888888888888",
|
|
2168
|
+
"title": "The Community Garden Opens Its Gates",
|
|
2169
|
+
"slug": "community-garden-opens",
|
|
2170
|
+
"excerpt": "Two years of digging, fundraising and Saturday mornings in the rain: the Foundry Lane garden is finally open to everyone.",
|
|
2171
|
+
"imageUrl": "p60fixture:article/garden",
|
|
2172
|
+
"authorName": "Amina Khan",
|
|
2173
|
+
"authorRole": "Community Editor",
|
|
2174
|
+
"categories": [
|
|
2175
|
+
"News"
|
|
2176
|
+
],
|
|
2177
|
+
"publishedAt": "2030-04-12T09:00:00Z",
|
|
2178
|
+
"readingMinutes": 5,
|
|
2179
|
+
"href": "/articles/community-garden-opens"
|
|
2180
|
+
},
|
|
2181
|
+
{
|
|
2182
|
+
"id": "99999999-9999-9999-9999-999999999999",
|
|
2183
|
+
"title": "What a Food Parcel Actually Holds",
|
|
2184
|
+
"slug": "what-a-food-parcel-holds",
|
|
2185
|
+
"excerpt": "People imagine tins and pasta. The real list is longer, more personal, and put together with more care than you might think.",
|
|
2186
|
+
"imageUrl": "p60fixture:article/parcel",
|
|
2187
|
+
"authorName": "Derek Osei",
|
|
2188
|
+
"authorRole": "Food Bank Lead",
|
|
2189
|
+
"categories": [
|
|
2190
|
+
"Stories"
|
|
2191
|
+
],
|
|
2192
|
+
"publishedAt": "2030-03-28T09:00:00Z",
|
|
2193
|
+
"readingMinutes": 6,
|
|
2194
|
+
"href": "/articles/what-a-food-parcel-holds"
|
|
2195
|
+
},
|
|
2196
|
+
{
|
|
2197
|
+
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
2198
|
+
"title": "Meet the Wednesday Kitchen Crew",
|
|
2199
|
+
"slug": "wednesday-kitchen-crew",
|
|
2200
|
+
"excerpt": "Eleven volunteers, one borrowed oven, and a hundred and forty hot meals a week. The kitchen crew tell it in their own words.",
|
|
2201
|
+
"imageUrl": "p60fixture:people/kitchen",
|
|
2202
|
+
"authorName": "Amina Khan",
|
|
2203
|
+
"authorRole": "Community Editor",
|
|
2204
|
+
"categories": [
|
|
2205
|
+
"Stories"
|
|
2206
|
+
],
|
|
2207
|
+
"publishedAt": "2030-03-02T09:00:00Z",
|
|
2208
|
+
"readingMinutes": 7,
|
|
2209
|
+
"href": "/articles/wednesday-kitchen-crew"
|
|
2210
|
+
},
|
|
2211
|
+
{
|
|
2212
|
+
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
|
|
2213
|
+
"title": "Winter Appeal: Where Your Money Went",
|
|
2214
|
+
"slug": "winter-appeal-report",
|
|
2215
|
+
"excerpt": "You gave 18,400 pounds in eight weeks. Here is the line-by-line account of what it paid for, and what we learned.",
|
|
2216
|
+
"imageUrl": "p60fixture:campaign/winterreport",
|
|
2217
|
+
"authorName": "Priya Sharma",
|
|
2218
|
+
"authorRole": "Trustee",
|
|
2219
|
+
"categories": [
|
|
2220
|
+
"News"
|
|
2221
|
+
],
|
|
2222
|
+
"publishedAt": "2030-02-14T09:00:00Z",
|
|
2223
|
+
"readingMinutes": 8,
|
|
2224
|
+
"href": "/articles/winter-appeal-report"
|
|
2225
|
+
},
|
|
2226
|
+
{
|
|
2227
|
+
"id": "cccccccc-cccc-cccc-cccc-cccccccccccc",
|
|
2228
|
+
"title": "Five Things Our Money Advisers Wish You Knew",
|
|
2229
|
+
"slug": "money-advice-five-things",
|
|
2230
|
+
"excerpt": "The advice team see the same worries again and again. Most of them have a fix that takes less than an hour.",
|
|
2231
|
+
"imageUrl": null,
|
|
2232
|
+
"authorName": "Tom Bradley",
|
|
2233
|
+
"authorRole": "Advice Service",
|
|
2234
|
+
"categories": [
|
|
2235
|
+
"Guides"
|
|
2236
|
+
],
|
|
2237
|
+
"publishedAt": "2030-01-30T09:00:00Z",
|
|
2238
|
+
"readingMinutes": 4,
|
|
2239
|
+
"href": "/articles/money-advice-five-things"
|
|
2240
|
+
},
|
|
2241
|
+
{
|
|
2242
|
+
"id": "dddddddd-dddd-dddd-dddd-dddddddddddd",
|
|
2243
|
+
"title": "A Year of Warm Spaces, in Numbers",
|
|
2244
|
+
"slug": "warm-spaces-in-numbers",
|
|
2245
|
+
"excerpt": "Fourteen hundred visits, ninety regulars, and one chess league nobody planned. What happens when you just open the door.",
|
|
2246
|
+
"imageUrl": "p60fixture:service/warmspace",
|
|
2247
|
+
"authorName": "Amina Khan",
|
|
2248
|
+
"authorRole": "Community Editor",
|
|
2249
|
+
"categories": [
|
|
2250
|
+
"News"
|
|
2251
|
+
],
|
|
2252
|
+
"publishedAt": "2030-01-08T09:00:00Z",
|
|
2253
|
+
"readingMinutes": 5,
|
|
2254
|
+
"href": "/articles/warm-spaces-in-numbers"
|
|
2255
|
+
}
|
|
2256
|
+
],
|
|
2257
|
+
"campaigns": [
|
|
2258
|
+
{
|
|
2259
|
+
"id": "99999999-9999-9999-9999-999999999991",
|
|
2260
|
+
"title": "Keep the 27 Bus",
|
|
2261
|
+
"href": "/campaigns/keep-the-27-bus",
|
|
2262
|
+
"summary": "The only bus serving the Fenwick estate is set to be cut. Add your name before the consultation closes.",
|
|
2263
|
+
"imageUrl": "p60fixture:campaign/bus"
|
|
2264
|
+
},
|
|
2265
|
+
{
|
|
2266
|
+
"id": "99999999-9999-9999-9999-999999999992",
|
|
2267
|
+
"title": "A Defibrillator on Every Street",
|
|
2268
|
+
"href": "/campaigns/defibrillator-every-street",
|
|
2269
|
+
"summary": "We are raising for twelve more public defibrillators and training two hundred neighbours to use them.",
|
|
2270
|
+
"imageUrl": "p60fixture:campaign/defib"
|
|
2271
|
+
},
|
|
2272
|
+
{
|
|
2273
|
+
"id": "99999999-9999-9999-9999-999999999993",
|
|
2274
|
+
"title": "Alderford Housing Survey",
|
|
2275
|
+
"href": "/campaigns/housing-survey",
|
|
2276
|
+
"summary": null,
|
|
2277
|
+
"imageUrl": null
|
|
2278
|
+
}
|
|
2279
|
+
],
|
|
2280
|
+
"causes": [
|
|
2281
|
+
{
|
|
2282
|
+
"id": "55555555-5555-5555-5555-555555555550",
|
|
2283
|
+
"title": "Flood Response Appeal",
|
|
2284
|
+
"slug": "flood-response",
|
|
2285
|
+
"description": "The Aldern broke its banks on Sunday. Thirty households need dry bedding, dehumidifiers and somewhere warm now.",
|
|
2286
|
+
"imageUrl": "p60fixture:cause/flood",
|
|
2287
|
+
"targetAmount": 50000,
|
|
2288
|
+
"raisedAmount": 18750,
|
|
2289
|
+
"progressPercentage": 38,
|
|
2290
|
+
"href": "/donate/flood-response",
|
|
2291
|
+
"paymentOptions": {
|
|
2292
|
+
"oneOff": true,
|
|
2293
|
+
"recurringCard": true,
|
|
2294
|
+
"directDebit": true
|
|
2295
|
+
}
|
|
2296
|
+
},
|
|
2297
|
+
{
|
|
2298
|
+
"id": "55555555-5555-5555-5555-555555555551",
|
|
2299
|
+
"title": "Winter Appeal",
|
|
2300
|
+
"slug": "winter-appeal",
|
|
2301
|
+
"description": "Heating top-ups, warm bedding and a hot meal for the households the cold hits hardest.",
|
|
2302
|
+
"imageUrl": "p60fixture:cause/winter",
|
|
2303
|
+
"targetAmount": 20000,
|
|
2304
|
+
"raisedAmount": 12500,
|
|
2305
|
+
"progressPercentage": 63,
|
|
2306
|
+
"href": "/donate/winter-appeal",
|
|
2307
|
+
"paymentOptions": {
|
|
2308
|
+
"oneOff": true,
|
|
2309
|
+
"recurringCard": true,
|
|
2310
|
+
"directDebit": false
|
|
2311
|
+
}
|
|
2312
|
+
},
|
|
2313
|
+
{
|
|
2314
|
+
"id": "55555555-5555-5555-5555-555555555552",
|
|
2315
|
+
"title": "Food Bank Fund",
|
|
2316
|
+
"slug": "food-bank-fund",
|
|
2317
|
+
"description": "Keeps the shelves stocked between donation drives. Ten pounds fills a family parcel.",
|
|
2318
|
+
"imageUrl": "p60fixture:cause/foodbank",
|
|
2319
|
+
"targetAmount": 15000,
|
|
2320
|
+
"raisedAmount": 9800,
|
|
2321
|
+
"progressPercentage": 65,
|
|
2322
|
+
"href": "/donate/food-bank-fund",
|
|
2323
|
+
"paymentOptions": {
|
|
2324
|
+
"oneOff": true,
|
|
2325
|
+
"recurringCard": true,
|
|
2326
|
+
"directDebit": true
|
|
2327
|
+
}
|
|
2328
|
+
},
|
|
2329
|
+
{
|
|
2330
|
+
"id": "55555555-5555-5555-5555-555555555553",
|
|
2331
|
+
"title": "Youth Club Futures",
|
|
2332
|
+
"slug": "youth-club-futures",
|
|
2333
|
+
"description": "Coaching, kit and trips for the seventy young people who come through our doors each week.",
|
|
2334
|
+
"imageUrl": "p60fixture:cause/youth",
|
|
2335
|
+
"targetAmount": 8000,
|
|
2336
|
+
"raisedAmount": 2150,
|
|
2337
|
+
"progressPercentage": 27,
|
|
2338
|
+
"href": "/donate/youth-club-futures",
|
|
2339
|
+
"paymentOptions": {
|
|
2340
|
+
"oneOff": true,
|
|
2341
|
+
"recurringCard": false,
|
|
2342
|
+
"directDebit": false
|
|
2343
|
+
}
|
|
2344
|
+
}
|
|
2345
|
+
],
|
|
2346
|
+
"courses": [
|
|
2347
|
+
{
|
|
2348
|
+
"id": "33333333-3333-3333-3333-333333333333",
|
|
2349
|
+
"title": "Junior Athletics",
|
|
2350
|
+
"description": "Weekly athletics for children aged 7 to 12, coached by qualified volunteers at the King's Park track.",
|
|
2351
|
+
"imageUrl": "p60fixture:course/athletics",
|
|
2352
|
+
"venue": "King's Park track",
|
|
2353
|
+
"audience": "CHILD",
|
|
2354
|
+
"priceFrom": 15.0,
|
|
2355
|
+
"currency": "GBP",
|
|
2356
|
+
"soldOut": false,
|
|
2357
|
+
"href": "/courses"
|
|
2358
|
+
}
|
|
2359
|
+
],
|
|
2360
|
+
"volunteering": [
|
|
2361
|
+
{
|
|
2362
|
+
"id": "aaaaaaaa-1111-4111-8111-111111111111",
|
|
2363
|
+
"slug": "garden-volunteer",
|
|
2364
|
+
"title": "Garden Volunteer",
|
|
2365
|
+
"summary": "Keep the Foundry Lane beds thriving: sowing, watering, and showing first-timers where the trowels live.",
|
|
2366
|
+
"imageUrl": "p60fixture:volunteer/garden",
|
|
2367
|
+
"content": {
|
|
2368
|
+
"location": "Foundry Lane Garden",
|
|
2369
|
+
"schedule": "Saturday mornings",
|
|
2370
|
+
"commitment": "Twice a month",
|
|
2371
|
+
"hoursExpected": "3 hours"
|
|
2372
|
+
}
|
|
2373
|
+
},
|
|
2374
|
+
{
|
|
2375
|
+
"id": "aaaaaaaa-1111-4111-8111-111111111112",
|
|
2376
|
+
"slug": "kitchen-crew",
|
|
2377
|
+
"title": "Wednesday Kitchen Crew",
|
|
2378
|
+
"summary": "Help cook and serve the weekly community meal. Full food hygiene training provided.",
|
|
2379
|
+
"imageUrl": "p60fixture:volunteer/kitchen",
|
|
2380
|
+
"content": {
|
|
2381
|
+
"location": "St Chad's Hall",
|
|
2382
|
+
"schedule": "Wednesdays 9am to 2pm",
|
|
2383
|
+
"commitment": "Weekly",
|
|
2384
|
+
"hoursExpected": "5 hours"
|
|
2385
|
+
}
|
|
2386
|
+
},
|
|
2387
|
+
{
|
|
2388
|
+
"id": "aaaaaaaa-1111-4111-8111-111111111113",
|
|
2389
|
+
"slug": "food-bank-driver",
|
|
2390
|
+
"title": "Food Bank Driver",
|
|
2391
|
+
"summary": "Collect supermarket surplus on the morning round. A full licence and a friendly wave required.",
|
|
2392
|
+
"imageUrl": null,
|
|
2393
|
+
"content": {
|
|
2394
|
+
"location": "Foundry Lane depot",
|
|
2395
|
+
"schedule": "Weekday mornings",
|
|
2396
|
+
"commitment": "One morning a week",
|
|
2397
|
+
"hoursExpected": "2 hours"
|
|
2398
|
+
}
|
|
2399
|
+
}
|
|
2400
|
+
],
|
|
2401
|
+
"media": [
|
|
2402
|
+
{
|
|
2403
|
+
"id": "bbbbbbbb-2222-4222-8222-222222222221",
|
|
2404
|
+
"slug": "garden-opening-film",
|
|
2405
|
+
"title": "The Garden Opening, on Film",
|
|
2406
|
+
"summary": "Four minutes from the gates opening, shot by the youth club media group.",
|
|
2407
|
+
"imageUrl": "p60fixture:media/gardenfilm",
|
|
2408
|
+
"content": {
|
|
2409
|
+
"mediaType": "VIDEO",
|
|
2410
|
+
"mediaUrl": "/fixture/garden-opening",
|
|
2411
|
+
"speaker": null,
|
|
2412
|
+
"duration": "4 minutes"
|
|
2413
|
+
}
|
|
2414
|
+
},
|
|
2415
|
+
{
|
|
2416
|
+
"id": "bbbbbbbb-2222-4222-8222-222222222222",
|
|
2417
|
+
"slug": "trustee-talk-2030",
|
|
2418
|
+
"title": "Where the Trust Goes Next",
|
|
2419
|
+
"summary": "Chair of trustees Priya Sharma on the three-year plan, recorded at the spring members' evening.",
|
|
2420
|
+
"imageUrl": "p60fixture:media/talk",
|
|
2421
|
+
"content": {
|
|
2422
|
+
"mediaType": "VIDEO",
|
|
2423
|
+
"mediaUrl": "/fixture/trustee-talk",
|
|
2424
|
+
"speaker": "Priya Sharma",
|
|
2425
|
+
"duration": "18 minutes"
|
|
2426
|
+
}
|
|
2427
|
+
},
|
|
2428
|
+
{
|
|
2429
|
+
"id": "bbbbbbbb-2222-4222-8222-222222222223",
|
|
2430
|
+
"slug": "sound-of-the-kitchen",
|
|
2431
|
+
"title": "Sound of the Kitchen",
|
|
2432
|
+
"summary": "An audio portrait of Wednesday lunchtime, best enjoyed hungry.",
|
|
2433
|
+
"imageUrl": null,
|
|
2434
|
+
"content": {
|
|
2435
|
+
"mediaType": "AUDIO",
|
|
2436
|
+
"mediaUrl": "/fixture/kitchen-audio",
|
|
2437
|
+
"speaker": null,
|
|
2438
|
+
"duration": "9 minutes"
|
|
2439
|
+
}
|
|
2440
|
+
}
|
|
2441
|
+
],
|
|
2442
|
+
"resources": [
|
|
2443
|
+
{
|
|
2444
|
+
"id": "88888888-8888-8888-8888-888888888881",
|
|
2445
|
+
"title": "Annual report 2029.pdf",
|
|
2446
|
+
"folder": "Reports",
|
|
2447
|
+
"url": "/fixture/annual-report-2029.pdf",
|
|
2448
|
+
"contentType": "application/pdf",
|
|
2449
|
+
"bytes": 1245760,
|
|
2450
|
+
"publishedAt": "2030-02-01T10:00:00Z"
|
|
2451
|
+
},
|
|
2452
|
+
{
|
|
2453
|
+
"id": "88888888-8888-8888-8888-888888888882",
|
|
2454
|
+
"title": "Safeguarding policy.pdf",
|
|
2455
|
+
"folder": "Policies",
|
|
2456
|
+
"url": "/fixture/safeguarding-policy.pdf",
|
|
2457
|
+
"contentType": "application/pdf",
|
|
2458
|
+
"bytes": 384000,
|
|
2459
|
+
"publishedAt": "2029-11-12T10:00:00Z"
|
|
2460
|
+
},
|
|
2461
|
+
{
|
|
2462
|
+
"id": "88888888-8888-8888-8888-888888888883",
|
|
2463
|
+
"title": "Volunteer handbook.pdf",
|
|
2464
|
+
"folder": "Volunteering",
|
|
2465
|
+
"url": "/fixture/volunteer-handbook.pdf",
|
|
2466
|
+
"contentType": "application/pdf",
|
|
2467
|
+
"bytes": 942080,
|
|
2468
|
+
"publishedAt": "2030-01-20T10:00:00Z"
|
|
2469
|
+
},
|
|
2470
|
+
{
|
|
2471
|
+
"id": "88888888-8888-8888-8888-888888888884",
|
|
2472
|
+
"title": "Hall hire form.pdf",
|
|
2473
|
+
"folder": "Forms",
|
|
2474
|
+
"url": "/fixture/hall-hire-form.pdf",
|
|
2475
|
+
"contentType": "application/pdf",
|
|
2476
|
+
"bytes": 128000,
|
|
2477
|
+
"publishedAt": "2029-09-02T10:00:00Z"
|
|
2478
|
+
}
|
|
2479
|
+
],
|
|
2480
|
+
"locations": [
|
|
2481
|
+
{
|
|
2482
|
+
"id": "99999999-9999-9999-9999-999999999901",
|
|
2483
|
+
"name": "Foundry Lane Hub",
|
|
2484
|
+
"address": "14 Foundry Lane, Alderford AL2 4RS",
|
|
2485
|
+
"latitude": 53.8008,
|
|
2486
|
+
"longitude": -1.5491,
|
|
2487
|
+
"primary": true,
|
|
2488
|
+
"directionsHref": "https://www.google.com/maps/dir/?api=1&destination=Foundry%20Lane%20Hub"
|
|
2489
|
+
},
|
|
2490
|
+
{
|
|
2491
|
+
"id": "99999999-9999-9999-9999-999999999902",
|
|
2492
|
+
"name": "St Chad's Hall",
|
|
2493
|
+
"address": "Church Walk, Alderford AL1 2JW",
|
|
2494
|
+
"latitude": 53.7975,
|
|
2495
|
+
"longitude": -1.5562,
|
|
2496
|
+
"primary": false,
|
|
2497
|
+
"directionsHref": "https://www.google.com/maps/dir/?api=1&destination=St%20Chad%27s%20Hall"
|
|
2498
|
+
}
|
|
2499
|
+
],
|
|
2500
|
+
"schedules": [
|
|
2501
|
+
{
|
|
2502
|
+
"type": "worship",
|
|
2503
|
+
"content": {
|
|
2504
|
+
"times": [
|
|
2505
|
+
{
|
|
2506
|
+
"name": "Fajr",
|
|
2507
|
+
"begins": "03:20",
|
|
2508
|
+
"congregation": "04:00"
|
|
2509
|
+
},
|
|
2510
|
+
{
|
|
2511
|
+
"name": "Zuhr",
|
|
2512
|
+
"begins": "13:11",
|
|
2513
|
+
"congregation": "13:30"
|
|
2514
|
+
},
|
|
2515
|
+
{
|
|
2516
|
+
"name": "Asr",
|
|
2517
|
+
"begins": "18:30",
|
|
2518
|
+
"congregation": "19:00"
|
|
2519
|
+
},
|
|
2520
|
+
{
|
|
2521
|
+
"name": "Maghrib",
|
|
2522
|
+
"begins": "21:04",
|
|
2523
|
+
"congregation": "21:04"
|
|
2524
|
+
},
|
|
2525
|
+
{
|
|
2526
|
+
"name": "Isha",
|
|
2527
|
+
"begins": "22:12",
|
|
2528
|
+
"congregation": "22:30"
|
|
2529
|
+
}
|
|
2530
|
+
],
|
|
2531
|
+
"beginsLabel": "Begins",
|
|
2532
|
+
"congregationLabel": "Jama'at",
|
|
2533
|
+
"note": "Jum'a 13:15 & 14:15",
|
|
2534
|
+
"href": "/services?service=prayer-times",
|
|
2535
|
+
"today": "24 July 2026",
|
|
2536
|
+
"todayAlt": "11 Safar 1448",
|
|
2537
|
+
"next": {
|
|
2538
|
+
"name": "Asr",
|
|
2539
|
+
"begins": "18:30",
|
|
2540
|
+
"congregation": "19:00",
|
|
2541
|
+
"target": "2030-07-24T19:00:00+01:00"
|
|
2542
|
+
},
|
|
2543
|
+
"jumah": [
|
|
2544
|
+
{
|
|
2545
|
+
"name": "Jum'a 1",
|
|
2546
|
+
"begins": null,
|
|
2547
|
+
"congregation": "13:15"
|
|
2548
|
+
},
|
|
2549
|
+
{
|
|
2550
|
+
"name": "Jum'a 2",
|
|
2551
|
+
"begins": null,
|
|
2552
|
+
"congregation": "14:15"
|
|
2553
|
+
}
|
|
2554
|
+
],
|
|
2555
|
+
"hijri": {
|
|
2556
|
+
"display": "11 Safar 1448"
|
|
2557
|
+
},
|
|
2558
|
+
"observances": [
|
|
2559
|
+
{
|
|
2560
|
+
"name": "Community iftar",
|
|
2561
|
+
"date": "2 March 2030",
|
|
2562
|
+
"href": "/events"
|
|
2563
|
+
}
|
|
2564
|
+
]
|
|
2565
|
+
}
|
|
2566
|
+
}
|
|
2567
|
+
],
|
|
2568
|
+
"about": []
|
|
725
2569
|
}
|
|
726
2570
|
}
|
|
727
2571
|
}
|
|
728
|
-
}
|
|
2572
|
+
}
|