PageSourceSearch

https://www.taurist.com/notes

html taurist.com collected 2026-10-08 20:47:30 UTC 91,814 bytes, 1,451 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1">
6<title>Notes | Taurist Technologies</title>
7<meta name="description" content="Field notes from Taurist Technologies on conversion, websites, AI workers, and the systems behind them.">
8
9<link rel="stylesheet" href="/hub-static/_ds/taurist-design-system-fba79875-878c-4f33-b84e-e049ab6486a9/assets/fonts/fonts.css">
10<link rel="stylesheet" href="/hub-static/_ds/taurist-design-system-fba79875-878c-4f33-b84e-e049ab6486a9/tokens/colors.css">
11<link rel="stylesheet" href="/hub-static/_ds/taurist-design-system-fba79875-878c-4f33-b84e-e049ab6486a9/tokens/typography.css">
12<link rel="stylesheet" href="/hub-static/_ds/taurist-design-system-fba79875-878c-4f33-b84e-e049ab6486a9/tokens/spacing.css">
13<link rel="stylesheet" href="/hub-static/_ds/taurist-design-system-fba79875-878c-4f33-b84e-e049ab6486a9/tokens/effects.css">
14<link rel="stylesheet" href="/hub-static/styles.css">
15
16<style>
17  /* ============================================================
18     FIELD NOTES — Taurist editorial index, recent-news layout.
19     Smaller masthead, text tabs + view toggle, a featured block
20     (1 large + 3 stacked), then a chronological grid/list.
21     Everything scoped under .fn so it never collides with styles.css.
22     ============================================================ */
23  .fn {
24    --acc-cw: #F22248;   /* Conversion Works — red    */
25    --acc-sw: #F26422;   /* Siteworks        — orange */
26    --acc-wk: #F222B0;   /* Workers          — magenta*/
27    --acc-co: #7C3CE0;   /* Company          — violet */
28    --panel: rgba(255,255,255,0.035);
29    --panel-2: rgba(255,255,255,0.06);
30    --hair: var(--on-ink-hair);
31    --col: 1216px;
32    position: relative;
33    min-height: 100vh;
34    color: var(--on-ink);
35    background: var(--ink);
36    overflow-x: clip;
37  }
38  .fn::before {
39    content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none;
40    background:
41      radial-gradient(46% 32% at 88% -6%, rgba(242,34,176,0.12), transparent 70%),
42      radial-gradient(40% 30% at 6% 2%, rgba(124,60,224,0.10), transparent 72%);
43  }
44  .fn > * { position: relative; z-index: 1; }
45  .fn a { color: inherit; text-decoration: none; }
46  .fn-wrap { max-width: var(--col); margin: 0 auto; padding: 0 var(--gutter); }
47
48  /* ---------- masthead ---------- */
49  .fn-top { padding: clamp(40px, 6vh, 72px) 0 clamp(20px, 2.6vw, 30px); }
50  .fn-top__eyebrow {
51    font-size: 12px; font-weight: 600; letter-spacing: 0.2em; text-transform: uppercase;
52    color: var(--on-ink-faint); margin: 0 0 14px;
53    display: inline-flex; align-items: center; gap: 10px;
54  }
55  .fn-top__eyebrow .spark { width: 18px; height: 1px; background: linear-gradient(90deg, var(--c-red), var(--c-orange)); }
56  .fn-top h1 {
57    margin: 0; font-weight: 600; letter-spacing: -0.03em; line-height: 1.02;
58    font-size: clamp(30px, 4vw, 50px); color: #fff;
59  }
60
61  /* ---------- tab bar + view toggle (sticky double-nav) ---------- */
62  .fn-barwrap {
63    position: sticky; top: var(--site-nav-h, 61px); z-index: 45;
64    background: rgba(5,5,5,0.72);
65    backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
66    border-bottom: 1px solid var(--hair);
67    transition: box-shadow 0.25s var(--ease), background 0.25s var(--ease);
68  }
69  .fn-barwrap.is-stuck { background: rgba(4,4,4,0.86); box-shadow: 0 18px 40px -28px rgba(0,0,0,0.9); }
70  .fn-bar {
71    display: flex; align-items: center; gap: 18px;
72    padding-block: 13px;
73  }
74  .fn-content { padding-top: clamp(28px, 3.6vw, 42px); }
75  .fn-tabs { display: flex; align-items: center; gap: clamp(14px, 1.8vw, 30px); overflow-x: auto; scrollbar-width: none; }
76  .fn-tabs::-webkit-scrollbar { display: none; }
77  .fn-tab {
78    background: none; border: 0; cursor: pointer; font: inherit;
79    font-size: 15px; font-weight: 500; letter-spacing: -0.01em;
80    color: var(--on-ink-faint); white-space: nowrap; padding: 2px 0; position: relative;
81    transition: color 0.2s var(--ease);
82  }
83  .fn-tab:hover { color: var(--on-ink-soft); }
84  .fn-tab.is-active { color: #fff; font-weight: 600; }
85  .fn-bar__spacer { flex: 1 1 auto; }
86  .fn-view { display: inline-flex; align-items: center; gap: 4px; flex: none; }
87  .fn-view button {
88    width: 34px; height: 34px; border-radius: 9px; cursor: pointer;
89    border: 1px solid transparent; background: none; color: var(--on-ink-faint);
90    display: inline-flex; align-items: center; justify-content: center;
91    transition: color 0.2s var(--ease), background 0.2s var(--ease), border-color 0.2s var(--ease);
92  }
93  .fn-view button:hover { color: var(--on-ink); }
94  .fn-view button.is-active { color: #fff; background: var(--panel-2); border-color: var(--hair); }
95
96  /* ---------- featured block ---------- */
97  .fn-feat { display: grid; grid-template-columns: 1.55fr 1fr; gap: clamp(24px, 2.6vw, 40px); align-items: start; margin-bottom: clamp(48px, 6vh, 84px); }
98  .fn-feat__side { display: flex; flex-direction: column; gap: clamp(26px, 2.8vw, 38px); }
99
100  .fn-lead {
101    display: flex; flex-direction: column;
102    position: sticky; top: calc(var(--site-nav-h, 61px) + 70px); align-self: start;
103  }
104  .fn-lead__cover {
105    position: relative; border-radius: 16px; overflow: hidden;
106    aspect-ratio: 16 / 10; border: 1px solid var(--hair);
107    background-size: cover; background-position: center;
108  }
109  .fn-lead__title {
110    margin: clamp(18px, 1.8vw, 24px) 0 0; font-weight: 600; letter-spacing: -0.025em;
111    line-height: 1.06; font-size: clamp(26px, 3vw, 42px); color: #fff; text-wrap: balance;
112  }
113  .fn-lead__meta { margin: clamp(12px, 1.2vw, 16px) 0 0; }
114
115  .fn-side { display: flex; flex-direction: column; }
116  .fn-side__cover {
117    position: relative; border-radius: 14px; overflow: hidden; aspect-ratio: 16 / 10;
118    border: 1px solid var(--hair); transition: transform 0.3s var(--ease), border-color 0.3s var(--ease);
119    background-size: cover; background-position: center;
120  }
121  .fn-side:hover .fn-side__cover, .fn-lead__cover:hover { border-color: color-mix(in srgb, var(--acc) 55%, transparent); }
122  .fn-side:hover .fn-side__cover { transform: translateY(-3px); }
123  .fn-side__body { display: flex; flex-direction: column; gap: 9px; padding-top: clamp(12px, 1.2vw, 16px); }
124  .fn-side__title { font-weight: 600; letter-spacing: -0.02em; line-height: 1.16; font-size: clamp(16px, 1.3vw, 19px); color: #fff; text-wrap: balance; }
125
126  /* shared meta line */
127  .fn-meta { display: inline-flex; align-items: center; gap: 9px; font-size: 13px; color: var(--on-ink-faint); white-space: nowrap; flex-wrap: wrap; }
128  .fn-meta .cat { display: inline-flex; align-items: center; gap: 7px; color: var(--on-ink-soft); font-weight: 600; }
129  .fn-meta .cat .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--acc); box-shadow: 0 0 8px var(--acc); }
130  .fn-meta .sep { width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: 0.6; }
131
132  /* ---------- section heading for filtered views ---------- */
133  .fn-sechead { display: none; align-items: baseline; gap: 14px; margin: 0 0 clamp(22px, 2.6vw, 30px); }
134  .fn-sechead.show { display: flex; }
135  .fn-sechead h2 { margin: 0; font-weight: 600; font-size: clamp(22px, 2.4vw, 30px); letter-spacing: -0.025em; color: #fff; display: inline-flex; align-items: center; gap: 11px; }
136  .fn-sechead h2 .dot { width: 11px; height: 11px; border-radius: 50%; background: var(--acc); box-shadow: 0 0 12px var(--acc); }
137  .fn-sechead span { font-size: 14px; color: var(--on-ink-faint); }
138
139  .fn-morehead { font-size: 13px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--on-ink-faint); margin: 0 0 clamp(20px, 2.2vw, 28px); }
140
141  /* ---------- the grid / list of notes ---------- */
142  .fn-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(28px, 3vw, 44px) clamp(20px, 2vw, 28px); }
143
144  .fn-card { display: flex; flex-direction: column; }
145  .fn-card__cover {
146    position: relative; border-radius: 14px; overflow: hidden; aspect-ratio: 4 / 3;
147    border: 1px solid var(--hair); transition: transform 0.3s var(--ease), border-color 0.3s var(--ease);
148    background-size: cover; background-position: center;
149  }
150  .fn-card:hover .fn-card__cover { transform: translateY(-3px); border-color: color-mix(in srgb, var(--acc) 55%, transparent); }
151  .fn-card__body { display: flex; flex-direction: column; gap: 10px; padding-top: 16px; }
152  .fn-card__title { margin: 0; font-weight: 600; letter-spacing: -0.02em; line-height: 1.18; font-size: clamp(17px, 1.4vw, 20px); color: #fff; text-wrap: balance; }
153  .fn-card__ex { display: none; font-size: 14.5px; line-height: 1.55; color: var(--on-ink-soft); max-width: 62ch; }
154  .fn-card__arrow { display: none; }
155  .fn-card__date, .fn-card__brand { display: none; }
156
157  /* LIST VIEW — table: date · brand · title+desc · arrow */
158  .fn-listhead {
159    display: none;
160    grid-template-columns: var(--list-cols, 132px 188px 1fr 52px);
161    gap: clamp(16px, 2vw, 34px);
162    padding: 0 clamp(4px, 0.8vw, 12px) 11px;
163    border-bottom: 1px solid var(--hair);
164  }
165  .fn-listhead.show { display: grid; }
166  .fn-listhead span { font-size: 11.5px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--on-ink-faint); }
167
168  .fn-grid.is-list { display: block; }
169  .fn-grid.is-list .fn-card {
170    display: grid;
171    grid-template-columns: var(--list-cols, 132px 188px 1fr 52px);
172    align-items: center; gap: clamp(16px, 2vw, 34px);
173    padding: 13px clamp(4px, 0.8vw, 12px);
174    border-bottom: 1px solid var(--hair);
175    transition: background 0.2s var(--ease), padding-left 0.2s var(--ease);
176  }
177  .fn-grid.is-list .fn-card:hover { background: var(--panel); padding-left: clamp(12px, 1.4vw, 20px); }
178  .fn-grid.is-list .fn-card__cover { display: none; }
179  .fn-grid.is-list .fn-card .fn-meta { display: none; }
180  .fn-grid.is-list .fn-card__date { display: block; font-size: 14px; color: var(--on-ink-faint); white-space: nowrap; letter-spacing: 0.01em; }
181  .fn-grid.is-list .fn-card__brand {
182    display: inline-flex; align-items: center; gap: 8px;
183    font-size: 14px; font-weight: 500; letter-spacing: -0.005em; color: var(--on-ink-soft); min-width: 0;
184  }
185  .fn-grid.is-list .fn-card__brand .dot { width: 8px; height: 8px; flex: none; border-radius: 50%; background: var(--acc); box-shadow: 0 0 9px var(--acc); }
186  .fn-grid.is-list .fn-card__brand span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
187  .fn-grid.is-list .fn-card__body { display: block; min-width: 0; padding-top: 0; }
188  .fn-grid.is-list .fn-card__title { font-size: 15px; font-weight: 400; line-height: 1.4; color: rgba(255,255,255,0.92); letter-spacing: -0.005em; }
189  .fn-grid.is-list .fn-card:hover .fn-card__title { color: #fff; }
190  .fn-grid.is-list .fn-card__ex { display: none; }
191  .fn-grid.is-list .fn-card__arrow {
192    display: inline-flex; align-items: center; justify-content: center; justify-self: end; flex: none;
193    width: 30px; height: 30px; color: var(--on-ink-faint); opacity: 0;
194    transition: color 0.2s var(--ease), opacity 0.2s var(--ease), transform 0.2s var(--ease);
195  }
196  .fn-grid.is-list .fn-card:hover .fn-card__arrow { color: #fff; opacity: 1; transform: translateX(2px); }
197
198  .fn-empty { display: none; padding: 60px 0; text-align: center; color: var(--on-ink-faint); font-size: 15px; }
199
200  .fn-section { padding-bottom: clamp(60px, 8vh, 110px); }
201
202  /* ---------- newsletter ---------- */
203  .fn-news { margin: 0 0 clamp(56px, 8vh, 96px); }
204  .fn-news__card {
205    position: relative; overflow: hidden; border: 1px solid var(--hair); border-radius: 24px;
206    padding: clamp(34px, 5vw, 60px);
207    background: linear-gradient(120deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02));
208    display: grid; grid-template-columns: 1.1fr 0.9fr; gap: clamp(28px, 4vw, 56px); align-items: center;
209  }
210  .fn-news__card::before {
211    content: ""; position: absolute; inset: 0; pointer-events: none;
212    background: radial-gradient(60% 120% at 100% 0%, rgba(242,34,176,0.18), transparent 60%),
213               radial-gradient(50% 120% at 0% 100%, rgba(242,100,34,0.14), transparent 60%);
214  }
215  .fn-news__card > * { position: relative; }
216  .fn-news h2 { margin: 0; font-weight: 600; font-size: clamp(24px, 3vw, 38px); letter-spacing: -0.03em; line-height: 1.04; text-wrap: balance; color: #fff; }
217  .fn-news p { margin: 14px 0 0; font-size: clamp(15px, 1.4vw, 17px); line-height: 1.6; color: var(--on-ink-soft); max-width: 44ch; }
218  .fn-news p a { color: #fff; text-decoration: underline; text-underline-offset: 4px; }
219  .fn-form { display: flex; flex-direction: column; gap: 12px; }
220  .fn-form__row { display: flex; gap: 10px; }
221  .fn-form input {
222    flex: 1 1 auto; min-width: 0; height: 52px; padding: 0 18px; border-radius: 13px;
223    border: 1px solid var(--hair); background: rgba(0,0,0,0.4); color: var(--on-ink);
224    font: inherit; font-size: 15px; transition: border-color 0.2s var(--ease);
225  }
226  .fn-form input::placeholder { color: var(--on-ink-faint); }
227  .fn-form input:focus { outline: none; border-color: rgba(242,34,72,0.55); }
228  .fn-form input[aria-invalid="true"] { border-color: rgba(242,34,72,0.78); }
229  .fn-form button {
230    position: relative; overflow: hidden;
231    flex: none; height: 52px; padding: 0 26px; border: 0; border-radius: var(--cta-radius); cursor: pointer;
232    font: inherit; font-size: 15px; font-weight: 600; color: #fff;
233    background: linear-gradient(-86deg, #F26422, #F22248 52%, #F222B0);
234    box-shadow: 0 12px 34px -14px rgba(242,34,72,0.7);
235    transition: transform 0.2s var(--ease), filter 0.2s var(--ease);
236  }
237  .fn-form button:hover:not(:disabled) { transform: translateY(-1px);
237 filter: brightness(1.06) saturate(1.08); }
238  .fn-form button:active { transform: translateY(0) scale(0.985); }
239  .fn-form button:disabled { cursor: not-allowed; opacity: 0.52; box-shadow: none; }
240  .fn-form button::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; z-index: 0; opacity: 0; transition: opacity 0.3s var(--ease); background: radial-gradient(150px 150px at var(--mx, 50%) var(--my, 50%), rgba(255,243,180,0.95), rgba(238,201,54,0.55) 38%, rgba(255,200,80,0) 72%); mix-blend-mode: screen; }
241  .fn-form button:hover:not(:disabled)::after, .fn-form button:focus-visible:not(:disabled)::after { opacity: 1; }
242  .fn-form button > span { position: relative; z-index: 1; }
243  .fn-form__note { font-size: 12.5px; line-height: 1.55; color: var(--on-ink-faint); }
244  .fn-form__note a { color: var(--on-ink-soft); text-decoration: underline; text-underline-offset: 3px; }
245  .fn-form__verify { min-height: 65px; }
246  .fn-form__field-error, .fn-form__error, .fn-form__config {
247    font-size: 13px; line-height: 1.45; color: #ff8a9f;
248  }
249  .fn-form__error { outline: none; }
250  .fn-form__ok {
251    padding: 16px 18px; border: 1px solid rgba(238,201,54,0.28); border-radius: 13px;
252    background: rgba(238,201,54,0.07); color: var(--on-ink-soft);
253  }
254  .fn-form__ok strong { display: block; margin-bottom: 5px; color: var(--c-yellow); font-size: 15px; }
255  .fn-form__ok span { display: block; font-size: 13.5px; line-height: 1.5; }
256  .newsletter-hp {
257    position: absolute !important; width: 1px !important; height: 1px !important;
258    padding: 0 !important; margin: -1px !important; overflow: hidden !important;
259    clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important;
260  }
261  .fn-form [hidden] { display: none !important; }
262
263  /* ---------- footer (shared — see site-foot.js + styles.css) ---------- */
264
265  /* ============================================================ RESPONSIVE */
266  @media (max-width: 980px) {
267    .fn-feat { grid-template-columns: 1fr; }
268    .fn-lead { position: static; }
269    .fn-feat__side { flex-direction: row; }
270    .fn-feat__side > .fn-side { flex: 1 1 0; min-width: 0; }
271    .fn-news__card { grid-template-columns: 1fr; }
272  }
273  @media (max-width: 900px) {
274    .fn-listhead, .fn-grid.is-list .fn-card { --list-cols: 100px 144px 1fr 44px; gap: clamp(12px, 1.6vw, 22px); }
275  }
276  @media (max-width: 760px) {
277    .fn-grid { grid-template-columns: repeat(2, 1fr); }
278    .fn-feat__side { flex-direction: column; }
279  }
280  @media (max-width: 600px) {
281    .fn-grid { grid-template-columns: 1fr; }
282    .fn-form__row { flex-direction: column; }
283    .fn-form button { width: 100%; }
284    .fn-listhead { display: none !important; }
285
286    /* tabs and the view toggle stack onto separate lines */
287    .fn-bar { flex-direction: column; align-items: stretch; gap: 12px; }
288    .fn-bar__spacer { display: none; }
289    .fn-view { align-self: flex-end; }
290    .fn-tab { font-size: 14px; }
291
292    /* list view: brand + date share a line, title beneath */
293    .fn-grid.is-list .fn-card {
294      grid-template-columns: max-content 1fr;
295      column-gap: 12px; row-gap: 6px;
296      align-items: baseline;
297      padding-block: 14px;
298    }
299    .fn-grid.is-list .fn-card__arrow { display: none; }
300    .fn-grid.is-list .fn-card__brand { grid-column: 1; grid-row: 1; font-size: 13px; }
301    .fn-grid.is-list .fn-card__date  { grid-column: 2; grid-row: 1; justify-self: start; font-size: 13px; }
302    .fn-grid.is-list .fn-card__body  { grid-column: 1 / -1; grid-row: 2; }
303  }
304</style>
305<link rel="icon" href="/taurist-mark.png">
306<link rel="canonical" href="https://www.taurist.com/notes">
307<meta property="og:url" content="https://www.taurist.com/notes">
308<meta property="og:title" content="Notes | Taurist Technologies">
309<meta property="og:description" content="Field notes from Taurist Technologies on conversion, websites, AI workers, and the systems behind them.">
310<meta property="og:image" content="https://www.taurist.com/taurist-mark.png">
311<meta property="og:type" content="website">
312<meta property="og:site_name" content="Taurist Technologies">
313<meta name="twitter:card" content="summary_large_image">
314<meta name="twitter:title" content="Notes | Taurist Technologies">
315<meta name="twitter:description" content="Field notes from Taurist Technologies on conversion, websites, AI workers, and the systems behind them.">
316<meta name="twitter:image" content="https://www.taurist.com/taurist-mark.png">
317<script type="application/ld+json" id="taurist-jsonld">{
318  "@context": "https://schema.org",
319  "@graph": [
320    {
321      "@type": "Organization",
322      "@id": "https://www.taurist.com/#organization",
323      "name": "Taurist Technologies",
324      "legalName": "Taurist Technologies Inc.",
325      "url": "https://www.taurist.com",
326      "logo": "https://www.taurist.com/taurist-mark.png",
327      "address": {
328        "@type": "PostalAddress",
329        "streetAddress": "1585 Springfield Ave, Suite 2",
330        "addressLocality": "Maplewood",
331        "addressRegion": "NJ",
332        "addressCountry": "US"
333      },
334      "sameAs": [
335        "https://www.linkedin.com/company/taurist/",
336        "https://x.com/taurist_"
337      ],
338      "brand": [
339        {
340          "@type": "Brand",
341          "name": "Conversion Works",
342          "url": "https://www.taurist.com/conversion"
343        },
344        {
345          "@type": "Brand",
346          "name": "Siteworks",
347          "url": "https://www.taurist.com/siteworks"
348        },
349        {
350          "@type": "Brand",
351          "name": "Workers",
352          "url": "https://www.taurist.com/workers"
353        },
354        {
355          "@type": "Brand",
356          "name": "/cro",
357          "url": "https://www.taurist.com/cro"
358        }
359      ]
360    },
361    {
362      "@type": "WebSite",
363      "@id": "https://www.taurist.com/#website",
364      "name": "Taurist Technologies",
365      "url": "https://www.taurist.com",
366      "publisher": {
367        "@id": "https://www.taurist.com/#organization"
368      }
369    },
370    {
371      "@type": "Blog",
372      "@id": "https://www.taurist.com/notes#webpage",
373      "url": "https://www.taurist.com/notes",
374      "name": "Notes | Taurist Technologies",
375      "description": "Field notes from Taurist Technologies on conversion, websites, AI workers, and the systems behind them.",
376      "isPartOf": {
377        "@id": "https://www.taurist.com/#website"
378      },
379      "publisher": {
380        "@id": "https://www.taurist.com/#organization"
381      }
382    }
383  ]
384}</script>
vendor: 1 bytes, line 384
384
385<script>window.TAURIST_NEWSLETTER_CONFIG={
386  "turnstileSiteKey": "0x4AAAAAAD6mjiN89anR3VUg"
387};</script>
387
388<meta name="facebook-domain-verification" content="8ydtuyieiq8ieej0o2gvaces7timge" />
389<script src="/hub-static/dw-consent.js"></script>
vendor: 1 bytes, line 389
389
390<script>
vendor: 323 bytes, line 390
390(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
390GTM-598V8RJP
vendor: 3 bytes, line 390
390');
390</script>
vendor: 1 bytes, line 390
390
391<script src="/hub-static/dw-track.js"></script>
vendor: 1 bytes, line 391
391
392<script src="/hub-static/dw-attribution.js"></script>
vendor: 1 bytes, line 392
392
393<script defer src="https://dataworks-ingest-production.taurist.workers.dev/dw.js" data-site="taurist-com" data-api="https://dataworks-ingest-production.taurist.workers.dev"></script>
393
394</head>
395<body>
vendor: 68 bytes, lines 395-396
395
396<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
396GTM-598V8RJP
vendor: 83 bytes, line 396
396" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
397<noscript><section class="taurist-crawl-copy"><h2>Latest Taurist Notes</h2><p>Field notes from Taurist Technologies on conversion, websites, AI workers, and the systems behind them.</p><ul><li><a href="/notes/verifiable-product-page-claims">Can shoppers verify the claims on your product page?</a> - Match product-page claims to relevant tests and certifications, explain their limits, and assess shopper understanding before claiming a commercial benefit.</li><li><a href="/notes/product-page-delivery-estimates">What should shoppers understand about when an order will arrive?</a> - A practical guide to arrival dates, operational inputs, useful fallbacks and maintaining delivery estimates across the purchase journey.</li><li><a href="/notes/customer-research-premium-ecommerce">Customer research for premium ecommerce: what to learn beyond income</a> - Learn what premium shoppers need beyond demographic profiles. Turn purchase stories, alternatives and constraints into product-page hypotheses you can assess.</li><li><a href="/notes/product-bundle-strategy">Does your product bundle solve a customer problem—or just add more products?</a> - Build useful product bundles around customer needs. Compare kits, quantity packs and add-ons, then check contribution, inventory and returns before scaling.</li><li><a href="/notes/explaining-ai-assisted-service-delivery">What should customers understand when AI helps deliver a service?</a> - An AI label leaves practical questions unanswered. Explain what the service does, which decisions it can make, and who is responsible when a customer needs help.</li><li><a href="/notes/low-traffic-store-conversion-decisions">How to improve a low-traffic store without overstating the results</a> - Match the evidence to the decision: verify a failure before repairing it, observe realistic tasks to investigate confusion, and assess experiment feasibility before claiming sales lift.</li><li><a href="/notes/free-shipping-threshold">How should you set a free-shipping threshold?</a> - Choose a free-shipping threshold using basket values, margins and fulfillment costs. Learn how to test contribution, conversion and returns before changing it.</li><li><a href="/notes/product-page-reviews-placement">Where should product-page reviews go—and what should shoppers be able to verify?</a> - Make review evidence easy to find and inspect. Link a concise rating-and-count summary to the full reviews, preserve relevant context, and test whether the position supports the shopper’s decision and your business outcome.</li><li><a href="/notes/ai-worker-tool-change-revalidation">What should you recheck when an AI Worker's connected tool changes?</a> - A practical change record for maintaining an AI Worker's job when connected tools, fields or permissions change.</li><li><a href="/notes/service-website-redesign-redirect-map">What happens to old URLs when your service website is redesigned?</a> - A redesigned site needs a plan for the links customers already have. Here is what to ask your team to preserve, test, and hand over before launch.</li><li><a href="/notes/service-website-process-page">What should your service website explain about working together?</a> - Help prospective clients understand their role, the work they receive and the dependencies that shape a service engagement.</li><li><a href="/notes/accessible-service-contact-forms">Can people complete your service website’s contact form?</a> - Review your service website’s contact form for clear labels, keyboard access, useful errors and truthful confirmation, with practical checks for your builder.</li><li><a href="/notes/temporarily-out-of-stock-product-page">What should a product page do when an item is temporarily out of stock?</a> - Help shoppers choose what to do when a product is temporarily out of stock, with honest timing, backorders, restock alerts and suitable available alternatives.</li><li><a href="/notes/credible-client-proof-service-websites">What counts as credible client proof on a service website?</a> - A practical guide to choosing, explaining, and maintaining client proof on a service website, without overstating what it establishes.</li><li><a href="/notes/questions-to-ask-an-ai-agency">Your agency uses AI. What should you ask before hiring them?</a>
397 - Practical questions and evidence to discuss before hiring an agency that uses AI for website, marketing or operational work.</li><li><a href="/notes/what-should-ai-worker-do-when-tool-goes-down">What should an AI Worker do when a tool goes down?</a> - How an AI Worker can continue unaffected work, retain the context of blocked tasks, and recover under the direction of its designated owner.</li><li><a href="/notes/ai-search-visibility-to-qualified-leads">How can a service business tell whether AI search brings qualified inquiries?</a> - Measure AI-search visibility, visits and qualified inquiries with current Google and Bing reports, practical lead records and clear limits on attribution.</li><li><a href="/notes/what-does-an-ai-worker-cost-to-run">What does an AI Worker cost to run?</a> - A Taurist AI Worker averages around $25,000 for a full year, including token usage, for a business role with connected responsibilities and ongoing operation.</li><li><a href="/notes/bfcm-offer-value-and-price-clarity">Can shoppers tell what your Black Friday offer is actually worth?</a> - Review Black Friday offer tests, clarify prices and bundle contents, and plan a CRO experiment that considers purchases, costs and returns for your store.</li><li><a href="/notes/bfcm-express-checkout-high-consideration">Should you add express checkout to a high-ticket product page before Black Friday?</a> - Review express-checkout tests for high-ticket products, spot where customers get stuck, and plan a product-page experiment before Black Friday traffic arrives.</li><li><a href="/notes/bfcm-product-page-purchase-doubts">Which doubts belong beside Add to Cart on an expensive product?</a> - Find the delivery, returns and payment questions stopping expensive purchases. Learn what to show near Add to Cart and how to test it before Black Friday.</li><li><a href="/notes/bfcm-product-discovery-and-comparison">Can Black Friday shoppers find the right model without opening ten tabs?</a> - Learn how to spot comparison friction before Black Friday, choose the right decision aid, and test completed purchases instead of tool clicks.</li><li><a href="/notes/bfcm-product-page-value-clarity">What should a high-ticket product page explain before Black Friday?</a> - What higher-priced product pages should explain before Black Friday, with A/B-test evidence on clarity, accordions, mobile behavior, and risk.</li><li><a href="/notes/where-does-your-data-go-ai-worker">Where Does Your Data Go When an AI Worker Does the Work?</a> - Follow one business document through an AI Worker and learn how to map its sources, recipients, artifacts, access, retention, deletion, evidence, and owners.</li><li><a href="/notes/how-ai-worker-connects-existing-analytics-stack">How Can an AI Worker Connect to Your Existing Analytics Stack?</a> - A practical framework for mapping interfaces, identities, authority, verification, approvals, and ownership across a Worker’s connected analytics responsibilities.</li><li><a href="/notes/ai-assisted-prospecting-without-spammy-outreach">AI-Assisted Prospecting Without Spammy Outreach</a> - A practical operating model for using AI to research, qualify, and draft prospecting messages while people verify fit, claims, permissions, and suppression.</li><li><a href="/notes/when-audience-growth-outruns-follow-up-capacity">When Audience Growth Outruns Follow-Up Capacity</a> - How a managed AI Worker can give growing teams more consistent lead follow-up without removing human judgment from high-context decisions.</li><li><a href="/notes/reducing-manual-data-entry-and-rework-ai-worker">Reducing Manual Data Entry and Rework With an AI Worker</a> - How to reduce repeated data entry with a managed AI Worker while protecting record quality, reviewability, and human control.</li><li><a href="/notes/ai-worker-team-fit">How an AI Worker Fits Alongside Your Existing Team</a> - A practical operating model for an AI Worker’s business role, connected responsibilities, evolving scope, human ownership, approvals, and escalation.</li><li>
397<a href="/notes/before-ai-worker-touches-live-work-evaluation-plan">Before an AI Worker Touches Live Work: A Practical Evaluation Plan for Workers</a> - A practical plan for evaluating an AI Worker’s agreed responsibilities, connected workflows, and operating authority before live use and as its role evolves.</li><li><a href="/notes/aeo-doesnt-need-more-pages-useful-service-page">AEO Doesn’t Need More Pages. It Needs a Useful Service Page.</a> - A practical Siteworks framework for choosing between a stronger service page and more AEO content.</li><li><a href="/notes/ai-website-options-expert-ownership">The AI Website Choice: DIY, Template, Custom, or Expert-Led?</a> - A practical guide to choosing a website model that matches your business, not just the fastest way to get a page online.</li><li><a href="/notes/when-should-your-business-use-an-ai-voice-agent">When Should Your Business Use an AI Voice Agent?</a> - A practical framework for deciding whether an AI voice agent should handle more inbound calls—and how to run it as a managed Worker.</li><li><a href="/notes/high-conversion-rates-are-a-growth-system">You Don’t Optimize Your Way to a High Conversion Rate</a> - A high conversion rate is not a page-level tactic. It is the compounded outcome of qualified demand, trust, message alignment, offers, shopper experience, retention, and a testing program that can learn quickly.</li><li><a href="/notes/how-ai-worker-knows-right-record">How Does an AI Worker Know It Found the Right Record?</a> - A practical framework for record selection, authority checks, state validation, and escalation in AI-worker workflows.</li><li><a href="/notes/when-no-api-should-ai-worker-use-browser">When There Is No API, Should an AI Worker Use the Browser?</a> - A browser can close the gap when a business system has no suitable API. The safe design is a bounded, monitored last-mile adapter with verification, approvals, and a human handoff.</li><li><a href="/notes/webflow-legacy-editor-deprecation">Webflow Is Retiring Its Legacy Editor. Some Clients Wanted Less.</a> - Webflow’s new editing experience is more capable than the legacy Editor. The backlash reveals a different question: do clients want an editor—or a dependable way to request a change?</li><li><a href="/notes/claude-code-leak-model-weights-ai-worker-safety">Claude Code Leaked. The Model Didn’t.</a> - Claude Code’s application source leaked; Claude’s trained model did not. The distinction explains what a harness contributes, why general intelligence still needs company onboarding, and how scoped identity, tools, approvals, monitoring, and ownership make a Worker safer by design for a defined job.</li><li><a href="/notes/openai-hugging-face-breach-ai-evaluation-worker-controls">The Hugging Face Breach: When an AI Evaluation Lost Control</a> - OpenAI’s models breached Hugging Face during a cyber evaluation. See which boundaries failed and how bounded AI Workers limit the blast radius.</li><li><a href="/notes/gpt-5-6-file-deletion-ai-worker-access-controls">The AI Didn’t Go Rogue. It Had Too Much Access.</a> - GPT-5.6 Sol deleted files in reported incidents. See how isolation, least privilege, approvals, and recovery keep one mistake from becoming a disaster.</li><li><a href="/notes/ecommerce-product-page-above-the-fold">What Belongs Above the Fold on an Ecommerce Product Page?</a> - Above the fold is not a packing list. It is the first usable decision frame: product, offer, required choices, action, and the proof needed next—sequenced differently on desktop and mobile.</li><li><a href="/notes/ai-website-builder-vs-managed-cms">AI Can Build the Website. Who Owns It After Launch?</a> - AI can make website production faster. The real decision is who will own strategy, testing, hosting, updates, and improvement after launch.</li><li><a href="/notes/small-business-website-age-of-ai">Do Small Businesses Still Need a Website in the Age of AI?</a> - AI has changed how customers search, not the need for a trustworthy source. See how a website supports local SEO, answer engines, and action.</li><li><a href="/notes/small-team-serious-capability">Small Businesses Deserve Big-Company Capability</a> - AI has widened access to serious business technology. Taurist builds the connected systems that help ambitious small teams turn that access into operating capability.</li><li><a href="/notes/an-ai-worker-should-know-when-not-to-act">
397An AI Worker Should Know When Not to Act</a> - Useful AI workers know when to handle work, draft for review, ask for context, or escalate.</li><li><a href="/notes/diy-agent-packaged-agent-or-worker">Installing an Agent Is Not the Same as Forming a Worker</a> - Compare building an AI agent, adopting a pre-packaged agent, and forming a Worker by Taurist. Learn what it takes to give AI a real business mission, context, boundaries, and readiness proof.</li><li><a href="/notes/prompt-vs-managed-ai-worker">A Prompt Can Complete a Task. A Managed Worker Carries a Business Role.</a> - A managed AI Worker carries a business role across connected responsibilities, tools, and workflows, with ongoing follow-through and human oversight.</li><li><a href="/notes/ai-layoff-mistake-accountable-workers">The AI layoff mistake was treating tools like accountable workers.</a> - AI Workers need a clear business role, connected responsibilities, context, approval rules, quality checks, escalation, and human accountability.</li><li><a href="/notes/ai-worker-should-know-when-not-to-act">An AI worker should know when not to act</a> - Useful AI workers do not act on everything. Learn when AI workflows should pause, ask for approval, escalate, or route work to a person with context.</li><li><a href="/notes/is-automation-worth-it-small-business-first-workflow">Is automation worth it when you’re still small? Define the role and initial scope.</a> - How small teams can define an AI Worker’s business role, connected responsibilities, and initial scope with approvals, monitoring, and human oversight.</li><li><a href="/notes/ai-agents-which-workflow-first">AI Agents Are Everywhere. Which Responsibilities Should You Hand Off First?</a> - Define an AI Worker’s business role and initial responsibilities, connect the relevant workflows, and establish clear approval rules and human ownership.</li><li><a href="/notes/what-a-homepage-is-actually-for-and-the-four-jobs-it-keeps-failing">What a homepage is actually for - and the four jobs it keeps failing</a> - Most redesigns make the site prettier and still leave the buyer unsure. A homepage has a job list, not a mood board.</li><li><a href="/notes/the-three-seconds-of-doubt-before-the-pay-button">The three seconds of doubt before the pay button</a> - Checkout hesitation is rarely just about price. It is the small unresolved doubt that appears right before commitment.</li><li><a href="/notes/approvals-are-the-feature-not-the-friction">Approvals are the feature, not the friction</a> - An AI worker that acts without checkpoints can create risk. The teams getting value design the oversight first.</li><li><a href="/notes/why-we-split-one-company-into-focused-brands">Why we split one company into focused brands</a> - Taurist could have stayed a do-everything agency. We separated the work so the way in stays clear.</li><li><a href="/notes/stop-ab-testing-your-button-colors">Stop A/B testing your button colors</a> - Color tests are where conversion programs go to feel busy. The bigger gains usually sit higher in the decision hierarchy.</li><li><a href="/notes/the-work-that-should-never-have-been-manual">The work that should never have been manual</a> - Email triage, CRM updates, follow-ups, scheduling. Some repeat work becomes safer when a managed worker handles the first pass.</li><li><a href="/notes/conversion-aware-design-isnt-a-style">Conversion-aware design isn't a style</a> - You cannot bolt trust onto a finished site. Conversion-aware design is a set of decisions made before the first section is built.</li><li><a href="/notes/the-audit-we-run-before-touching-a-single-pixel">The audit we run before touching a single pixel</a> - Before redesigning the surface, a useful CRO audit diagnoses the friction, the evidence, and the first fix.</li><li><a href="/notes/founder-led-zero-fluff-how-we-actually-staff-a-project">Founder-led, zero fluff: how we actually staff a project</a> - No account managers relaying messages. The person who scopes the work is close to the person doing it.</li><li><a href="/notes/what-a-managed-ai-worker-does-on-day-one">What a managed AI worker does on day one</a> - A clear business role, connected responsibilities, and an agreed initial scope. Day one starts from evaluated readiness, useful handoffs, and human ownership.</li><li><a href="/notes/the-fold-is-dead-attention-isnt">The fold is dead. Attention isn't.</a> - Stop fighting over what sits above 600px. Map where attention actually goe
397s and build the page around it.</li><li><a href="/notes/your-checkout-has-a-memory-problem">Your checkout has a memory problem</a> - Returning shoppers should not have to re-prove what the store already knows. Every repeated field adds a reason to stop.</li><li><a href="/notes/more-force-less-friction-what-the-slogan-means-in-practice">More force, less friction: what the slogan means in practice</a> - It is not just a tagline. It is the filter we run every feature, page, workflow, and project through.</li><li><a href="/notes/where-ai-workers-quietly-fail-and-how-to-catch-it-early">Where AI workers quietly fail - and how to catch it early</a> - The failure is rarely loud. It is slow drift in quality that only a good oversight loop will surface.</li><li><a href="/notes/speed-is-a-conversion-feature-not-an-engineering-one">Speed is a conversion feature, not an engineering one</a> - Performance affects trust before a visitor reads a word. Speed belongs in the brief, not only the build ticket.</li><li><a href="/notes/60-percent-of-your-traffic-already-decided-design-for-the-other-40-percent">60% of your traffic already decided. Design for the other 40%.</a> - Some buyers will convert despite the page. Growth often lives with the undecided visitors who need better answers.</li><li><a href="/notes/the-handoff-document-that-makes-automation-safe">The handoff document that makes automation safe</a> - Before a worker touches a workflow, write down the edge cases. That single page prevents most avoidable problems.</li><li><a href="/notes/building-for-the-chamber-credible-sites-on-a-real-timeline">Building for the chamber: credible sites on a real timeline</a> - Local businesses do not need agency theater. They need a site that is live, fast, credible, and useful on day one.</li></ul></section></noscript>
398<div class="fn" data-screen-label="Field Notes index">
399
400  <main class="fn-wrap">
401
402    <!-- ===================== MASTHEAD ===================== -->
403    <header class="fn-top">
404      <h1>The Taurist Field Notes</h1>
405    </header>
406
407  </main>
408
409  <!-- ===================== TABS + VIEW TOGGLE (sticky) ===================== -->
410  <nav class="fn-barwrap" id="fnBarWrap" aria-label="Filter and view notes">
411    <div class="fn-wrap fn-bar">
412      <div class="fn-tabs" id="fnTabs" role="tablist" aria-label="Filter notes by brand">
413        <button type="button" class="fn-tab is-active" role="tab" aria-selected="true" data-filter="all">All</button>
414        <button type="button" class="fn-tab" role="tab" aria-selected="false" data-filter="cw">Conversion Works</button>
415        <button type="button" class="fn-tab" role="tab" aria-selected="false" data-filter="sw">Siteworks</button>
416        <button type="button" class="fn-tab" role="tab" aria-selected="false" data-filter="wk">Workers</button>
417        <button type="button" class="fn-tab" role="tab" aria-selected="false" data-filter="co">Company</button>
418      </div>
419      <span class="fn-bar__spacer"></span>
420      <div class="fn-view" id="fnView" role="group" aria-label="View as">
421        <button type="button" data-view="grid" class="is-active" aria-label="Grid view" title="Grid view">
422          <svg width="18" height="18" viewBox="0 0 24 24" fill="none"><rect x="3" y="3" width="7.5" height="7.5" rx="1.5" stroke="currentColor" stroke-width="1.7"/><rect x="13.5" y="3" width="7.5" height="7.5" rx="1.5" stroke="currentColor" stroke-width="1.7"/><rect x="3" y="13.5" width="7.5" height="7.5" rx="1.5" stroke="currentColor" stroke-width="1.7"/><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="1.5" stroke="currentColor" stroke-width="1.7"/></svg>
423        </button>
424        <button type="button" data-view="list" aria-label="List view" title="List view">
425          <svg width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M8 6h13M8 12h13M8 18h13" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/><circle cx="3.5" cy="6" r="1.4" fill="currentColor"/><circle cx="3.5" cy="12" r="1.4" fill="currentColor"/><circle cx="3.5" cy="18" r="1.4" fill="currentColor"/></svg>
426        </button>
427      </div>
428    </div>
429  </nav>
430
431  <main class="fn-wrap fn-content">
432
433    <!-- ===================== FEATURED (All view only) ===================== -->
434    <section class="fn-feat" id="fnFeat" aria-label="Featured notes"></section>
435
436    <!-- ===================== FILTERED SECTION HEADING ===================== -->
437    <div class="fn-sechead" id="fnSecHead">
438      <h2><span class="dot"></span><span id="fnSecTitle"></span></h2>
439      <span id="fnSecCount"></span>
440    </div>
441
442    <!-- ===================== MORE / CHRONOLOGICAL ===================== -->
443    <section class="fn-section">
444      <p class="fn-morehead" id="fnMoreHead">More notes</p>
445      <div class="fn-listhead" id="fnListHead" aria-hidden="true">
446        <span>Date</span><span>Brand</span><span>Title</span><span></span>
447      </div>
448      <div class="fn-grid" id="fnGrid"></div>
449      <p class="fn-empty" id="fnEmpty">No notes in this category yet — check back soon.</p>
450    </section>
451
452    <!-- ===================== NEWSLETTER ===================== -->
453    <section class="fn-news">
454      <div class="fn-news__card">
455        <div>
456          <h2>Field Notes, in your inbox.</h2>
457          <p>One practical weekly letter for small-business operators on conversion, websites, AI workers, and small-team systems. <a href="/newsletter">See what’s inside.</a></p>
458        </div>
459        <form class="fn-form" id="fnForm" data-newsletter-form data-newsletter-source="notes_index" data-newsletter-acquisition="organic_site" novalidate>
460          <div class="fn-form__row" data-newsletter-inputs>
461            <label class="newsletter-hp" for="fnEmail">Email address</label>
462            <input id="fnEmail" name="email" type="email" inputmode="email" autocomplete="email" maxlength="320" placeholder="[email protected]" aria-describedby="fnEmailHelp fnEmailError" required>
463            <button type="submit" id="fnSubscribeBtn" disabled><span data-newsletter-button-label>Subscribe</span></button>
464          </div>
465          <span class="fn-form__field-error" id="fnEmailError" data-newsletter-email-error hidden></span>
466          <input type="hidden" name="source" value="notes_index">
467          <input type="hidden" name="acquisitionChannel" value="organic_site">
468          <label class="newsletter-hp" aria-hidden="true" hidden>Company website<input name="companyWebsite" type="text" tabindex="-1" autocomplete="off" aria-hidden="true"></label>
469          <div class="fn-form__verify" data-newsletter-turnstile-wrap>
470            <div data-newsletter-turnstile aria-label="Spam verification"></div>
471            <p class="fn-form__config" data-newsletter-config-error hidden>Newsletter signups are temporarily unavailable while verification is configured.</p>
472          </div>
473          <span class="fn-form__note" id="fnEmailHelp" data-newsletter-consent>One practical email every Tuesday. Confirm your email to subscribe. Unsubscribe anytime. <a href="/privacy-policy">Privacy Policy</a>.</span>
474          <div class="fn-form__error" data-newsletter-error role="alert" tabindex="-1" hidden></div>
475          <div class="fn-form__ok" data-newsletter-success role="status" hidden>
476            <strong>Check your inbox.</strong>
477            <span>We sent a confirmation email. Click the link within 24 hours to finish subscribing.</span>
478          </div>
479        </form>
480      </div>
481    </section>
482
483  </main>
484
485  <!-- ===================== FOOTER ===================== -->
486
487</div>
488
489<script src="/hub-static/site-nav.js" data-active="Notes"></script>
vendor: 1 bytes, line 489
489
490<script src="/hub-static/site-foot.js"></script>
490
491
492<script>
493(function () {
494  "use strict";
495
496  var CATS = {
497    cw: { label: "Conversion Works", accent: "#F22248", href: "/notes?category=cw" },
498    sw: { label: "Siteworks",        accent: "#F26422", href: "/notes?category=sw" },
499    wk: { label: "Workers",          accent: "#F222B0", href: "/notes?category=wk" },
500    co: { label: "Company",          accent: "#7C3CE0", href: "/notes?category=co" }
501  };
502
503  /* ---- cover art: brand-true luminous gradient meshes, no photos ---- */
504  var BLEND = ["#EEC936", "#F26422", "#F222B0", "#7C3CE0", "#2C6BE6", "#009917", "#F22248"];
505  function cover(note, seed) {
506    var cat = typeof note === "string" ? note : note.cat;
507    var A = CATS[cat].accent;
508    if (note && typeof note === "object" && note.heroImage) {
509      return "linear-gradient(180deg, rgba(0,0,0,0.02), rgba(0,0,0,0.22)), url('" + note.heroImage + "')";
510    }
511    var B = BLEND[(seed * 3 + cat.charCodeAt(0)) % BLEND.length];
512    var A1 = "color-mix(in oklab, " + A + " 74%, #fff)";
513    var A2 = "color-mix(in oklab, " + A + " 60%, #000)";
514    var B1 = "color-mix(in oklab, " + B + " 66%, #fff)";
515    var V = [
516      "radial-gradient(130% 120% at 18% 0%, "+A1+", transparent 56%), radial-gradient(120% 110% at 96% 26%, "+B1+", transparent 54%), radial-gradient(150% 140% at 50% 132%, "+A2+", transparent 60%), linear-gradient(158deg, "+A+", "+B+")",
517      "radial-gradient(120% 120% at 88% 6%, "+B1+", transparent 54%), radial-gradient(130% 120% at 8% 40%, "+A1+", transparent 56%), radial-gradient(150% 150% at 60% 128%, "+A2+", transparent 62%), linear-gradient(200deg, "+B+", "+A+")",
518      "radial-gradient(140% 130% at 50% -10%, "+A1+", transparent 58%), radial-gradient(110% 110% at 14% 96%, "+B1+", transparent 52%), radial-gradient(120% 120% at 92% 86%, "+A2+", transparent 56%), linear-gradient(135deg, "+A+", "+B+")",
519      "radial-gradient(120% 120% at 10% 10%, "+B1+", transparent 52%), radial-gradient(130% 130% at 90% 60%, "+A1+", transparent 56%), radial-gradient(140% 140% at 40% 140%, "+A2+", transparent 60%), linear-gradient(175deg, "+A+", "+B+")"
520    ];
521    return V[seed % V.length];
522  }
523
524  /* ---- content: newest first ---- */
525  var NOTES = [
526  {
527    "cat": "cw",
528    "categoryLabel": "Conversion Works",
529    "accent": "#F22248",
530    "title": "Can shoppers verify the claims on your product page?",
531    "ex": "Match product-page claims to relevant tests and certifications, explain their limits, and assess shopper understanding before claiming a commercial benefit.",
532    "date": "2026-10-08",
533    "read": "12 min",
534    "href": "/notes/verifiable-product-page-claims",
535    "heroImage": "/hub-static/assets/note-covers/conversion-works/verifiable-product-page-claims-cover.avif"
536  },
537  {
538    "cat": "cw",
539    "categoryLabel": "Conversion Works",
540    "accent": "#F22248",
541    "title": "What should shoppers understand about when an order will arrive?",
542    "ex": "A practical guide to arrival dates, operational inputs, useful fallbacks and maintaining delivery estimates across the purchase journey.",
543    "date": "2026-10-07",
544    "read": "10 min",
545    "href": "/notes/product-page-delivery-estimates",
546    "heroImage": "/hub-static/assets/note-covers/conversion-works/product-page-delivery-estimates-cover.avif"
547  },
548  {
549    "cat": "cw",
550    "categoryLabel": "Conversion Works",
551    "accent": "#F22248",
552    "title": "Customer research for premium ecommerce: what to learn beyond income",
553    "ex": "Learn what premium shoppers need beyond demographic profiles. Turn purchase stories, alternatives and constraints into product-page hypotheses you can assess.",
554    "date": "2026-10-05",
555    "read": "12 min",
556    "href": "/notes/customer-research-premium-ecommerce",
557    "heroImage": "/hub-static/assets/note-covers/conversion-works/customer-research-premium-ecommerce-cover.avif"
558  },
559  {
560    "cat": "cw",
561    "categoryLabel": "Conversion Works",
562    "accent": "#F22248",
563    "title": "Does your product bundle solve a customer problem—or just add more products?",
564    "ex": "Build useful product bundles around customer needs. Compare kits, quantity packs and add-ons, then check contribution, inventory and returns before scaling.",
565    "date": "2026-10-02",
566    "read": "12 min",
567    "href": "/notes/product-bundle-strategy",
568    "heroImage": "/hub-static/assets/note-covers/conversion-works/product-bundle-strategy-cover.avif"
569  },
570  {
571    "cat": "co",
572    "categoryLabel": "Company",
573    "accent": "#7C3CE0",
574    "title": "What should customers understand when AI helps deliver a service?",
575    "ex": "An AI label leaves practical questions unanswered. Explain what the service does, which decisions it can make, and who is responsible when a customer needs help.",
576    "date": "2026-10-02",
577    "read": "10 min",
578    "href": "/notes/explaining-ai-assisted-service-delivery",
579    "heroImage": "/hub-static/assets/note-covers/company/explaining-ai-assisted-service-delivery-cover.avif"
580  },
581  {
582    "cat": "cw",
583    "categoryLabel": "Conversion Works",
584    "accent": "#F22248",
585    "title": "How to improve a low-traffic store without overstating the results",
586    "ex": "Match the evidence to the decision: verify a failure before repairing it, observe realistic tasks to investigate confusion, and assess experiment feasibility before claiming sales lift.",
587    "date": "2026-10-01",
588    "read": "10 min",
589    "href": "/notes/low-traffic-store-conversion-decisions",
590    "heroImage": "/hub-static/assets/note-covers/conversion-works/low-traffic-store-conversion-decisions-cover.avif"
591  },
592  {
593    "cat": "cw",
594    "categoryLabel": "Conversion Works",
595    "accent": "#F22248",
596    "title": "How should you set a free-shipping threshold?",
597    "ex": "Choose a free-shipping threshold using basket values, margins and fulfillment costs. Learn how to test c
597ontribution, conversion and returns before changing it.",
598    "date": "2026-10-01",
599    "read": "10 min",
600    "href": "/notes/free-shipping-threshold",
601    "heroImage": "/hub-static/assets/note-covers/conversion-works/free-shipping-threshold-cover.avif"
602  },
603  {
604    "cat": "cw",
605    "categoryLabel": "Conversion Works",
606    "accent": "#F22248",
607    "title": "Where should product-page reviews go—and what should shoppers be able to verify?",
608    "ex": "Make review evidence easy to find and inspect. Link a concise rating-and-count summary to the full reviews, preserve relevant context, and test whether the position supports the shopper’s decision and your business outcome.",
609    "date": "2026-09-30",
610    "read": "12 min",
611    "href": "/notes/product-page-reviews-placement",
612    "heroImage": "/hub-static/assets/note-covers/conversion-works/product-page-reviews-placement-cover.avif"
613  },
614  {
615    "cat": "wk",
616    "categoryLabel": "Workers",
617    "accent": "#F222B0",
618    "title": "What should you recheck when an AI Worker's connected tool changes?",
619    "ex": "A practical change record for maintaining an AI Worker's job when connected tools, fields or permissions change.",
620    "date": "2026-09-30",
621    "read": "11 min",
622    "href": "/notes/ai-worker-tool-change-revalidation",
623    "heroImage": "/hub-static/assets/note-covers/workers/ai-worker-tool-change-revalidation-cover.avif"
624  },
625  {
626    "cat": "sw",
627    "categoryLabel": "Siteworks",
628    "accent": "#F26422",
629    "title": "What happens to old URLs when your service website is redesigned?",
630    "ex": "A redesigned site needs a plan for the links customers already have. Here is what to ask your team to preserve, test, and hand over before launch.",
631    "date": "2026-09-29",
632    "read": "10 min",
633    "href": "/notes/service-website-redesign-redirect-map",
634    "heroImage": "/hub-static/assets/note-covers/siteworks/service-website-redesign-redirect-map-cover.avif"
635  },
636  {
637    "cat": "sw",
638    "categoryLabel": "Siteworks",
639    "accent": "#F26422",
640    "title": "What should your service website explain about working together?",
641    "ex": "Help prospective clients understand their role, the work they receive and the dependencies that shape a service engagement.",
642    "date": "2026-09-28",
643    "read": "10 min",
644    "href": "/notes/service-website-process-page",
645    "heroImage": "/hub-static/assets/note-covers/siteworks/service-website-process-page-cover.avif"
646  },
647  {
648    "cat": "sw",
649    "categoryLabel": "Siteworks",
650    "accent": "#F26422",
651    "title": "Can people complete your service website’s contact form?",
652    "ex": "Review your service website’s contact form for clear labels, keyboard access, useful errors and truthful confirmation, with practical checks for your builder.",
653    "date": "2026-09-25",
654    "read": "10 min",
655    "href": "/notes/accessible-service-contact-forms",
656    "heroImage": "/hub-static/assets/note-covers/siteworks/accessible-service-contact-forms-cover.avif"
657  },
658  {
659    "cat": "cw",
660    "categoryLabel": "Conversion Works",
661    "accent": "#F22248",
662    "title": "What should a product page do when an item is temporarily out of stock?",
663    "ex": "Help shoppers choose what to do when a product is temporarily out of stock, with honest timing, backorders, restock alerts and suitable available alternatives.",
664    "date": "2026-09-24",
665    "read": "10 min",
666    "href": "/notes/temporarily-out-of-stock-product-page",
667    "heroImage": "/hub-static/assets/note-covers/conversion-works/temporarily-out-of-stock-product-page-cover.avif"
668  },
669  {
670    "cat": "sw",
671    "categoryLabel": "Siteworks",
672    "accent": "#F26422",
673    "title": "What counts as credible client proof on a service website?",
674    "ex": "A practical guide to choosing, explaining, and maintaining client proof on a service website, without overstating what it establishes.",
675    "date": "2026-09-23",
676    "read": "10 min",
677    "href": "/notes/credible-client-proof-service-websites",
678    "heroImage": "/hub-static/assets/note-covers/siteworks/credible-client-proof-service-websites-cover.avif"
679  },
680  {
681    "cat": "co",
682    "categoryLabel": "Company",
683    "accent": "#7C3CE0",
684    "title": "Your agency uses AI. What should you ask before hiring them?",
685    "ex": "Practical questions and evidence to discuss before hiring an agency that uses AI for website, marketing or operational work.",
686    "date": "2026-09-23",
687    "read": "11 min",
688    "href": "/notes/questions-to-ask-an-ai-agency",
689    "heroImage": "/hub-static/assets/note-covers/company/questions-to-ask-an-ai-agency-cover.avif"
690  },
691  {
692    "cat": "wk",
693    "categoryLabel": "Workers",
694    "accent": "#F222B0",
695    "title": "What should an AI Worker do when a tool goes down?",
696    "ex": "How an AI Worker can continue unaffected work, retain the context of blocked tasks, and recover under the direction of its designated owner.",
697    "date": "2026-09-22",
698    "read": "11 min",
699    "href": "/notes/what-should-ai-worker-do-when-tool-goes-down",
700    "heroImage": "/hub-static/assets/note-covers/workers/what-should-ai-worker-do-when-tool-goes-down-cover.avif"
701  },
702  {
703    "cat": "sw",
704    "categoryLabel": "Siteworks",
705    "accent": "#F26422",
706    "title": "How can a service business tell whether AI search brings qualified inquiries?",
707    "ex": "Measure AI-search visibility, visits and qualified inquiries with current Google and Bing reports, practical lead records and clear limits on attribution.",
708    "date": "2026-09-21",
709    "read": "10 min",
710    "href": "/notes/ai-search-visibility-to-qualified-leads",
711    "heroImage": "/hub-static/assets/note-covers/siteworks/ai-search-visibility-to-qualified-leads-cover.avif"
712  },
713  {
714    "cat": "wk",
715    "categoryLabel": "Workers",
716    "accent": "#F222B0",
717    "title": "What does an AI Worker cost to run?",
718    "ex": "A Taurist AI Worker averages around $25,000 for a full year, including token usage, for a business role with connected responsibilities and ongoing operation.",
719    "date": "2026-09-18",
720    "read": "10 min",
721    "href": "/notes/what-does-an-ai-worker-cost-to-run",
722    "heroImage": "/hub-static/assets/note-covers/workers/what-does-an-ai-worker-cost-to-run-cover.avif"
723  },
724  {
725    "cat": "cw",
726    "categoryLabel": "Conversion Works",
727    "accent": "#F22248",
728    "title": "Can shoppers tell what your Black Friday offer is actually worth?",
729    "ex": "Review Black Friday offer tests, clarify prices and bundle contents, and plan a CRO experiment that considers purchases, costs and returns for your store.",
730    "date": "2026-09-17",
731    "read": "12 min",
732    "href": "/notes/bfcm-offer-value-and-price-clarity",
733    "heroImage": "/hub-static/assets/note-covers/conversion-works/bfcm-offer-value-and-price-clarity-cover.avif"
734  },
735  {
736    "cat": "cw",
737    "categoryLabel": "Conversion Works",
738    "accent": "#F22248",
739    "title": "Should you add express checkout to a high-ticket product page before Black Friday?",
740    "ex": "Review express-checkout tests for high-ticket products, spot where customers get stuck, and plan a product-page experiment before Black Friday traffic arrives.",
741    "date": "2026-09-15",
742    "read": "12 min",
743    "href": "/notes/bfcm-express-checkout-high-consideration",
744    "heroImage": "/hub-static/assets/note-covers/conversion-works/bfcm-express-checkout-high-consideration-cover.avif"
745  },
746  {
747    "cat": "cw",
748    "categoryLabel": "Conversion Works",
749    "accent": "#F22248",
750    "title": "Which doubts belong beside Add to Cart on an expensive product?",
751    "ex": "Find the delivery, returns and payment questions stopping expensive purchases. Learn what to show near Add to Cart and how to test it before Black Friday.",
752    "date": "2026-09-14",
753    "read": "12 min",
754    "href": "/notes/bfcm-product-page-purchase-doubts",
755    "heroImage": "/hub-static/assets/note-covers/conversion-works/bfcm-product-page-purchase-doubts-cover.avif"
756  },
757  {
758    "cat": "cw",
759    "categoryLabel": "Conversion Works",
760    "accent": "#F22248",
761    "title": "Can Black Friday shoppers find the right model without opening ten tabs?",
762    "ex": "Learn how to spot comparison friction before Black Friday, choose the right decision aid, and test completed purchases instead of tool clicks.",
763    "date": "2026-09-11",
764    "read": "12 min",
765    "href": "/notes/bfcm-product-discovery-and-comparison",
766    "heroImage": "/hub-static/assets/note-covers/conversion-works/bfcm-product-discovery-and-comparison-cover.avif"
767  },
768  {
769    "cat": "cw",
770    "categoryLabel": "Conversion Works",
771    "accent": "#F22248",
772    "title": "What should a high-ticket product page explain before Black Friday?",
773    "ex": "What higher-priced product pages should explain before Black Friday, with A/B-test evidence on clarity, accordions, mobile behavior, and risk.",
774    "date": "2026-09-10",
775    "read": "10 min",
776    "href": "/notes/bfcm-product-page-value-clarity",
777    "heroImage": "/hub-static/assets/note-covers/conversion-works/bfcm-product-page-value-clarity-cover.avif"
778  },
779  {
780    "cat": "wk",
781    "categoryLabel": "Workers",
782    "accent": "#F222B0",
783    "title": "Where Does Your Data Go When an AI Worker Does the Work?",
784    "ex": "Follow one business document through an AI Worker and learn how to map its sources, recipients, artifacts, access, retention, deleti
784on, evidence, and owners.",
785    "date": "2026-09-10",
786    "read": "12 min",
787    "href": "/notes/where-does-your-data-go-ai-worker",
788    "heroImage": "/hub-static/assets/note-covers/workers/where-does-your-data-go-ai-worker-cover.avif"
789  },
790  {
791    "cat": "wk",
792    "categoryLabel": "Workers",
793    "accent": "#F222B0",
794    "title": "How Can an AI Worker Connect to Your Existing Analytics Stack?",
795    "ex": "A practical framework for mapping interfaces, identities, authority, verification, approvals, and ownership across a Worker’s connected analytics responsibilities.",
796    "date": "2026-09-09",
797    "read": "12 min",
798    "href": "/notes/how-ai-worker-connects-existing-analytics-stack",
799    "heroImage": "/hub-static/assets/note-covers/workers/how-ai-worker-connects-existing-analytics-stack-cover.avif"
800  },
801  {
802    "cat": "wk",
803    "categoryLabel": "Workers",
804    "accent": "#F222B0",
805    "title": "AI-Assisted Prospecting Without Spammy Outreach",
806    "ex": "A practical operating model for using AI to research, qualify, and draft prospecting messages while people verify fit, claims, permissions, and suppression.",
807    "date": "2026-09-08",
808    "read": "14 min",
809    "href": "/notes/ai-assisted-prospecting-without-spammy-outreach",
810    "heroImage": "/hub-static/assets/note-covers/workers/ai-assisted-prospecting-without-spammy-outreach-cover.avif"
811  },
812  {
813    "cat": "wk",
814    "categoryLabel": "Workers",
815    "accent": "#F222B0",
816    "title": "When Audience Growth Outruns Follow-Up Capacity",
817    "ex": "How a managed AI Worker can give growing teams more consistent lead follow-up without removing human judgment from high-context decisions.",
818    "date": "2026-08-31",
819    "read": "12 min",
820    "href": "/notes/when-audience-growth-outruns-follow-up-capacity",
821    "heroImage": "/hub-static/assets/note-covers/workers/when-audience-growth-outruns-follow-up-capacity-cover.avif"
822  },
823  {
824    "cat": "wk",
825    "categoryLabel": "Workers",
826    "accent": "#F222B0",
827    "title": "Reducing Manual Data Entry and Rework With an AI Worker",
828    "ex": "How to reduce repeated data entry with a managed AI Worker while protecting record quality, reviewability, and human control.",
829    "date": "2026-08-24",
830    "read": "10 min",
831    "href": "/notes/reducing-manual-data-entry-and-rework-ai-worker",
832    "heroImage": "/hub-static/assets/note-covers/workers/reducing-manual-data-entry-and-rework-ai-worker-cover.avif"
833  },
834  {
835    "cat": "wk",
836    "categoryLabel": "Workers",
837    "accent": "#F222B0",
838    "title": "How an AI Worker Fits Alongside Your Existing Team",
839    "ex": "A practical operating model for an AI Worker’s business role, connected responsibilities, evolving scope, human ownership, approvals, and escalation.",
840    "date": "2026-08-20",
841    "read": "9 min",
842    "href": "/notes/ai-worker-team-fit",
843    "heroImage": "/hub-static/assets/note-covers/workers/ai-worker-team-fit-cover.avif"
844  },
845  {
846    "cat": "wk",
847    "categoryLabel": "Workers",
848    "accent": "#F222B0",
849    "title": "Before an AI Worker Touches Live Work: A Practical Evaluation Plan for Workers",
850    "ex": "A practical plan for evaluating an AI Worker’s agreed responsibilities, connected workflows, and operating authority before live use and as its role evolves.",
851    "date": "2026-08-19",
852    "read": "13 min",
853    "href": "/notes/before-ai-worker-touches-live-work-evaluation-plan",
854    "heroImage": "/hub-static/assets/note-covers/workers/before-ai-worker-touches-live-work-evaluation-plan-cover.avif"
855  },
856  {
857    "cat": "sw",
858    "categoryLabel": "Siteworks",
859    "accent": "#F26422",
860    "title": "AEO Doesn’t Need More Pages. It Needs a Useful Service Page.",
861    "ex": "A practical Siteworks framework for choosing between a stronger service page and more AEO content.",
862    "date": "2026-08-18",
863    "read": "11 min",
864    "href": "/notes/aeo-doesnt-need-more-pages-useful-service-page",
865    "heroImage": "/hub-static/assets/note-covers/siteworks/aeo-doesnt-need-more-pages-useful-service-page-cover.avif"
866  },
867  {
868    "cat": "sw",
869    "categoryLabel": "Siteworks",
870    "accent": "#F26422",
871    "title": "The AI Website Choice: DIY, Template, Custom, or Expert-Led?",
872    "ex": "A practical guide to choosing a website model that matches your business, not just the fastest way to get a page online.",
873    "date": "2026-08-07",
874    "read": "10 min",
875    "href": "/notes/ai-website-options-expert-ownership",
876    "heroImage": "/hub-static/assets/note-covers/siteworks/ai-website-options-expert-ownership-cover.avif"
877  },
878  {
879    "cat": "wk",
880    "categoryLabel": "Workers",
881    "accent": "#F222B0",
882    "title": "When Should Your Business Use an AI Voice Agent?",
883    "ex": "A practical framework for deciding whether an AI voice agent should handle more inbound calls—and how to run it as a managed Worker.",
884    "date": "2026-08-07",
885    "read": "10 min",
886    "href": "/notes/when-should-your-business-use-an-ai-voice-agent",
887    "heroImage": "/hub-static/assets/note-covers/workers/when-should-your-business-use-an-ai-voice-agent-cover.avif"
888  },
889  {
890    "cat": "cw",
891    "categoryLabel": "Conversion Works",
892    "accent": "#F22248",
893    "title": "You Don’t Optimize Your Way to a High Conversion Rate",
894    "ex": "A high conversion rate is not a page-level tactic. It is the compounded outcome of qualified demand, trust, message alignment, offers, shopper experience, retention, and a testing program that can learn quickly.",
895    "date": "2026-08-05",
896    "read": "9 min",
897    "href": "/notes/high-conversion-rates-are-a-growth-system",
898    "heroImage": "/hub-static/assets/note-covers/conversion-works/high-conversion-rates-are-a-growth-system-cover.avif"
899  },
900  {
901    "cat": "wk",
902    "categoryLabel": "Workers",
903    "accent": "#F222B0",
904    "title": "How Does an AI Worker Know It Found the Right Record?",
905    "ex": "A practical framework for record selection, authority checks, state validation, and escalation in AI-worker workflows.",
906    "date": "2026-08-04",
907    "read": "9 min",
908    "href": "/notes/how-ai-worker-knows-right-record",
909    "heroImage": "/hub-static/assets/note-covers/workers/how-ai-worker-knows-right-record-v2-cover.avif"
910  },
911  {
912    "cat": "wk",
913    "categoryLabel": "Workers",
914    "accent": "#F222B0",
915    "title": "When There Is No API, Should an AI Worker Use the Browser?",
916    "ex": "A browser can close the gap when a business system has no suitable API. The safe design is a bounded, monitored last-mile adapter with verification, approvals, and a human handoff.",
917    "date": "2026-07-31",
918    "read": "12 min",
919    "href": "/notes/when-no-api-should-ai-worker-use-browser",
920    "heroImage": "/hub-static/assets/note-covers/workers/when-no-api-should-ai-worker-use-browser-cover.avif"
921  },
922  {
923    "cat": "sw",
924    "categoryLabel": "Siteworks",
925    "accent": "#F26422",
926    "title": "Webflow Is Retiring Its Legacy Editor. Some Clients Wanted Less.",
927    "ex": "Webflow’s new editing experience is more capable than the legacy Editor. The backlash reveals a different question: do clients want an editor—or a dependable way to request a change?",
928    "date": "2026-07-28",
929    "read": "13 min",
930    "href": "/notes/webflow-legacy-editor-deprecation",
931    "heroImage": "/hub-static/assets/note-covers/siteworks/webflow-legacy-editor-deprecation-cover.avif"
932  },
933  {
934    "cat": "wk",
935    "categoryLabel": "Workers",
936    "accent": "#F222B0",
937    "title": "Claude Code Leaked. The Model Didn’t.",
938    "ex": "Claude Code’s application source leaked; Claude’s trained model did not. The distinction explains what a harness contributes, why general intelligence still needs company onboarding, and how scoped identity, tools, approvals, monitoring, and ownership make a Worker safer by design for a defined job.",
939    "date": "2026-07-27",
940    "read": "12 min",
941    "href": "/notes/claude-code-leak-model-weights-ai-worker-safety",
942    "heroImage": "/hub-static/assets/note-covers/workers/claude-code-leak-model-weights-ai-worker-safety-cover.avif"
943  },
944  {
945    "cat": "wk",
946    "categoryLabel": "Workers",
947    "accent": "#F222B0",
948    "title": "The Hugging Face Breach: When an AI Evaluation Lost Control",
949    "ex": "OpenAI’s models breached Hugging Face during a cyber evaluation. See which boundaries failed and how bounded AI Workers limit the blast radius.",
950    "date": "2026-07-27",
951    "read": "13 min",
952    "href": "/notes/openai-hugging-face-breach-ai-evaluation-worker-control
952s",
953    "heroImage": "/hub-static/assets/note-covers/workers/openai-hugging-face-breach-ai-evaluation-worker-controls-cover.avif"
954  },
955  {
956    "cat": "wk",
957    "categoryLabel": "Workers",
958    "accent": "#F222B0",
959    "title": "The AI Didn’t Go Rogue. It Had Too Much Access.",
960    "ex": "GPT-5.6 Sol deleted files in reported incidents. See how isolation, least privilege, approvals, and recovery keep one mistake from becoming a disaster.",
961    "date": "2026-07-24",
962    "read": "12 min",
963    "href": "/notes/gpt-5-6-file-deletion-ai-worker-access-controls",
964    "heroImage": "/hub-static/assets/note-covers/workers/gpt-5-6-file-deletion-ai-worker-access-controls-cover.avif"
965  },
966  {
967    "cat": "cw",
968    "categoryLabel": "Conversion Works",
969    "accent": "#F22248",
970    "title": "What Belongs Above the Fold on an Ecommerce Product Page?",
971    "ex": "Above the fold is not a packing list. It is the first usable decision frame: product, offer, required choices, action, and the proof needed next—sequenced differently on desktop and mobile.",
972    "date": "2026-07-23",
973    "read": "13 min",
974    "href": "/notes/ecommerce-product-page-above-the-fold",
975    "heroImage": "/hub-static/assets/note-covers/conversion-works/ecommerce-product-page-above-the-fold-cover.avif"
976  },
977  {
978    "cat": "sw",
979    "categoryLabel": "Siteworks",
980    "accent": "#F26422",
981    "title": "AI Can Build the Website. Who Owns It After Launch?",
982    "ex": "AI can make website production faster. The real decision is who will own strategy, testing, hosting, updates, and improvement after launch.",
983    "date": "2026-07-22",
984    "read": "13 min",
985    "href": "/notes/ai-website-builder-vs-managed-cms",
986    "heroImage": "/hub-static/assets/note-covers/siteworks/ai-website-builder-vs-managed-cms-cover.avif"
987  },
988  {
989    "cat": "sw",
990    "categoryLabel": "Siteworks",
991    "accent": "#F26422",
992    "title": "Do Small Businesses Still Need a Website in the Age of AI?",
993    "ex": "AI has changed how customers search, not the need for a trustworthy source. See how a website supports local SEO, answer engines, and action.",
994    "date": "2026-07-21",
995    "read": "12 min",
996    "href": "/notes/small-business-website-age-of-ai",
997    "heroImage": "/hub-static/assets/note-covers/siteworks/small-business-website-age-of-ai-cover.avif"
998  },
999  {
1000    "cat": "co",
1001    "categoryLabel": "Company",
1002    "accent": "#7C3CE0",
1003    "title": "Small Businesses Deserve Big-Company Capability",
1004    "ex": "AI has widened access to serious business technology. Taurist builds the connected systems that help ambitious small teams turn that access into operating capability.",
1005    "date": "2026-07-20",
1006    "read": "12 min",
1007    "href": "/notes/small-team-serious-capability",
1008    "heroImage": "/hub-static/assets/note-covers/company/small-team-serious-capability-cover.avif"
1009  },
1010  {
1011    "cat": "wk",
1012    "categoryLabel": "Workers",
1013    "accent": "#F222B0",
1014    "title": "An AI Worker Should Know When Not to Act",
1015    "ex": "Useful AI workers know when to handle work, draft for review, ask for context, or escalate.",
1016    "date": "2026-07-16",
1017    "read": "8 min",
1018    "href": "/notes/an-ai-worker-should-know-when-not-to-act",
1019    "heroImage": "/hub-static/assets/note-covers/workers/workers-when-not-to-act-hero-approval-junction-v1.webp"
1020  },
1021  {
1022    "cat": "wk",
1023    "categoryLabel": "Workers",
1024    "accent": "#F222B0",
1025    "title": "Installing an Agent Is Not the Same as Forming a Worker",
1026    "ex": "Compare building an AI agent, adopting a pre-packaged agent, and forming a Worker by Taurist. Learn what it takes to give AI a real business mission, context, boundaries, and readiness proof.",
1027    "date": "2026-07-15",
1028    "read": "10 min",
1029    "href": "/notes/diy-agent-packaged-agent-or-worker",
1030    "heroImage": "/hub-static/assets/note-covers/workers/diy-agent-packaged-agent-or-worker-hero-v4.webp"
1031  },
1032  {
1033    "cat": "wk",
1034    "categoryLabel": "Workers",
1035    "accent": "#F222B0",
1036    "title": "A Prompt Can Complete a Task. A Managed Worker Carries a Business Role.",
1037    "ex": "A managed AI Worker carries a business role across connected responsibilities, tools, and workflows, with ongoing follow-through and human oversight.",
1038    "date": "2026-07-13",
1039    "read": "9 min",
1040    "href": "/notes/prompt-vs-managed-ai-worker",
1041    "heroImage": "/hub-static/assets/note-covers/workers/prompt-vs-managed-ai-worker-hero.webp"
1042  },
1043  {
1044    "cat": "wk",
1045    "categoryLabel": "Workers",
1046    "accent": "#F222B0",
1047    "title": "The AI layoff mistake was treating tools like accountable workers.",
1048    "ex": "AI Workers need a clear business role, connected responsibilities, context, approval rules, quality checks, escalation, and human accountability.",
1049    "date": "2026-07-10",
1050    "read": "8 min",
1051    "href": "/notes/ai-layoff-mistake-accountable-workers",
1052    "heroImage": "/hub-static/assets/note-covers/workers/ai-layoff-accountable-workers-hero.webp"
1053  },
1054  {
1055    "cat": "wk",
1056    "categoryLabel": "Workers",
1057    "accent": "#F222B0",
1058    "title": "An AI worker should know when not to act",
1059    "ex": "Useful AI workers do not act on everything. Learn when AI workflows should pause, ask for approval, escalate, or route work to a person with context.",
1060    "date": "2026-07-08",
1061    "read": "7 min",
1062    "href": "/notes/ai-worker-should-know-when-not-to-act",
1063    "heroImage": "/hub-static/assets/note-covers/workers/workers-when-not-to-act-hero.webp"
1064  },
1065  {
1066    "cat": "wk",
1067    "categoryLabel": "Workers",
1068    "accent": "#F222B0",
1069    "title": "Is automation worth it when you’re still small? Define the role and initial scope.",
1070    "ex": "How small teams can define an AI Worker’s business role, connected responsibilities, and initial scope with approvals, monitoring, and human oversight.",
1071    "date": "2026-07-07",
1072    "read": "8 min",
1073    "href": "/notes/is-automation-worth-it-small-business-first-workflow",
1074    "heroImage": "/hub-static/assets/note-covers/workers/is-automation-worth-it-small-business-first-workflow-cover-16x9.webp"
1075  },
1076  {
1077    "cat": "wk",
1078    "categoryLabel": "Workers",
1079    "accent": "#F222B0",
1080    "title": "AI Agents Are Everywhere. Which Responsibilities Should You Hand Off First?",
1081    "ex": "Define an AI Worker’s business role and initial responsibilities, connect the relevant workflows, and establish clear approval rules and human ownership.",
1082    "date": "2026-07-06",
1083    "read": "7 min",
1084    "href": "/notes/ai-agents-which-workflow-first",
1085    "heroImage": "/hub-static/assets/note-covers/workers/workers-ai-agents-cover-16x9.webp"
1086  },
1087  {
1088    "cat": "sw",
1089    "categoryLabel": "Siteworks",
1090    "accent": "#F26422",
1091    "title": "What a homepage is actually for - and the four jobs it keeps failing",
1092    "ex": "Most redesigns make the site prettier and still leave the buyer unsure. A homepage has a job list, not a mood board.",
1093    "date": "2026-06-22",
1094    "read": "5 min",
1095    "href": "/notes/what-a-homepage-is-actually-for-and-the-four-jobs-it-keeps-failing",
1096    "heroImage": "/hub-static/assets/note-covers/siteworks/siteworks-cover-04.avif"
1097  },
1098  {
1099    "cat": "cw",
1100    "categoryLabel": "Conversion Works",
1101    "accent": "#F22248",
1102    "title": "The three seconds of doubt before the pay button",
1103    "ex": "Checkout hesitation is rarely just about price. It is the small unresolved doubt that appears right before commitment.",
1104    "date": "2026-06-18",
1105    "read": "7 min",
1106    "href": "/notes/the-three-seconds-of-doubt-before-the-pay-button",
1107    "heroImage": "/hub-static/assets/note-covers/conversion-works/conversion-cover-01.avif"
1108  },
1109  {
1110    "cat": "wk",
1111    "categoryLabel": "Workers",
1112    "accent": "#F222B0",
1113    "title": "Approvals are the feature, not the friction",
1114    "ex": "An AI worker that acts without checkpoints can create risk. The teams getting value design the oversight first.",
1115    "date": "2026-06-15",
1116    "read": "6 min",
1117    "href": "/notes/approvals-are-the-feature-not-the-friction",
1118    "heroImage": "/hub-static/assets/note-covers/workers/workers-cover-01.avif"
1119  },
1120  {
1121    "cat": "co",
1122    "categoryLabel": "Company",
1123    "accent": "#7C3CE0",
1124    "title": "Why we split one company into focused brands",
1125    "ex": "Taurist could have stayed a do-everything agency. We separated the work so the way in stays clear.",
1126    "date": "2026-06-11",
1127    "read": "4 min",
1128    "href": "/notes/why-we-split-one-company-into-focused-brands",
1129    "heroImage": "/hub-static/assets/note-covers/company/company-cover-04.avif"
1130  },
1131  {
1132    "cat": "cw",
1133    "categoryLabel": "Conversion Works",
1134    "accent": "#F22248",
1135    "title": "Stop A/B testing your button colors",
1136    "ex": "Color tests are where conversion programs go to feel busy. The bigger gains usually sit higher in the decision hierarchy.",
1137    "date": "2026-06-06",
1138    "read": "8 min",
1139    "href": "/notes/stop-ab-testing-your-button-colors",
1140    "heroImage": "/hub-static/assets/note-covers/conversion-works/conversion-cover-05.avif"
1141  },
1142  {
1143    "cat": "wk",
1144    "categoryLabel": "Workers",
1145    "accent": "#F222B0",
1146    "title": "The work that should never have been manual",
1147    "ex": "Email triage, CRM updates, follow-ups, scheduling. Some repeat work becomes safer when a managed worker handles the first pass.",
1148    "date": "2026-05-30",
1149    "read": "5 min",
1150    "href": "/notes/the-work-that-should-never-have-been-manual",
1151    "heroImage": "/hub-static/assets/note-covers/workers/workers-cover-03.avif"
1152  },
1153  {
1154    "cat": "sw",
1155    "categoryLabel": "Siteworks",
1156    "accent": "#F26422",
1157    "title": "Conversion-aware design isn't a style",
1158    "ex": "You cannot bolt trust onto a finished site. Conversion-aware design is a set of decisions made before the first section is built.",
1159    "date": "2026-05-24",
1160    "read": "6 min",
1161    "href": "/notes/conversion-aware-design-isnt-a-style",
1162    "heroImage": "/hub-static/assets/note-covers/siteworks/siteworks-cover-02.avif"
1163  },
1164  {
1165    "cat": "cw",
1166    "categoryLabel": "Conversion Works",
1167    "accent": "#F22248",
1168    "title": "The audit we run before touching a single pixel",
1169    "ex": "Before redesigning the surface, a useful CRO audit diagnoses the friction, the evidence, and the first fix.",
1170    "date": "2026-05-19",
1171    "read": "6 min",
1172    "href": "/notes/the-audit-we-run-before-touching-a-single-pixel",
1173    "heroImage": "/hub-static/assets/note-covers/conversion-works/conversion-cover-06.avif"
1174  },
1175  {
1176    "cat": "co",
1177    "categoryLabel": "Company",
1178    "accent": "#7C3CE0",
1179    "title": "Founder-led, zero fluff: how we actually staff a project",
1180    "ex": "No account managers relaying messages. The person who scopes the work is close to the person doing it.",
1181    "date": "2026-05-14",
1182    "read": "4 min",
1183    "href": "/notes/founder-led-zero-fluff-how-we-actually-staff-a-project",
1184    "heroImage": "/hub-static/assets/note-covers/company/company-cover-01.avif"
1185  },
1186  {
1187    "cat": "wk",
1188    "categoryLabel": "Workers",
1189    "accent": "#F222B0",
1190    "title": "What a managed AI worker does on day one",
1191    "ex": "A clear business role, connected responsibilities, and an agreed initial scope. Day one starts from evaluated readiness, useful handoffs, and human ownership.",
1192    "date": "2026-05-09",
1193    "read": "7 min",
1194    "href": "/notes/what-a-managed-ai-worker-does-on-day-one",
1195    "heroImage": "/hub-static/assets/note-covers/workers/workers-cover-05.avif"
1196  },
1197  {
1198    "cat": "sw",
1199    "categoryLabel": "Siteworks",
1200    "accent": "#F26422",
1201    "title": "The fold is dead. Attention isn't.",
1202    "ex": "Stop fighting over what sits above 600px. Map where attention actually goe
1202s and build the page around it.",
1203    "date": "2026-05-03",
1204    "read": "5 min",
1205    "href": "/notes/the-fold-is-dead-attention-isnt",
1206    "heroImage": "/hub-static/assets/note-covers/siteworks/siteworks-cover-03.avif"
1207  },
1208  {
1209    "cat": "cw",
1210    "categoryLabel": "Conversion Works",
1211    "accent": "#F22248",
1212    "title": "Your checkout has a memory problem",
1213    "ex": "Returning shoppers should not have to re-prove what the store already knows. Every repeated field adds a reason to stop.",
1214    "date": "2026-04-27",
1215    "read": "6 min",
1216    "href": "/notes/your-checkout-has-a-memory-problem",
1217    "heroImage": "/hub-static/assets/note-covers/conversion-works/conversion-cover-03.avif"
1218  },
1219  {
1220    "cat": "co",
1221    "categoryLabel": "Company",
1222    "accent": "#7C3CE0",
1223    "title": "More force, less friction: what the slogan means in practice",
1224    "ex": "It is not just a tagline. It is the filter we run every feature, page, workflow, and project through.",
1225    "date": "2026-04-21",
1226    "read": "4 min",
1227    "href": "/notes/more-force-less-friction-what-the-slogan-means-in-practice",
1228    "heroImage": "/hub-static/assets/note-covers/company/company-cover-03.avif"
1229  },
1230  {
1231    "cat": "wk",
1232    "categoryLabel": "Workers",
1233    "accent": "#F222B0",
1234    "title": "Where AI workers quietly fail - and how to catch it early",
1235    "ex": "The failure is rarely loud. It is slow drift in quality that only a good oversight loop will surface.",
1236    "date": "2026-04-15",
1237    "read": "6 min",
1238    "href": "/notes/where-ai-workers-quietly-fail-and-how-to-catch-it-early",
1239    "heroImage": "/hub-static/assets/note-covers/workers/workers-cover-06.avif"
1240  },
1241  {
1242    "cat": "sw",
1243    "categoryLabel": "Siteworks",
1244    "accent": "#F26422",
1245    "title": "Speed is a conversion feature, not an engineering one",
1246    "ex": "Performance affects trust before a visitor reads a word. Speed belongs in the brief, not only the build ticket.",
1247    "date": "2026-04-09",
1248    "read": "5 min",
1249    "href": "/notes/speed-is-a-conversion-feature-not-an-engineering-one",
1250    "heroImage": "/hub-static/assets/note-covers/siteworks/siteworks-cover-06.avif"
1251  },
1252  {
1253    "cat": "cw",
1254    "categoryLabel": "Conversion Works",
1255    "accent": "#F22248",
1256    "title": "60% of your traffic already decided. Design for the other 40%.",
1257    "ex": "Some buyers will convert despite the page. Growth often lives with the undecided visitors who need better answers.",
1258    "date": "2026-04-02",
1259    "read": "7 min",
1260    "href": "/notes/60-percent-of-your-traffic-already-decided-design-for-the-other-40-percent",
1261    "heroImage": "/hub-static/assets/note-covers/conversion-works/conversion-cover-04.avif"
1262  },
1263  {
1264    "cat": "wk",
1265    "categoryLabel": "Workers",
1266    "accent": "#F222B0",
1267    "title": "The handoff document that makes automation safe",
1268    "ex": "Before a worker touches a workflow, write down the edge cases. That single page prevents most avoidable problems.",
1269    "date": "2026-03-27",
1270    "read": "5 min",
1271    "href": "/notes/the-handoff-document-that-makes-automation-safe",
1272    "heroImage": "/hub-static/assets/note-covers/workers/workers-cover-04.avif"
1273  },
1274  {
1275    "cat": "sw",
1276    "categoryLabel": "Siteworks",
1277    "accent": "#F26422",
1278    "title": "Building for the chamber: credible sites on a real timeline",
1279    "ex": "Local businesses do not need agency theater. They need a site that is live, fast, credible, and useful on day one.",
1280    "date": "2026-03-20",
1281    "read": "4 min",
1282    "href": "/notes/building-for-the-chamber-credible-sites-on-a-real-timeline",
1283    "heroImage": "/hub-static/assets/note-covers/siteworks/siteworks-cover-07.avif"
1284  }
1285];
1286
1287  function fmt(d) {
1288    var m = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
1289    var p = d.split("-");
1290    return m[parseInt(p[1],10)-1] + " " + parseInt(p[2],10) + ", " + p[0];
1291  }
1292  NOTES.sort(function (a, b) { return a.date < b.date ? 1 : a.date > b.date ? -1 : 0; });
1293
1294  var feat = document.getElementById("fnFeat");
1295  var grid = document.getElementById("fnGrid");
1296  var listHead = document.getElementById("fnListHead");
1297  var empty = document.getElementById("fnEmpty");
1298  var moreHead = document.getElementById("fnMoreHead");
1299  var secHead = document.getElementById("fnSecHead");
1300  var secTitle = document.getElementById("fnSecTitle");
1301  var secCount = document.getElementById("fnSecCount");
1302  var tabs = Array.prototype.slice.call(document.querySelectorAll(".f
1302n-tab"));
1303  var viewBtns = Array.prototype.slice.call(document.querySelectorAll("#fnView button"));
1304
1305  var activeFilter = "all";
1306  var activeView = "grid";
1307
1308  function metaHTML(n, onDark) {
1309    var c = CATS[n.cat];
1310    return '<span class="fn-meta">' +
1311      '<span class="cat"><span class="dot"></span>' + c.label + '</span>' +
1312      '<span class="sep"></span>' + fmt(n.date) +
1313      '</span>';
1314  }
1315
1316  function leadHTML(n, seed) {
1317    var c = CATS[n.cat];
1318    var href = n.href || c.href;
1319    return '<a class="fn-lead" href="' + href + '" style="--acc:' + c.accent + '">' +
1320      '<div class="fn-lead__cover" style="background-image:' + cover(n, seed) + '"></div>' +
1321      '<h2 class="fn-lead__title">' + n.title + '</h2>' +
1322      '<div class="fn-lead__meta">' + metaHTML(n) + '</div>' +
1323    '</a>';
1324  }
1325
1326  function sideHTML(n, seed) {
1327    var c = CATS[n.cat];
1328    var href = n.href || c.href;
1329    return '<a class="fn-side" href="' + href + '" style="--acc:' + c.accent + '">' +
1330      '<div class="fn-side__cover" style="background-image:' + cover(n, seed) + '"></div>' +
1331      '<div class="fn-side__body">' +
1332        '<div class="fn-side__title">' + n.title + '</div>' +
1333        metaHTML(n) +
1334      '</div>' +
1335    '</a>';
1336  }
1337
1338  var ARROW = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>';
1339  function cardHTML(n, seed) {
1340    var c = CATS[n.cat];
1341    var href = n.href || c.href;
1342    return '<a class="fn-card" href="' + href + '" style="--acc:' + c.accent + '">' +
1343      '<div class="fn-card__cover" style="background-image:' + cover(n, seed) + '"></div>' +
1344      '<div class="fn-card__date">' + fmt(n.date) + '</div>' +
1345      '<div class="fn-card__brand"><span class="dot"></span><span>' + c.label + '</span></div>' +
1346      '<div class="fn-card__body">' +
1347        '<h3 class="fn-card__title">' + n.title + '</h3>' +
1348        '<p class="fn-card__ex">' + n.ex + '</p>' +
1349        metaHTML(n) +
1350      '</div>' +
1351      '<span class="fn-card__arrow">' + ARROW + '</span>' +
1352    '</a>';
1353  }
1354
1355  function render() {
1356    grid.className = "fn-grid" + (activeView === "list" ? " is-list" : "");
1357    listHead.classList.toggle("show", activeView === "list");
1358
1359    if (activeFilter === "all") {
1360      if (activeView === "list") {
1361        // list view: one continuous list — featured notes included as rows
1362        feat.style.display = "none";
1363        feat.innerHTML = "";
1364        secHead.classList.remove("show");
1365        moreHead.style.display = "none";
1366        grid.innerHTML = NOTES.map(function (n, i) { return cardHTML(n, i); }).join("");
1367        empty.style.display = "none";
1368      } else {
1369        // grid view: featured block (lead + 3 stacked), then the rest in the grid
1370        feat.style.display = "";
1371        secHead.classList.remove("show");
1372        var lead = NOTES[0];
1373        var sides = NOTES.slice(1, 4);
1374        var rest = NOTES.slice(4);
1375        feat.innerHTML = leadHTML(lead, 0) +
1376          '<div class="fn-feat__side">' +
1377            sides.map(function (n, i) { return sideHTML(n, i + 1); }).join("") +
1378          '</div>';
1379        moreHead.style.display = "";
1380        moreHead.textContent = "More notes";
1381        grid.innerHTML = rest.map(function (n, i) { return cardHTML(n, i + 2); }).join("");
1382        empty.style.display = "none";
1383      }
1384    } else {
1385      // category view: no featured, just the grid/list of that brand
1386      feat.style.display = "none";
1387      feat.innerHTML = "";
1388      var c = CATS[activeFilter];
1389      var list = NOTES.filter(function (n) { return n.cat === activeFilter; });
1390      secHead.classList.add("show");
1391      secHead.style.setProperty("--acc", c.accent);
1392      secTitle.textContent = c.label;
1393      secCount.textContent = list.length + (list.length === 1 ? " note" : " notes");
1394      moreHead.style.display = "none";
1395      grid.innerHTML = list.map(function (n, i) { return cardHTML(n, i); }).join("");
1396      empty.style.display = list.length ? "none" : "block";
1397    }
1398  }
1399
1400  function setFilter(f) {
1401    activeFilter = f;
1402    tabs.forEach(function (b) {
1403      var on = b.getAttribute("data-filter") === f;
1404      b.classList.toggle("is-active", on);
1405      b.setAttribute("aria-selected", on ? "true" : "false");
1406    });
1407    render();
1408  }
1409  function setView(v) {
1410    activeView = v;
1411    viewBtns.forEach(function (b) { b.classList.toggle("is-active", b.getAttribute("data-view") === v); });
1412    render();
1413  }
1414
1415  tabs.forEach(function (b) { b.addEventListener("click", function () { setFilter(b.getAttribute("data-filter")); }); });
1416  viewBtns.forEach(function (b) { b.addEventListener("click", function () { setView(b.getAttribute("data-view")); }); });
1417
1418  var requestedFilter = new URLSearchParams(window.location.search).get("category");
1419  if (requestedFilter && CATS[requestedFilter]) {
1420    setFilter(requestedFilter);
1421  } else {
1422    render();
1423  }
1424
1425  // sticky bar: add a subtle shadow once it locks under the main nav
1426  var barWrap = document.getElementById("fnBarWrap");
1427  function navH() {
1428    var v = getComputedStyle(document.documentElement).getPropertyValue("--site-nav-h");
1429    return parseInt(v, 10) || 61;
1430  }
1431  function onScroll() {
1432    barWrap.classList.toggle("is-stuck", barWrap.getBoundingClientRect().top <= navH() + 1);
1433  }
1434  window.addEventListener("scroll", onScroll, { passive: true });
1435  window.addEventListener("resize", onScroll);
1436  onScroll();
1437
1438  // subscribe button: cursor-tracking light streak (matches the note article CTA)
1439  var subBtn = document.getElementById("fnSubscribeBtn");
1440  if (subBtn) {
1441    subBtn.addEventListener("pointermove", function (e) {
1442      var r = subBtn.getBoundingClientRect();
1443      subBtn.style.setProperty("--mx", (e.clientX - r.left) + "px");
1444      subBtn.style.setProperty("--my", (e.clientY - r.top) + "px");
1445    });
1446  }
1447})();
1448</script>
vendor: 1 bytes, line 1448
1448
1449<script src="/hub-static/newsletter-signup.js"></script>
1449
1450</body>
1451</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.