@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.
- package/package.json +18 -18
- package/src/lib/assets/site-styles/beauty.webp +0 -0
- package/src/lib/assets/site-styles/blog.webp +0 -0
- package/src/lib/assets/site-styles/business.webp +0 -0
- package/src/lib/assets/site-styles/coming-soon.webp +0 -0
- package/src/lib/assets/site-styles/education.webp +0 -0
- package/src/lib/assets/site-styles/events.webp +0 -0
- package/src/lib/assets/site-styles/fitness.webp +0 -0
- package/src/lib/assets/site-styles/landing.webp +0 -0
- package/src/lib/assets/site-styles/music.webp +0 -0
- package/src/lib/assets/site-styles/nonprofit.webp +0 -0
- package/src/lib/assets/site-styles/personal.webp +0 -0
- package/src/lib/assets/site-styles/photography.webp +0 -0
- package/src/lib/assets/site-styles/portfolio.webp +0 -0
- package/src/lib/assets/site-styles/professional.webp +0 -0
- package/src/lib/assets/site-styles/realestate.webp +0 -0
- package/src/lib/assets/site-styles/restaurant.webp +0 -0
- package/src/lib/assets/site-styles/store.webp +0 -0
- package/src/lib/assets/site-styles/studio.webp +0 -0
- package/src/lib/assets/site-styles/trades.webp +0 -0
- package/src/lib/assets/site-styles/wellness.webp +0 -0
- package/src/lib/assets/site-styles/yoga.webp +0 -0
- package/src/lib/components/ai-job-site.d.ts +8 -1
- package/src/lib/components/ai-job-site.js +7 -0
- package/src/lib/components/ai-job-site.js.map +1 -1
- package/src/lib/components/ai-site-build-page.component.js +37 -0
- package/src/lib/components/ai-site-build-page.component.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.d.ts +12 -0
- package/src/lib/components/ai-site-start-card.component.js +279 -240
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-site-start-steps.component.d.ts +114 -0
- package/src/lib/components/ai-site-start-steps.component.js +480 -0
- package/src/lib/components/ai-site-start-steps.component.js.map +1 -0
- package/src/lib/components/ai-site-start-tracking.d.ts +122 -0
- package/src/lib/components/ai-site-start-tracking.js +296 -0
- package/src/lib/components/ai-site-start-tracking.js.map +1 -0
- package/src/lib/components/ai-site-style-previews.d.ts +26 -0
- package/src/lib/components/ai-site-style-previews.js +115 -0
- package/src/lib/components/ai-site-style-previews.js.map +1 -0
- package/src/lib/components/assist-jobs-drawer.component.js +24 -2
- package/src/lib/components/assist-jobs-drawer.component.js.map +1 -1
- package/src/lib/insights/ai-insight-digest.d.ts +9 -0
- package/src/lib/insights/ai-insight-digest.js +35 -11
- package/src/lib/insights/ai-insight-digest.js.map +1 -1
- package/src/lib/jobs/ai-empty-site-sweep.d.ts +154 -0
- package/src/lib/jobs/ai-empty-site-sweep.js +346 -0
- package/src/lib/jobs/ai-empty-site-sweep.js.map +1 -0
- package/src/lib/jobs/ai-job-page-language.d.ts +9 -0
- package/src/lib/jobs/ai-job-page-language.js +20 -2
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +43 -8
- package/src/lib/jobs/ai-job-plan-step.js +99 -18
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-datasets.d.ts +82 -1
- package/src/lib/jobs/ai-job-site-datasets.js +276 -14
- package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
- package/src/lib/jobs/ai-jobs-beat.d.ts +11 -3
- package/src/lib/jobs/ai-jobs-beat.js +23 -6
- package/src/lib/jobs/ai-jobs-beat.js.map +1 -1
- package/src/lib/jobs/ai-jobs.js +46 -7
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +143 -10
- package/src/lib/jobs/ai-layout-stock-photos.js +1046 -102
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
- package/src/lib/jobs/fixtures/ai-site-foreign-datasets-recording.d.ts +58 -0
- package/src/lib/jobs/fixtures/ai-site-foreign-datasets-recording.js +678 -0
- package/src/lib/jobs/fixtures/ai-site-foreign-datasets-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-beta265-recordings.d.ts +33 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-beta265-recordings.js +270 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-beta265-recordings.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-people-recordings.d.ts +33 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-people-recordings.js +277 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3856-people-recordings.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3923-recordings.d.ts +35 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3923-recordings.js +379 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3923-recordings.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.d.ts +31 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.js +208 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.js.map +1 -0
- package/src/lib/layout-language/ai-layout-compiler.js +49 -12
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-design.d.ts +6 -3
- package/src/lib/layout-language/ai-layout-design.js +19 -13
- package/src/lib/layout-language/ai-layout-design.js.map +1 -1
- package/src/lib/layout-language/ai-layout-listings.d.ts +48 -0
- package/src/lib/layout-language/ai-layout-listings.js +91 -5
- package/src/lib/layout-language/ai-layout-listings.js.map +1 -1
- package/src/lib/layout-language/ai-layout-pictures.d.ts +15 -0
- package/src/lib/layout-language/ai-layout-pictures.js +6 -2
- package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +20 -0
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-site-home-arcs.d.ts +75 -0
- package/src/lib/model/ai-site-home-arcs.js +741 -0
- package/src/lib/model/ai-site-home-arcs.js.map +1 -0
- package/src/lib/model/ai-site-inventory.d.ts +18 -0
- package/src/lib/model/ai-site-inventory.js.map +1 -1
- package/src/lib/model/ai-site-job.d.ts +9 -6
- package/src/lib/model/ai-site-job.js +8 -5
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-kinds.js +24 -24
- package/src/lib/model/ai-site-kinds.js.map +1 -1
- package/src/lib/model/ai-site-start-handoff.d.ts +49 -0
- package/src/lib/model/ai-site-start-handoff.js +88 -0
- package/src/lib/model/ai-site-start-handoff.js.map +1 -0
- package/src/lib/model/ai-site-start-steps.d.ts +67 -0
- package/src/lib/model/ai-site-start-steps.js +127 -0
- package/src/lib/model/ai-site-start-steps.js.map +1 -0
- package/src/lib/model/ai-site-start.js +4 -1
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +32 -0
- package/src/lib/runtime/ai-doctrine-validators.js +119 -2
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.d.ts +6 -1
- package/src/lib/runtime/ai-doctrine.js +9 -5
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-palette.generated.js +5 -2
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/runtime/site-inventory.js +6 -0
- package/src/lib/runtime/site-inventory.js.map +1 -1
- package/src/lib/server/ai-insight-digest-route.js +2 -2
- package/src/lib/server/ai-insight-digest-route.js.map +1 -1
- package/src/lib/usage/assist-free-taste.js +3 -0
- 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
|