@aglyn/plugins-ai 1.0.0-beta.264 → 1.0.0-beta.268

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/package.json +18 -18
  2. package/src/lib/assets/site-styles/beauty.webp +0 -0
  3. package/src/lib/assets/site-styles/blog.webp +0 -0
  4. package/src/lib/assets/site-styles/business.webp +0 -0
  5. package/src/lib/assets/site-styles/coming-soon.webp +0 -0
  6. package/src/lib/assets/site-styles/education.webp +0 -0
  7. package/src/lib/assets/site-styles/events.webp +0 -0
  8. package/src/lib/assets/site-styles/fitness.webp +0 -0
  9. package/src/lib/assets/site-styles/landing.webp +0 -0
  10. package/src/lib/assets/site-styles/music.webp +0 -0
  11. package/src/lib/assets/site-styles/nonprofit.webp +0 -0
  12. package/src/lib/assets/site-styles/personal.webp +0 -0
  13. package/src/lib/assets/site-styles/photography.webp +0 -0
  14. package/src/lib/assets/site-styles/portfolio.webp +0 -0
  15. package/src/lib/assets/site-styles/professional.webp +0 -0
  16. package/src/lib/assets/site-styles/realestate.webp +0 -0
  17. package/src/lib/assets/site-styles/restaurant.webp +0 -0
  18. package/src/lib/assets/site-styles/store.webp +0 -0
  19. package/src/lib/assets/site-styles/studio.webp +0 -0
  20. package/src/lib/assets/site-styles/trades.webp +0 -0
  21. package/src/lib/assets/site-styles/wellness.webp +0 -0
  22. package/src/lib/assets/site-styles/yoga.webp +0 -0
  23. package/src/lib/components/ai-job-site.d.ts +8 -1
  24. package/src/lib/components/ai-job-site.js +7 -0
  25. package/src/lib/components/ai-job-site.js.map +1 -1
  26. package/src/lib/components/ai-site-build-page.component.js +37 -0
  27. package/src/lib/components/ai-site-build-page.component.js.map +1 -1
  28. package/src/lib/components/ai-site-start-card.component.d.ts +12 -0
  29. package/src/lib/components/ai-site-start-card.component.js +279 -240
  30. package/src/lib/components/ai-site-start-card.component.js.map +1 -1
  31. package/src/lib/components/ai-site-start-steps.component.d.ts +114 -0
  32. package/src/lib/components/ai-site-start-steps.component.js +480 -0
  33. package/src/lib/components/ai-site-start-steps.component.js.map +1 -0
  34. package/src/lib/components/ai-site-start-tracking.d.ts +122 -0
  35. package/src/lib/components/ai-site-start-tracking.js +296 -0
  36. package/src/lib/components/ai-site-start-tracking.js.map +1 -0
  37. package/src/lib/components/ai-site-style-previews.d.ts +26 -0
  38. package/src/lib/components/ai-site-style-previews.js +115 -0
  39. package/src/lib/components/ai-site-style-previews.js.map +1 -0
  40. package/src/lib/components/assist-jobs-drawer.component.js +24 -2
  41. package/src/lib/components/assist-jobs-drawer.component.js.map +1 -1
  42. package/src/lib/insights/ai-insight-digest.d.ts +9 -0
  43. package/src/lib/insights/ai-insight-digest.js +35 -11
  44. package/src/lib/insights/ai-insight-digest.js.map +1 -1
  45. package/src/lib/jobs/ai-empty-site-sweep.d.ts +154 -0
  46. package/src/lib/jobs/ai-empty-site-sweep.js +346 -0
  47. package/src/lib/jobs/ai-empty-site-sweep.js.map +1 -0
  48. package/src/lib/jobs/ai-job-page-language.d.ts +9 -0
  49. package/src/lib/jobs/ai-job-page-language.js +20 -2
  50. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  51. package/src/lib/jobs/ai-job-plan-step.d.ts +43 -8
  52. package/src/lib/jobs/ai-job-plan-step.js +99 -18
  53. package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
  54. package/src/lib/jobs/ai-job-site-datasets.d.ts +82 -1
  55. package/src/lib/jobs/ai-job-site-datasets.js +276 -14
  56. package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
  57. package/src/lib/jobs/ai-jobs-beat.d.ts +11 -3
  58. package/src/lib/jobs/ai-jobs-beat.js +23 -6
  59. package/src/lib/jobs/ai-jobs-beat.js.map +1 -1
  60. package/src/lib/jobs/ai-jobs.js +46 -7
  61. package/src/lib/jobs/ai-jobs.js.map +1 -1
  62. package/src/lib/jobs/ai-layout-stock-photos.d.ts +143 -10
  63. package/src/lib/jobs/ai-layout-stock-photos.js +1046 -102
  64. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  65. package/src/lib/jobs/fixtures/ai-site-foreign-datasets-recording.d.ts +58 -0
  66. package/src/lib/jobs/fixtures/ai-site-foreign-datasets-recording.js +678 -0
  67. package/src/lib/jobs/fixtures/ai-site-foreign-datasets-recording.js.map +1 -0
  68. package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-beta265-recordings.d.ts +33 -0
  69. package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-beta265-recordings.js +270 -0
  70. package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-beta265-recordings.js.map +1 -0
  71. package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-people-recordings.d.ts +33 -0
  72. package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-people-recordings.js +277 -0
  73. package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-people-recordings.js.map +1 -0
  74. package/src/lib/jobs/fixtures/ai-stock-photo-agl3923-recordings.d.ts +35 -0
  75. package/src/lib/jobs/fixtures/ai-stock-photo-agl3923-recordings.js +379 -0
  76. package/src/lib/jobs/fixtures/ai-stock-photo-agl3923-recordings.js.map +1 -0
  77. package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.d.ts +31 -0
  78. package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.js +208 -0
  79. package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.js.map +1 -0
  80. package/src/lib/layout-language/ai-layout-compiler.js +49 -12
  81. package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
  82. package/src/lib/layout-language/ai-layout-design.d.ts +6 -3
  83. package/src/lib/layout-language/ai-layout-design.js +19 -13
  84. package/src/lib/layout-language/ai-layout-design.js.map +1 -1
  85. package/src/lib/layout-language/ai-layout-listings.d.ts +48 -0
  86. package/src/lib/layout-language/ai-layout-listings.js +91 -5
  87. package/src/lib/layout-language/ai-layout-listings.js.map +1 -1
  88. package/src/lib/layout-language/ai-layout-pictures.d.ts +15 -0
  89. package/src/lib/layout-language/ai-layout-pictures.js +6 -2
  90. package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
  91. package/src/lib/model/ai-jobs.types.d.ts +20 -0
  92. package/src/lib/model/ai-jobs.types.js.map +1 -1
  93. package/src/lib/model/ai-site-home-arcs.d.ts +75 -0
  94. package/src/lib/model/ai-site-home-arcs.js +741 -0
  95. package/src/lib/model/ai-site-home-arcs.js.map +1 -0
  96. package/src/lib/model/ai-site-inventory.d.ts +18 -0
  97. package/src/lib/model/ai-site-inventory.js.map +1 -1
  98. package/src/lib/model/ai-site-job.d.ts +9 -6
  99. package/src/lib/model/ai-site-job.js +8 -5
  100. package/src/lib/model/ai-site-job.js.map +1 -1
  101. package/src/lib/model/ai-site-kinds.js +24 -24
  102. package/src/lib/model/ai-site-kinds.js.map +1 -1
  103. package/src/lib/model/ai-site-start-handoff.d.ts +49 -0
  104. package/src/lib/model/ai-site-start-handoff.js +88 -0
  105. package/src/lib/model/ai-site-start-handoff.js.map +1 -0
  106. package/src/lib/model/ai-site-start-steps.d.ts +67 -0
  107. package/src/lib/model/ai-site-start-steps.js +127 -0
  108. package/src/lib/model/ai-site-start-steps.js.map +1 -0
  109. package/src/lib/model/ai-site-start.js +4 -1
  110. package/src/lib/model/ai-site-start.js.map +1 -1
  111. package/src/lib/runtime/ai-doctrine-validators.d.ts +32 -0
  112. package/src/lib/runtime/ai-doctrine-validators.js +119 -2
  113. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
  114. package/src/lib/runtime/ai-doctrine.d.ts +6 -1
  115. package/src/lib/runtime/ai-doctrine.js +9 -5
  116. package/src/lib/runtime/ai-doctrine.js.map +1 -1
  117. package/src/lib/runtime/ai-palette.generated.js +5 -2
  118. package/src/lib/runtime/ai-palette.generated.js.map +1 -1
  119. package/src/lib/runtime/site-inventory.js +6 -0
  120. package/src/lib/runtime/site-inventory.js.map +1 -1
  121. package/src/lib/server/ai-insight-digest-route.js +2 -2
  122. package/src/lib/server/ai-insight-digest-route.js.map +1 -1
  123. package/src/lib/usage/assist-free-taste.js +3 -0
  124. package/src/lib/usage/assist-free-taste.js.map +1 -1
@@ -0,0 +1,741 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * A site start's HOME ARC (AGL-3899): which sections its home page tells
18
+ * its story with, and in what order, chosen in code by the job's seed among
19
+ * the arcs that suit the site's kind.
20
+ *
21
+ * Why. Told one outline for every home ("a hero, then services, about or why
22
+ * us, … a closing call to action last"), the 22 newest production starts of
23
+ * 2026-10-16 were 16 times hero → offer → about → proof → closing call to
24
+ * action, and 19 of them ended on a call to action. Zach: "almost every AI
25
+ * site seems to look the same … they all have the same sections". A theme
26
+ * that varies on a fixed outline still reads as one site.
27
+ *
28
+ * So each kind has a few arcs, each a different way a designer would tell
29
+ * that business's story — the work first, the story first, the steps first,
30
+ * a close on the questions people ask, a gallery of the place, a menu or a
31
+ * services list where the kind has one — and the seed picks one. The plan's
32
+ * turn names it in one line; the model still names, writes and designs every
33
+ * section, and the plan rules hold it as they hold any plan.
34
+ *
35
+ * Every arc is a hero and four sections: the home's fewest
36
+ * (`AI_SITE_HOME_MIN_SECTIONS`), which the Free wall pays for beside the
37
+ * other page, and which a paid plan adds to where the brief gives more. A
38
+ * store's arcs are its storefront's parts (`AI_SITE_STORE_HOME_BANDS`) in
39
+ * three orders, the newsletter sign-up always last, as the storefront settle
40
+ * keeps it (`aiStorefrontPlanScreens`). No
41
+ * arc promises what a new site has not got: figures, prices, listings and
42
+ * shows are "only as the brief gives them", and none plans what customers
43
+ * say (AGL-3887).
44
+ *
45
+ * Pure data and one reader, safe for the console to import.
46
+ */ /** What a section of an arc is for: what the variety specs compare arcs by. */ const s = (role, words)=>({
47
+ role,
48
+ words
49
+ });
50
+ // The parts arcs share, in the plan's words.
51
+ const CTA = s('cta', 'a call to action');
52
+ const FAQ = s('faq', 'the questions people ask, answered');
53
+ const APPROACH = s('approach', 'what working together is like');
54
+ /** The arcs each kind's home may follow; a kind not listed follows `business`'s. */ const ARCS = {
55
+ business: [
56
+ {
57
+ id: 'offer-first',
58
+ sections: [
59
+ s('offer', 'the services'),
60
+ s('why', 'why choose it'),
61
+ s('steps', 'how it works, as steps'),
62
+ CTA
63
+ ]
64
+ },
65
+ {
66
+ id: 'story-first',
67
+ sections: [
68
+ s('story', 'the story behind the business'),
69
+ s('offer', 'the services'),
70
+ APPROACH,
71
+ CTA
72
+ ]
73
+ },
74
+ {
75
+ id: 'steps-first',
76
+ sections: [
77
+ s('steps', 'how it works, as steps'),
78
+ s('offer', 'the services'),
79
+ APPROACH,
80
+ FAQ
81
+ ]
82
+ },
83
+ {
84
+ id: 'work-first',
85
+ sections: [
86
+ s('work', 'the work or results in pictures'),
87
+ s('offer', 'the services'),
88
+ s('why', 'why choose it'),
89
+ FAQ
90
+ ]
91
+ }
92
+ ],
93
+ trades: [
94
+ {
95
+ id: 'offer-first',
96
+ sections: [
97
+ s('offer', 'the services'),
98
+ s('area', 'the area served'),
99
+ s('why', 'why customers can trust it, only as the brief gives it'),
100
+ CTA
101
+ ]
102
+ },
103
+ {
104
+ id: 'trust-first',
105
+ sections: [
106
+ s('why', 'why customers can trust it, only as the brief gives it'),
107
+ s('offer', 'the services'),
108
+ s('steps', 'how a job goes, as steps'),
109
+ FAQ
110
+ ]
111
+ },
112
+ {
113
+ id: 'work-first',
114
+ sections: [
115
+ s('work', 'recent work in pictures'),
116
+ s('offer', 'the services'),
117
+ s('area', 'the area served'),
118
+ CTA
119
+ ]
120
+ },
121
+ {
122
+ id: 'steps-first',
123
+ sections: [
124
+ s('steps', 'how a job goes, as steps'),
125
+ s('offer', 'the services'),
126
+ FAQ,
127
+ CTA
128
+ ]
129
+ }
130
+ ],
131
+ professional: [
132
+ {
133
+ id: 'offer-first',
134
+ sections: [
135
+ s('offer', 'the practice areas'),
136
+ s('steps', 'the approach, as steps'),
137
+ s('people', 'the people behind the practice'),
138
+ CTA
139
+ ]
140
+ },
141
+ {
142
+ id: 'approach-first',
143
+ sections: [
144
+ s('approach', 'the approach and what it means for a client'),
145
+ s('offer', 'the practice areas'),
146
+ FAQ,
147
+ CTA
148
+ ]
149
+ },
150
+ {
151
+ id: 'people-first',
152
+ sections: [
153
+ s('people', 'the people behind the practice'),
154
+ s('offer', 'the practice areas'),
155
+ APPROACH,
156
+ FAQ
157
+ ]
158
+ }
159
+ ],
160
+ wellness: [
161
+ {
162
+ id: 'steps-first',
163
+ sections: [
164
+ s('approach', 'who it helps and how'),
165
+ s('steps', 'what a first visit is like, as steps'),
166
+ s('offer', 'the services'),
167
+ FAQ
168
+ ]
169
+ },
170
+ {
171
+ id: 'offer-first',
172
+ sections: [
173
+ s('offer', 'the services'),
174
+ s('approach', 'the approach to care'),
175
+ s('people', 'the people who give it'),
176
+ CTA
177
+ ]
178
+ },
179
+ {
180
+ id: 'story-first',
181
+ sections: [
182
+ s('story', 'the story of the practice'),
183
+ s('offer', 'the services'),
184
+ s('steps', 'what a first visit is like, as steps'),
185
+ CTA
186
+ ]
187
+ }
188
+ ],
189
+ restaurant: [
190
+ {
191
+ id: 'menu-first',
192
+ sections: [
193
+ s('menu', 'the menu highlights'),
194
+ s('story', 'the story of the place'),
195
+ s('gallery', 'the room and the food in pictures'),
196
+ s('facts', 'visiting, with hours and address only as the brief gives them')
197
+ ]
198
+ },
199
+ {
200
+ id: 'story-first',
201
+ sections: [
202
+ s('story', 'the story of the place'),
203
+ s('menu', 'the menu highlights'),
204
+ s('gallery', 'the room and the food in pictures'),
205
+ CTA
206
+ ]
207
+ },
208
+ {
209
+ id: 'gallery-first',
210
+ sections: [
211
+ s('gallery', 'the food and the room in pictures'),
212
+ s('menu', 'the menu highlights'),
213
+ s('story', 'the story of the place'),
214
+ FAQ
215
+ ]
216
+ },
217
+ {
218
+ id: 'visit-first',
219
+ sections: [
220
+ s('facts', 'visiting, with hours and address only as the brief gives them'),
221
+ s('menu', 'the menu highlights'),
222
+ s('story', 'the story of the place'),
223
+ s('gallery', 'the room and the food in pictures')
224
+ ]
225
+ }
226
+ ],
227
+ store: [
228
+ {
229
+ id: 'bestsellers-first',
230
+ sections: [
231
+ s('products', '"Bestsellers"'),
232
+ s('collections', '"Shop by collection"'),
233
+ s('story', 'the brand story'),
234
+ s('why', 'why buy here'),
235
+ s('reviews', '"Customer reviews"'),
236
+ s('signup', '"Newsletter sign-up"')
237
+ ]
238
+ },
239
+ {
240
+ id: 'collections-first',
241
+ sections: [
242
+ s('collections', '"Shop by collection"'),
243
+ s('products', '"Bestsellers"'),
244
+ s('why', 'why buy here'),
245
+ s('story', 'the brand story'),
246
+ s('reviews', '"Customer reviews"'),
247
+ s('signup', '"Newsletter sign-up"')
248
+ ]
249
+ },
250
+ {
251
+ id: 'story-first',
252
+ sections: [
253
+ s('products', '"Bestsellers"'),
254
+ s('story', 'the brand story'),
255
+ s('collections', '"Shop by collection"'),
256
+ s('reviews', '"Customer reviews"'),
257
+ s('why', 'why buy here'),
258
+ s('signup', '"Newsletter sign-up"')
259
+ ]
260
+ }
261
+ ],
262
+ portfolio: [
263
+ {
264
+ id: 'work-first',
265
+ sections: [
266
+ s('work', 'selected work in pictures'),
267
+ s('story', 'a short about'),
268
+ s('offer', 'what the work is available for, such as commissions'),
269
+ CTA
270
+ ]
271
+ },
272
+ {
273
+ id: 'statement-first',
274
+ sections: [
275
+ s('story', 'a short statement about the work'),
276
+ s('work', 'selected work in pictures'),
277
+ s('steps', 'the process, as steps'),
278
+ CTA
279
+ ]
280
+ },
281
+ {
282
+ id: 'process-led',
283
+ sections: [
284
+ s('work', 'selected work in pictures'),
285
+ s('steps', 'the process, as steps'),
286
+ FAQ,
287
+ s('story', 'a short about')
288
+ ]
289
+ }
290
+ ],
291
+ studio: [
292
+ {
293
+ id: 'work-first',
294
+ sections: [
295
+ s('work', 'selected case studies'),
296
+ s('offer', 'the services, as a short list'),
297
+ s('steps', 'how the studio works, as steps'),
298
+ CTA
299
+ ]
300
+ },
301
+ {
302
+ id: 'beliefs-first',
303
+ sections: [
304
+ s('story', 'what the studio believes'),
305
+ s('work', 'selected case studies'),
306
+ s('offer', 'the services, as a short list'),
307
+ FAQ
308
+ ]
309
+ },
310
+ {
311
+ id: 'offer-first',
312
+ sections: [
313
+ s('offer', 'the services'),
314
+ s('work', 'selected case studies'),
315
+ s('people', 'the team'),
316
+ CTA
317
+ ]
318
+ }
319
+ ],
320
+ photography: [
321
+ {
322
+ id: 'gallery-first',
323
+ sections: [
324
+ s('work', 'galleries by subject'),
325
+ s('story', 'a short personal about'),
326
+ s('steps', 'what a session is like, as steps'),
327
+ CTA
328
+ ]
329
+ },
330
+ {
331
+ id: 'about-first',
332
+ sections: [
333
+ s('story', 'a short personal about'),
334
+ s('work', 'galleries by subject'),
335
+ s('offer', 'the sessions, with packages only as the brief gives them'),
336
+ FAQ
337
+ ]
338
+ },
339
+ {
340
+ id: 'session-first',
341
+ sections: [
342
+ s('steps', 'what a session is like, as steps'),
343
+ s('work', 'galleries by subject'),
344
+ APPROACH,
345
+ CTA
346
+ ]
347
+ }
348
+ ],
349
+ blog: [
350
+ {
351
+ id: 'writing-first',
352
+ sections: [
353
+ s('writing', 'featured writing'),
354
+ s('topics', 'the topics covered'),
355
+ s('story', 'about the writer'),
356
+ CTA
357
+ ]
358
+ },
359
+ {
360
+ id: 'writer-first',
361
+ sections: [
362
+ s('story', 'about the writer'),
363
+ s('writing', 'featured writing'),
364
+ s('topics', 'the topics covered'),
365
+ FAQ
366
+ ]
367
+ },
368
+ {
369
+ id: 'topics-first',
370
+ sections: [
371
+ s('topics', 'the topics covered'),
372
+ s('writing', 'featured writing'),
373
+ s('steps', 'where a new reader starts, as steps'),
374
+ s('story', 'about the writer')
375
+ ]
376
+ }
377
+ ],
378
+ events: [
379
+ {
380
+ id: 'about-first',
381
+ sections: [
382
+ s('story', 'what it is and why to come'),
383
+ s('steps', 'the schedule, as steps'),
384
+ FAQ,
385
+ CTA
386
+ ]
387
+ },
388
+ {
389
+ id: 'schedule-first',
390
+ sections: [
391
+ s('steps', 'the schedule, as steps'),
392
+ s('facts', 'the venue and travel, only as the brief gives them'),
393
+ FAQ,
394
+ CTA
395
+ ]
396
+ },
397
+ {
398
+ id: 'gallery-first',
399
+ sections: [
400
+ s('gallery', 'the place in pictures'),
401
+ s('story', 'what it is and why to come'),
402
+ s('steps', 'the schedule, as steps'),
403
+ FAQ
404
+ ]
405
+ }
406
+ ],
407
+ fitness: [
408
+ {
409
+ id: 'offer-first',
410
+ sections: [
411
+ s('offer', 'the classes or programs'),
412
+ s('steps', 'how to start, as steps'),
413
+ s('people', 'the coaches'),
414
+ CTA
415
+ ]
416
+ },
417
+ {
418
+ id: 'why-first',
419
+ sections: [
420
+ s('why', 'why train here'),
421
+ s('offer', 'the classes or programs'),
422
+ FAQ,
423
+ CTA
424
+ ]
425
+ },
426
+ {
427
+ id: 'steps-first',
428
+ sections: [
429
+ s('steps', 'how to start, as steps'),
430
+ s('offer', 'the classes or programs'),
431
+ s('gallery', 'the space in pictures'),
432
+ FAQ
433
+ ]
434
+ },
435
+ {
436
+ id: 'people-first',
437
+ sections: [
438
+ s('people', 'the coaches'),
439
+ s('offer', 'the classes or programs'),
440
+ s('facts', 'memberships, only as the brief gives them'),
441
+ CTA
442
+ ]
443
+ }
444
+ ],
445
+ yoga: [
446
+ {
447
+ id: 'offer-first',
448
+ sections: [
449
+ s('offer', 'the classes'),
450
+ s('steps', 'what a first class is like, as steps'),
451
+ s('story', 'a gentle about'),
452
+ CTA
453
+ ]
454
+ },
455
+ {
456
+ id: 'story-first',
457
+ sections: [
458
+ s('story', 'the story of the studio'),
459
+ s('offer', 'the classes'),
460
+ s('gallery', 'the space in pictures'),
461
+ FAQ
462
+ ]
463
+ },
464
+ {
465
+ id: 'steps-first',
466
+ sections: [
467
+ s('steps', 'what a first class is like, as steps'),
468
+ s('offer', 'the classes'),
469
+ s('people', 'the teachers'),
470
+ CTA
471
+ ]
472
+ }
473
+ ],
474
+ beauty: [
475
+ {
476
+ id: 'menu-first',
477
+ sections: [
478
+ s('menu', 'the services menu, with prices only as the brief gives them'),
479
+ s('gallery', 'the look and feel of the place in pictures'),
480
+ s('people', 'the team'),
481
+ CTA
482
+ ]
483
+ },
484
+ {
485
+ id: 'gallery-first',
486
+ sections: [
487
+ s('gallery', 'the look and feel of the place in pictures'),
488
+ s('menu', 'the services menu, with prices only as the brief gives them'),
489
+ s('steps', 'what a visit is like, as steps'),
490
+ FAQ
491
+ ]
492
+ },
493
+ {
494
+ id: 'people-first',
495
+ sections: [
496
+ s('people', 'the team'),
497
+ s('menu', 'the services menu, with prices only as the brief gives them'),
498
+ s('gallery', 'the place in pictures'),
499
+ CTA
500
+ ]
501
+ }
502
+ ],
503
+ realestate: [
504
+ {
505
+ id: 'area-first',
506
+ sections: [
507
+ s('area', 'the areas served'),
508
+ s('steps', 'how buying or selling works, as steps'),
509
+ s('work', 'featured listings as picture cards the owner fills in'),
510
+ CTA
511
+ ]
512
+ },
513
+ {
514
+ id: 'people-first',
515
+ sections: [
516
+ s('people', 'about the agent or team'),
517
+ s('area', 'the areas served'),
518
+ FAQ,
519
+ CTA
520
+ ]
521
+ },
522
+ {
523
+ id: 'listings-first',
524
+ sections: [
525
+ s('work', 'featured listings as picture cards the owner fills in'),
526
+ s('area', 'the areas served'),
527
+ s('steps', 'how selling works, as steps'),
528
+ FAQ
529
+ ]
530
+ }
531
+ ],
532
+ education: [
533
+ {
534
+ id: 'offer-first',
535
+ sections: [
536
+ s('offer', 'the courses or subjects'),
537
+ s('steps', 'how it works, as steps'),
538
+ s('people', 'the teachers'),
539
+ FAQ
540
+ ]
541
+ },
542
+ {
543
+ id: 'result-first',
544
+ sections: [
545
+ s('why', 'who it is for and what they come away with'),
546
+ s('offer', 'the courses or subjects'),
547
+ s('approach', 'what a lesson is like'),
548
+ CTA
549
+ ]
550
+ },
551
+ {
552
+ id: 'people-first',
553
+ sections: [
554
+ s('people', 'the teachers'),
555
+ s('offer', 'the courses or subjects'),
556
+ s('steps', 'how enrolling works, as steps'),
557
+ CTA
558
+ ]
559
+ }
560
+ ],
561
+ nonprofit: [
562
+ {
563
+ id: 'work-first',
564
+ sections: [
565
+ s('offer', 'what the organization does'),
566
+ s('facts', 'its impact, only as the brief gives it'),
567
+ s('steps', 'how to help, as steps'),
568
+ CTA
569
+ ]
570
+ },
571
+ {
572
+ id: 'story-first',
573
+ sections: [
574
+ s('story', 'the story of the cause'),
575
+ s('offer', 'the programs'),
576
+ s('steps', 'how to help, as steps'),
577
+ FAQ
578
+ ]
579
+ },
580
+ {
581
+ id: 'help-first',
582
+ sections: [
583
+ s('steps', 'how to help, as steps'),
584
+ s('offer', 'what the organization does'),
585
+ s('gallery', 'the people it serves, in pictures'),
586
+ CTA
587
+ ]
588
+ }
589
+ ],
590
+ music: [
591
+ {
592
+ id: 'listen-first',
593
+ sections: [
594
+ s('listen', 'a listen section'),
595
+ s('work', 'releases or shows, only as the brief gives them'),
596
+ s('story', 'a short bio'),
597
+ CTA
598
+ ]
599
+ },
600
+ {
601
+ id: 'bio-first',
602
+ sections: [
603
+ s('story', 'a short bio'),
604
+ s('listen', 'a listen section'),
605
+ s('gallery', 'the band live in pictures'),
606
+ CTA
607
+ ]
608
+ },
609
+ {
610
+ id: 'shows-first',
611
+ sections: [
612
+ s('work', 'releases or shows, only as the brief gives them'),
613
+ s('listen', 'a listen section'),
614
+ s('gallery', 'the band live in pictures'),
615
+ s('story', 'a short bio')
616
+ ]
617
+ }
618
+ ],
619
+ personal: [
620
+ {
621
+ id: 'offer-first',
622
+ sections: [
623
+ s('offer', 'what they do'),
624
+ s('steps', 'experience or highlights, as steps'),
625
+ s('work', 'selected work, only as the brief names some'),
626
+ CTA
627
+ ]
628
+ },
629
+ {
630
+ id: 'story-first',
631
+ sections: [
632
+ s('story', 'a short story'),
633
+ s('offer', 'what they do'),
634
+ s('steps', 'experience or highlights, as steps'),
635
+ CTA
636
+ ]
637
+ },
638
+ {
639
+ id: 'questions-led',
640
+ sections: [
641
+ s('offer', 'what they do'),
642
+ s('story', 'a short story'),
643
+ FAQ,
644
+ CTA
645
+ ]
646
+ }
647
+ ],
648
+ landing: [
649
+ {
650
+ id: 'benefits-first',
651
+ sections: [
652
+ s('why', 'the benefits'),
653
+ s('steps', 'how it works, as steps'),
654
+ FAQ,
655
+ s('cta', 'the call to action again')
656
+ ]
657
+ },
658
+ {
659
+ id: 'steps-first',
660
+ sections: [
661
+ s('steps', 'how it works, as steps'),
662
+ s('why', 'the benefits'),
663
+ s('approach', 'who it is for'),
664
+ s('cta', 'the call to action again')
665
+ ]
666
+ },
667
+ {
668
+ id: 'problem-first',
669
+ sections: [
670
+ s('story', 'the problem it solves'),
671
+ s('why', 'the benefits'),
672
+ FAQ,
673
+ s('cta', 'the call to action again')
674
+ ]
675
+ }
676
+ ],
677
+ 'coming-soon': [
678
+ {
679
+ id: 'promise-first',
680
+ sections: [
681
+ s('story', 'what is coming'),
682
+ s('why', 'two or three reasons to care'),
683
+ s('people', 'who is behind it'),
684
+ s('cta', 'a way to hear first')
685
+ ]
686
+ },
687
+ {
688
+ id: 'reasons-first',
689
+ sections: [
690
+ s('why', 'two or three reasons to care'),
691
+ s('story', 'what is coming'),
692
+ FAQ,
693
+ s('cta', 'a way to hear first')
694
+ ]
695
+ },
696
+ {
697
+ id: 'people-first',
698
+ sections: [
699
+ s('people', 'who is behind it'),
700
+ s('story', 'what is coming'),
701
+ s('why', 'two or three reasons to care'),
702
+ s('cta', 'a way to hear first')
703
+ ]
704
+ }
705
+ ]
706
+ };
707
+ /** The arcs a kind's home may follow. */ export function aiSiteHomeArcsFor(kind) {
708
+ return kind && ARCS[kind] || ARCS['business'];
709
+ }
710
+ /** A small deterministic generator over a seed (mulberry32). */ function random(seed) {
711
+ let state = seed >>> 0;
712
+ return ()=>{
713
+ state = state + 0x6d2b79f5 >>> 0;
714
+ let t = state;
715
+ t = Math.imul(t ^ t >>> 15, t | 1);
716
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
717
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
718
+ };
719
+ }
720
+ /**
721
+ * The arc a job's home follows: one of its kind's, picked by the job's seed
722
+ * (`aiSiteSeed` of the job id) under a salt of its own, so the arc is drawn
723
+ * apart from the look and the compiler's choices, which read the same seed.
724
+ */ export function aiSiteHomeArc(input) {
725
+ const arcs = aiSiteHomeArcsFor(input.kind);
726
+ const next = random((input.seed ^ 0x51ed2701) >>> 0);
727
+ return arcs[Math.floor(next() * arcs.length) % arcs.length];
728
+ }
729
+ /** An arc's sections as one phrase: "the services, why choose it and a call to action". */ function listed(sections) {
730
+ const words = sections.map((section)=>section.words);
731
+ if (words.length <= 1) return words.join('');
732
+ return `${words.slice(0, -1).join(', ')} and ${words.at(-1)}`;
733
+ }
734
+ /**
735
+ * The plan's one line for its arc: the hero first, then the arc's sections in
736
+ * its order, more only where the brief gives them and the plan has room.
737
+ */ export function aiSiteHomeArcSentence(arc) {
738
+ return `This site's home tells its story in its own order: the hero first, then ${listed(arc.sections)}. Keep that order, name each section for what this business has to say there, and add a section the brief needs only where the plan has room.`;
739
+ }
740
+
741
+ //# sourceMappingURL=ai-site-home-arcs.js.map