@domandigital/craft 0.23.1 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -5
- package/CHARACTER.md +98 -97
- package/COPY.md +3 -2
- package/PRINCIPLES.md +5 -5
- package/README.md +8 -8
- package/REGISTERS.md +3 -3
- package/design-review.schema.json +1 -1
- package/dist/{audit-DESBVHQJ.js → audit-Q73WGKMS.js} +3 -3
- package/dist/audit.cjs +88 -23
- package/dist/audit.js +88 -23
- package/dist/{chunk-GA3AJN67.js → chunk-2CCL5CO7.js} +17 -15
- package/dist/{chunk-M5QSMIT6.js → chunk-4HPAMB52.js} +4 -4
- package/dist/{chunk-LRWKKJIW.js → chunk-6TOY3FAT.js} +5 -5
- package/dist/{chunk-GDDBCHQR.js → chunk-GJZ4Y5PT.js} +5 -5
- package/dist/{chunk-ZV3FPQPM.js → chunk-OA2MBUJJ.js} +1 -1
- package/dist/{chunk-V3GJSISR.js → chunk-OOT4QLO3.js} +14 -14
- package/dist/{chunk-7DPB5G4G.js → chunk-PXJKYMXF.js} +2 -2
- package/dist/{chunk-EHMEMSM2.js → chunk-R4KPE4G5.js} +72 -9
- package/dist/{cli-FCFRPPHZ.js → cli-766R2BUR.js} +5 -5
- package/dist/{cli-3PFEOEQI.js → cli-CE7ENNNG.js} +6 -6
- package/dist/{cli-SOH4QMMW.js → cli-DTJOOTNM.js} +3 -3
- package/dist/{cli-36YQA6BP.js → cli-EQJITFVE.js} +4 -4
- package/dist/{cli-RXXGSKD6.js → cli-SD2BJSGP.js} +6 -6
- package/dist/{cli-TP5ZMJOL.js → cli-TBBXUECM.js} +5 -5
- package/dist/{cli-YOSHHLIV.js → cli-TV2IJ5TV.js} +2 -3
- package/dist/{cli-7IBKMUMM.js → cli-U3SPFILJ.js} +9 -9
- package/dist/cli.js +3 -3
- package/dist/index.cjs +89 -25
- package/dist/index.d.cts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +89 -25
- package/dist/{viewports-cli-ET664I2Y.js → viewports-cli-SOOHAD5D.js} +3 -3
- package/package.json +1 -1
- package/word-lists.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @domandigital/craft
|
|
2
2
|
|
|
3
|
+
## 0.24.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 472408d: The calibration captures and the reviewer corpus move to a private repository, and craft names no client, client person, staff member or reviewer. `calibration/` and `reviews/` now live in Doman-Digital/dd-craft-corpus; the tests that read them find it through `CRAFT_CORPUS_DIR` or a `dd-craft-corpus` checkout beside dd-packages, and skip with a note when it is absent. The shape calibration scripts find it the same way and stop, saying where to put it, when it is missing, and `scripts/blind/prepare.mjs` reads each site's null-model brief from the run's config (`nullBrief`). The docs that ship (README, PRINCIPLES, COPY, CHARACTER, REGISTERS, CHANGELOG) describe clients and reviewers by trade and role instead of by name. A new guard, `scripts/deny-check.mjs`, checks every shipped file, the rest of the package and the packed tarball against salted hashes of the names, and goes red on a canary to prove it works. No API changes.
|
|
8
|
+
|
|
9
|
+
## 0.23.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 1e4bcb5: <!-- copy-ok: names the shapes the release starts reporting --> A new review-tier copy tell, `absolute-negation` (catalogue 2026.10.9), reports a verbless fragment that opens on never, nothing, nobody or "no" + noun after a clause break: "A guardian consents by email; never pre-ticked", "Pay per user per month; no servers", "nothing to buy or run", "Nothing on-site to join", "no duplicates". A 92EL deck passed the gate with them. It never blocks. A sentence with a subject and a verb ("Players never open the lists", "Nothing is copied by hand"), an instruction ("Never share your password"), a Harvard citation with no date ("ICO, no date") and a "No" form answer pass, and a fragment the blocking `no-x-no-y`, `no-x-badge` or `negative-reassurance` already reports is not reported twice.
|
|
14
|
+
|
|
3
15
|
## 0.23.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -16,13 +28,13 @@
|
|
|
16
28
|
|
|
17
29
|
### Patch Changes
|
|
18
30
|
|
|
19
|
-
- 68f65c3: <!-- copy-ok: names the phrases the release starts catching --> craft learns from
|
|
31
|
+
- 68f65c3: <!-- copy-ok: names the phrases the release starts catching --> craft learns from a studio reviewer's design and copy reviews (catalogue 2026.10.5). A 73-note review of the new Doman Digital site is the first record in a reviewer corpus (`reviews/` in the private corpus repository since 0.24.0; the schema test keeps each record to `design-review.schema.json`), and CHARACTER.md writes up the principles it teaches. `design-review.schema.json` gains optional fields for a reviewer's own record: `reviewer`, `date`, `source` and `rulings` on the review, and `source`, `verdict`, `founderRuling`, `principle` and `tells` on a note; `REVIEW_VERDICTS` is exported. Two new review-tier tells: `hero-cta-pair` (source and rendered) reports two buttons side by side in a hero, found in 140 of 140 null-build heroes, and `confession-line` reports copy that scopes a business by what it has not done or will not do ("What this is and is not", "we have not yet built", "our experience so far is one practice"). `plain-english`, already blocking, now covers the whole family the founder banned on 20 October 2026: bare "plainly" and "in plain terms/language/words", with licence text ("plainly marked") let through. `review-phrase` adds "plain" as a self-description ("a plain recommendation").
|
|
20
32
|
|
|
21
33
|
## 0.22.0
|
|
22
34
|
|
|
23
35
|
### Minor Changes
|
|
24
36
|
|
|
25
|
-
- 3902169: The every-viewport measure counts phone screens to the footer (DOM-1052, part of DOM-772): page height at 375 x 667 over 667, with lazy images loaded. `screens` sets a length budget per route, route pattern or prefix (`{ "/": 6.5, "/services/*": 6, "/areas/[town]": 5, "*": 9 }`, the most specific wins), on `measureViewports`, `measureRoute`, `measureSite` and `viewports.json`. A route over its budget fails a new `screens` check ("page too long for a phone"), baselined like the others; with no budget the count is only reported. `ViewportsResult.screens` and the measured file carry the count, `craft viewports` and `craft phone-first --measured` print it for every route, and `screenBudgetFor`, `checkScreenBudgets` and `formatScreens` are exported.
|
|
37
|
+
- 3902169: The every-viewport measure counts phone screens to the footer (DOM-1052, part of DOM-772): page height at 375 x 667 over 667, with lazy images loaded. `screens` sets a length budget per route, route pattern or prefix (`{ "/": 6.5, "/services/*": 6, "/areas/[town]": 5, "*": 9 }`, the most specific wins), on `measureViewports`, `measureRoute`, `measureSite` and `viewports.json`. A route over its budget fails a new `screens` check ("page too long for a phone"), baselined like the others; with no budget the count is only reported. `ViewportsResult.screens` and the measured file carry the count, `craft viewports` and `craft phone-first --measured` print it for every route, and `screenBudgetFor`, `checkScreenBudgets` and `formatScreens` are exported. One client home page ran 12.7 phone screens against a target of 6.5.
|
|
26
38
|
|
|
27
39
|
## 0.21.0
|
|
28
40
|
|
|
@@ -51,14 +63,14 @@
|
|
|
51
63
|
|
|
52
64
|
### Patch Changes
|
|
53
65
|
|
|
54
|
-
- cc6c0b4: Document opening-photo selection using the
|
|
66
|
+
- cc6c0b4: Document opening-photo selection using the follow-up on one client's opening photographs: compare photographic strength, crop and sequence before service variety or slide count, with stakeholder preference kept separate from unmeasured customer outcomes.
|
|
55
67
|
|
|
56
68
|
## 0.20.3
|
|
57
69
|
|
|
58
70
|
### Patch Changes
|
|
59
71
|
|
|
60
72
|
- 6800957: Compare carousel purposes before diagnosing duplication, avoid selecting a design by edit size alone, and allow explicit protected-staging placeholders while retaining outstanding publication requirements.
|
|
61
|
-
- d0d9234: Decision confidence: reviewing a proposed change, with attribution to
|
|
73
|
+
- d0d9234: Decision confidence: reviewing a proposed change, with attribution to a studio reviewer and the provenance of the principle (a phone-layout review on 15 October 2026) in CHARACTER.md and PRINCIPLES.md. New `craft direction review --notes design-review.json` weighs feedback against the visitor's job in `art-direction.json`. Each note keeps the observation, the visitor problem under it, the proposed solution, the evidence and the smallest defensible change apart, and judges the suggestion and the recommendation separately. The problem is observed, inferred, preference or unknown: only something inspected (a screenshot, rendered behaviour, source, a measurement, the page's content) makes it observed, a report from an audit, stakeholder or customer makes it inferred, and a claim at a width nobody looked at stays unknown. A recommendation is a confirmed correction, a design hypothesis, an optional refinement or no change, and a review can end on "no change is recommended". Changes climb a ladder from copy to restructure; a structural step or an addition (carousel, script, dependency, animation, testimonial, call to action, repeated content) has to say why every smaller step was not enough. A second carousel is not supported where a gallery exists, information is not removed without an observed cost, a reasoned section order is not overridden by a preference, repetition and similarity to other sites are not defects without a stated cost to the visitor, and a change that needs a fact nobody supplied is held rather than written in. `craft direction validate` also raises an inferred identity finding when a job that worries about who the visitor would deal with first meets a person after three or more sections, and asks for a name and a line, not a biography moved up or a portrait. New `differentiation` lens, `design-review.schema.json`, and exports `assessReview`, `isStructural` and the review types. Fixtures: a calibration review of a plumbing homepage plus clinic and salon reviews, which reach different outcomes for different reasons.
|
|
62
74
|
- bb9b233: Decision confidence. A page in `art-direction.json` can now record `confidence`: the widths its decisions were examined at (`mobile`, `tablet`, `desktop`) and the evidence it offers (`proof`: work, people, credentials, reviews, experience or outcomes, each with a section, `first-look` or `on-request` depth, and a reason tied to the customer's job). `craft direction validate` reads it and prints findings tagged observed, inferred or unknown, each with the lens it belongs to (relevance, hierarchy, evidence, identity, action, disclosure, mobile) and why it matters to that visitor. There is no score and no conversion claim, and nothing is required: a file without `confidence` validates and reports exactly as before, and no evidence kind, founder portrait, slideshow, phone number or section order is ever demanded. A finding made on one width is never carried to another; widths nobody examined are reported as unknown. `craft direction research` asks where the visitor looks, what would settle it and what the next step is, without assuming a phone or a portrait. Exports `assessConfidence`, `validateConfidence`, `viewportOf` and the new types; the JSON Schema gains `confidence`. CHARACTER.md, PRINCIPLES.md, STANDARD.md section 10 and the README describe it, and three fixtures (sole-trader plumber, private physiotherapy practice, appointment-based salon) show one principle giving three different answers.
|
|
63
75
|
- 0dba997: Sites made with create-site deploy their preview to Cloudflare only. `scripts/gates/deploy-preview.mjs` no longer has a Vercel branch or looks for `.vercel/project.json`, `preview.host` in `site.programme.json` is `cloudflare` or null, the `host` answer prompt suggests `cloudflare`, and `docs/site-programme.md` and the README say so. A site that still sets `preview.host` to `vercel` now stops at Stage 06 with a message naming the host; remove the key or set it to `cloudflare`. The synthetic README and a craft comment no longer name Vercel; no behaviour changes in those two.
|
|
64
76
|
|
|
@@ -105,7 +117,7 @@
|
|
|
105
117
|
|
|
106
118
|
### Minor Changes
|
|
107
119
|
|
|
108
|
-
- 09b49ac: Fingerprint version 3: the estate comparison now measures ground temperature and section structure (DOM-637). A warm cream and a cool porcelain page used to score as the same "grey ground" because hue barely counts at a ground's chroma; `groundDistance` adds a temperature gap (warm, neutral, cool from hue, scaled by chroma) on top of ΔE, and shared grounds are named with it ("cream ground", "cool grey ground", "warm dark ground"). Two new distance parts, `rhythm` (the page's bands of light and dark in running order, the opening counted twice) and `hero` (text placement and width, headline class and size, which side the picture sits), give structure a quarter of the weight; `DISTANCE_WEIGHTS` is now accent 0.2, type 0.2, ground 0.1, shape 0.1, motion 0.05, effects 0.1, layout 0.1, rhythm 0.1, hero 0.05, and a part only one side measures is left out rather than counted as different, so version 1 and 2 fingerprints in a register or null model compare without being re-snapshotted. Shared traits name the structure too: "light hero then dark band", "left-aligned serif hero, photo right", "same running order". `craft snapshot` and `craft audit` take `--scheme light|dark` to ask the page for one colour scheme, and a snapshot's images record `left`. New exports: `groundDistance`, `groundTemperature`, `temperatureName`, `groundLabel`, `rhythmOf`, `rhythmDistance`, `heroDistance`, `bandOf`, `TEMPERATURE_FULL`, `TEMPERATURE_NAMED`, `TEMPERATURE_WEIGHT`, `OPENING_BANDS` and the `FingerprintHero`, `HeroImage`, `LightnessBand` and `Temperature` types. Calibrated on
|
|
120
|
+
- 09b49ac: Fingerprint version 3: the estate comparison now measures ground temperature and section structure (DOM-637). A warm cream and a cool porcelain page used to score as the same "grey ground" because hue barely counts at a ground's chroma; `groundDistance` adds a temperature gap (warm, neutral, cool from hue, scaled by chroma) on top of ΔE, and shared grounds are named with it ("cream ground", "cool grey ground", "warm dark ground"). Two new distance parts, `rhythm` (the page's bands of light and dark in running order, the opening counted twice) and `hero` (text placement and width, headline class and size, which side the picture sits), give structure a quarter of the weight; `DISTANCE_WEIGHTS` is now accent 0.2, type 0.2, ground 0.1, shape 0.1, motion 0.05, effects 0.1, layout 0.1, rhythm 0.1, hero 0.05, and a part only one side measures is left out rather than counted as different, so version 1 and 2 fingerprints in a register or null model compare without being re-snapshotted. Shared traits name the structure too: "light hero then dark band", "left-aligned serif hero, photo right", "same running order". `craft snapshot` and `craft audit` take `--scheme light|dark` to ask the page for one colour scheme, and a snapshot's images record `left`. New exports: `groundDistance`, `groundTemperature`, `temperatureName`, `groundLabel`, `rhythmOf`, `rhythmDistance`, `heroDistance`, `bandOf`, `TEMPERATURE_FULL`, `TEMPERATURE_NAMED`, `TEMPERATURE_WEIGHT`, `OPENING_BANDS` and the `FingerprintHero`, `HeroImage`, `LightnessBand` and `Temperature` types. Calibrated on a UK electrician's site against a UK plumber's stone and porcelain light modes (`calibration/estate/2026-10-09-temperature/`); the existing register's pair ordering keeps a Kendall tau of 0.83 and no pair crosses the sibling line.
|
|
109
121
|
|
|
110
122
|
## 0.18.2
|
|
111
123
|
|
package/CHARACTER.md
CHANGED
|
@@ -286,7 +286,7 @@ the licensor's own page. It is not a shortlist, and nothing proposes from it.
|
|
|
286
286
|
|
|
287
287
|
`craft direction init` writes what the site does today with every reason
|
|
288
288
|
empty, so the first thing it produces is the list of things nobody decided.
|
|
289
|
-
Run on
|
|
289
|
+
Run on an electrician client's live home page (2026-09-23) it records Fraunces, Manrope, a cream
|
|
290
290
|
ground and pill buttons, three of them on the catalogue, and zero of seven
|
|
291
291
|
choices decided.
|
|
292
292
|
|
|
@@ -302,8 +302,8 @@ A file from phase A that holds only exceptions stays valid.
|
|
|
302
302
|
|
|
303
303
|
### Decision confidence
|
|
304
304
|
|
|
305
|
-
|
|
306
|
-
|
|
305
|
+
From a reviewer on the studio's team, whose question became the lens. The
|
|
306
|
+
question it asks of every page:
|
|
307
307
|
|
|
308
308
|
> What does this visitor need to see, understand and believe before they are
|
|
309
309
|
> comfortable taking the next appropriate action?
|
|
@@ -409,15 +409,15 @@ slideshow; two have no phone action; none has a founder portrait; all validate.
|
|
|
409
409
|
|
|
410
410
|
#### Where it came from
|
|
411
411
|
|
|
412
|
-
On 15 October 2026
|
|
413
|
-
business's homepage.
|
|
412
|
+
On 15 October 2026 a reviewer on the studio's team reviewed the phone layout
|
|
413
|
+
of a UK plumbing business's homepage. The desktop was not reviewed. Four things came out of
|
|
414
414
|
it, and they are kept apart on purpose:
|
|
415
415
|
|
|
416
|
-
1. **
|
|
416
|
+
1. **The reviewer's observations.** The owner was introduced late. Information about the
|
|
417
417
|
work, services, reviews and the owner felt fragmented. Visitors should be
|
|
418
418
|
able to feel confident without searching. The site could show more
|
|
419
419
|
personality. Trust signals should read as a set.
|
|
420
|
-
2. **
|
|
420
|
+
2. **The reviewer's proposed solutions.** A hero slideshow. Removing some project
|
|
421
421
|
captions.
|
|
422
422
|
3. **An independent audit's conclusions.** It agreed with the underlying
|
|
423
423
|
concerns, that the owner should be met earlier and credibility shown sooner.
|
|
@@ -526,7 +526,7 @@ A note in a review:
|
|
|
526
526
|
"id": "owner-late",
|
|
527
527
|
"lens": "identity",
|
|
528
528
|
"observation": "The owner is introduced too far down the page.",
|
|
529
|
-
"raisedBy": "
|
|
529
|
+
"raisedBy": "The reviewer (stakeholder), agreed by the independent audit",
|
|
530
530
|
"problem": "A homeowner letting a stranger into the house cannot tell who is coming until well down the page.",
|
|
531
531
|
"basis": "observed",
|
|
532
532
|
"evidence": [
|
|
@@ -562,7 +562,7 @@ register numbers; a founder biography declined because booking comes first.
|
|
|
562
562
|
#### Context and learning from a later result
|
|
563
563
|
|
|
564
564
|
The 15 October calibration records the earlier audit's recommendation, not a
|
|
565
|
-
permanent verdict. The later
|
|
565
|
+
permanent verdict. The later mobile comparison on the same plumbing site on 18 October preferred
|
|
566
566
|
work photographs followed by a compact owner introduction, then trust and contact.
|
|
567
567
|
The useful test is whether each alternative answers the visitor's question.
|
|
568
568
|
Considering smaller edits remains required; fewer edits alone do not establish
|
|
@@ -597,7 +597,7 @@ Compare clarity, framing, visible completion, distracting surroundings and the
|
|
|
597
597
|
visual standard set by the lead image. A technically sound carousel can still
|
|
598
598
|
weaken the page when its later slides are noticeably poorer.
|
|
599
599
|
|
|
600
|
-
On 18 October 2026, after approving
|
|
600
|
+
On 18 October 2026, after approving the plumbing site's mobile flow, the founder pointed out
|
|
601
601
|
that the radiator and kitchen-tap slides did not compare with the first bathroom
|
|
602
602
|
photograph. The initial selection had favoured showing different services. A
|
|
603
603
|
review of the available photographs found that the radiator's unfinished edge
|
|
@@ -632,24 +632,23 @@ back as `change`, ask for what is `hold`, find out what is `gather-evidence`,
|
|
|
632
632
|
and leave what is `no-change`. When a note names something that was not
|
|
633
633
|
inspected, look before you act on it.
|
|
634
634
|
|
|
635
|
-
###
|
|
635
|
+
### Review of the studio's own site, 2026-10-19
|
|
636
636
|
|
|
637
|
-
|
|
638
|
-
(canvas 986559) on 18 and 19 October 2026: 73 comments across
|
|
639
|
-
services, work,
|
|
640
|
-
and contact pages. The whole review is kept, note by note, in
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
founder's ruling where one was needed, and the principle each note teaches. The
|
|
637
|
+
A reviewer on the studio's team reviewed the preview of the studio's own new
|
|
638
|
+
site on Pastel (canvas 986559) on 18 and 19 October 2026: 73 comments across
|
|
639
|
+
the home, services, work, a client case, clinics, who-we-help, process,
|
|
640
|
+
pricing, plans and contact pages. The whole review is kept, note by note, in
|
|
641
|
+
the studio's private reviewer corpus: the reviewer's words as written, what
|
|
642
|
+
was proposed, what was done with it, the founder's ruling where one was
|
|
643
|
+
needed, and the principle each note teaches. The
|
|
645
644
|
founder went through it on 20 October 2026. As in "Where it came from" above,
|
|
646
645
|
four things are kept apart.
|
|
647
646
|
|
|
648
|
-
#### What
|
|
647
|
+
#### What the reviewer saw
|
|
649
648
|
|
|
650
649
|
Twelve notes are praise, and they are a record of what to keep: the structure
|
|
651
650
|
and type, the four routes in, the who-we-help page ("a site that reads as a van
|
|
652
|
-
roof"),
|
|
651
|
+
roof"), a barber client's case, the six-step process and the responsibility
|
|
653
652
|
matrix. The rest name problems. These matter beyond this one site:
|
|
654
653
|
|
|
655
654
|
- Two equal buttons in the hero (#5), and again on the process page (#36).
|
|
@@ -669,17 +668,17 @@ matrix. The rest name problems. These matter beyond this one site:
|
|
|
669
668
|
care and £70 of website (#43).
|
|
670
669
|
- Closed lists where the work is open: the hero sub-line and route 3 narrowed
|
|
671
670
|
to bookings and enquiries (#2, #6, #25).
|
|
672
|
-
- A page that contradicts itself:
|
|
671
|
+
- A page that contradicts itself: a client case's form said both that enquiries
|
|
673
672
|
reach the inbox and that details stay out of one (#15), and a process step
|
|
674
673
|
said "paid" for a product that had been retired (#22).
|
|
675
674
|
- On a phone, the hero image crops badly (#55).
|
|
676
675
|
|
|
677
|
-
#### What
|
|
676
|
+
#### What the reviewer proposed
|
|
678
677
|
|
|
679
678
|
Specific wording for most notes, and three larger changes: a hero slideshow of
|
|
680
679
|
client systems (#3), a call to action after several sections (#50, #51, #70),
|
|
681
|
-
and a social media card (#72).
|
|
682
|
-
often used the patterns COPY.md blocks. Four of
|
|
680
|
+
and a social media card (#72). The diagnoses were nearly all right. The wording
|
|
681
|
+
often used the patterns COPY.md blocks. Four of the comments blocked at
|
|
683
682
|
<!-- copy-ok: quoting the reviewer's draft line -->
|
|
684
683
|
catalogue 2026.10.4 ("No licence, no lock-in" in #42 is one), and eight do once
|
|
685
684
|
the plain-English family is widened.
|
|
@@ -696,12 +695,12 @@ the plain-English family is widened.
|
|
|
696
695
|
<!-- copy-ok: naming the banned adverb -->
|
|
697
696
|
- The adverb "plainly" and its kin are banned, with "plain English".
|
|
698
697
|
- Cut "Our clinic experience so far is one practice" (#8). On the clinics page
|
|
699
|
-
keep "Built and run by us", and describe what
|
|
700
|
-
practice whose clinicians work remotely (#13).
|
|
698
|
+
keep "Built and run by us", and describe what the client practice is: a
|
|
699
|
+
growing practice whose clinicians work remotely (#13).
|
|
701
700
|
- A testimonial (#9) is reworded only once its author approves the new words.
|
|
702
701
|
- Held for their own decisions: e-commerce as a sector (#27), a clinic
|
|
703
702
|
subscription with its own price (#49), response times (#54) and social media
|
|
704
|
-
(#72).
|
|
703
|
+
(#72). One product stays off /work (#59). Quarterly packs are declined for the
|
|
705
704
|
site (#53).
|
|
706
705
|
|
|
707
706
|
#### The principles
|
|
@@ -709,7 +708,7 @@ the plain-English family is widened.
|
|
|
709
708
|
Each id is what a note's `principle` field names in the record.
|
|
710
709
|
|
|
711
710
|
- `open-shop`: precise, never confessional or absolute. Scope is shown by
|
|
712
|
-
exact claims ("the portal we run for
|
|
711
|
+
exact claims ("the portal we run for a children's therapy practice"), and a contractual fact is
|
|
713
712
|
said as what the buyer gets. `confession-line` reports the shapes for
|
|
714
713
|
review.
|
|
715
714
|
- `summary-pages-carry-substance`: a page that summarises carries a sentence
|
|
@@ -739,27 +738,28 @@ Each id is what a note's `principle` field names in the record.
|
|
|
739
738
|
|
|
740
739
|
#### The counter-lesson
|
|
741
740
|
|
|
742
|
-
|
|
741
|
+
The reviewer's diagnoses beat Claude's defaults. Claude's first pass on this review would
|
|
743
742
|
have kept the "What this is and is not" sentence, the two hero buttons, the
|
|
744
743
|
noun-list service cards and three proof numbers in a row. Each is a default
|
|
745
744
|
craft names (`confession-line`, `hero-cta-pair`, the summary-card pattern,
|
|
746
745
|
`stats-row`). Where the question is "does this read as decided and generous to
|
|
747
|
-
the buyer",
|
|
748
|
-
proof ledger and the house rules held:
|
|
749
|
-
live yet (#53, #54, #72), and
|
|
750
|
-
like anyone's. A reviewer's diagnosis is taken on its
|
|
751
|
-
words are copy, and copy is checked.
|
|
746
|
+
the buyer", the reviewer was right. Where it is "is it true, and is it
|
|
747
|
+
allowed", the proof ledger and the house rules held: the review asked for
|
|
748
|
+
promises that are not live yet (#53, #54, #72), and its replacement wording
|
|
749
|
+
goes through copy-check like anyone's. A reviewer's diagnosis is taken on its
|
|
750
|
+
merits; a reviewer's words are copy, and copy is checked.
|
|
752
751
|
|
|
753
752
|
#### Feeding later reviews in
|
|
754
753
|
|
|
755
|
-
Every later review,
|
|
754
|
+
Every later review, from this reviewer or another, goes through the
|
|
756
755
|
`reviewer-intake` skill in claude-kit: pull the canvas, keep each note whole,
|
|
757
756
|
classify it, check its facts against the proof ledger, brand facts and Linear,
|
|
758
|
-
write the record
|
|
759
|
-
what recurs. `src/__tests__/reviews.test.ts` holds each record to
|
|
760
|
-
and to this file, and fires every tell a note taught on the words
|
|
761
|
-
|
|
762
|
-
|
|
757
|
+
write the record in the studio's private reviewer corpus, and propose tells or
|
|
758
|
+
fixtures for what recurs. `src/__tests__/reviews.test.ts` holds each record to
|
|
759
|
+
the schema and to this file, and fires every tell a note taught on the words
|
|
760
|
+
it flagged. This file names no reviewer and no client: a section is headed for
|
|
761
|
+
what was reviewed and the date. The corpus is private and is not part of the
|
|
762
|
+
npm package.
|
|
763
763
|
|
|
764
764
|
## Declaring an exception
|
|
765
765
|
|
|
@@ -864,7 +864,7 @@ rest are weighed over what remains, so older registers and null models
|
|
|
864
864
|
compare without being re-snapshotted.
|
|
865
865
|
|
|
866
866
|
**Ground temperature.** ΔE alone files every light neutral page as one
|
|
867
|
-
paper:
|
|
867
|
+
paper: an electrician's cream (`oklch(0.96 0.010 82)`) and a plumber's porcelain
|
|
868
868
|
(`#F1F3F4`, `oklch(0.96 0.003 229)`) are ΔE 0.013 apart, a tenth of the
|
|
869
869
|
ground scale, and nobody takes them for the same page. A page ground is the
|
|
870
870
|
largest area on the page and the eye adapts to it, so a tint far below what
|
|
@@ -1001,8 +1001,8 @@ A list of tells goes stale; the model does not. So signal 2 asks the model
|
|
|
1001
1001
|
directly: given this brief and nothing else, what would you build?
|
|
1002
1002
|
|
|
1003
1003
|
```bash
|
|
1004
|
-
craft null build --brief "
|
|
1005
|
-
craft audit https://www.
|
|
1004
|
+
craft null build --brief "Example Electrical, electricians based in Reading ..." --out null/electrician
|
|
1005
|
+
craft audit https://www.example-electrical.co.uk --null null/electrician
|
|
1006
1006
|
```
|
|
1007
1007
|
|
|
1008
1008
|
`null build` runs `claude -p` about 20 times (`--runs`), from an empty folder
|
|
@@ -1042,9 +1042,9 @@ The agency's biggest tell is not on any one site. It is its clients looking
|
|
|
1042
1042
|
like each other. `estate.json` holds one fingerprint per shipped site:
|
|
1043
1043
|
|
|
1044
1044
|
```bash
|
|
1045
|
-
craft estate add https://www.
|
|
1046
|
-
craft estate compare
|
|
1047
|
-
craft estate compare
|
|
1045
|
+
craft estate add https://www.example-electrical.co.uk --id electrician --client "Example Electrical"
|
|
1046
|
+
craft estate compare # every pair, closest first
|
|
1047
|
+
craft estate compare electrician # one site against the rest
|
|
1048
1048
|
craft estate compare https://staging.example.test # a new build before it ships
|
|
1049
1049
|
```
|
|
1050
1050
|
|
|
@@ -1071,13 +1071,13 @@ Sites that share one component are rarer than siblings and easier to fix:
|
|
|
1071
1071
|
```bash
|
|
1072
1072
|
craft estate compare --component cta-band # every pair's closest CTA bands
|
|
1073
1073
|
craft estate compare --component pricing --json
|
|
1074
|
-
craft estate compare
|
|
1074
|
+
craft estate compare electrician --component cta-band # one site against the rest
|
|
1075
1075
|
```
|
|
1076
1076
|
|
|
1077
1077
|
Each pair lists what its two components share ("centred", "1 button", "same
|
|
1078
1078
|
coloured band"), closest first. There is no sibling line for components yet:
|
|
1079
1079
|
it needs a calibration set of real components (see the CTA collection in
|
|
1080
|
-
`calibration/idiom/cta/` once it exists), so this ranks and names, and judges
|
|
1080
|
+
`calibration/idiom/cta/` in the private corpus once it exists), so this ranks and names, and judges
|
|
1081
1081
|
nothing. Only sites added with snapshot v2 have components to compare, and
|
|
1082
1082
|
the command says so when fewer than two have the role. `--component` takes
|
|
1083
1083
|
one of `cta-band`, `footer-cta`, `pricing`, `testimonials`, `faq`, `process`,
|
|
@@ -1094,8 +1094,8 @@ says so rather than printing nothing.
|
|
|
1094
1094
|
`craft report` reads one site against everything above and gives a verdict:
|
|
1095
1095
|
|
|
1096
1096
|
```bash
|
|
1097
|
-
craft report https://www.
|
|
1098
|
-
craft retrofit https://www.
|
|
1097
|
+
craft report https://www.example-electrical.co.uk --repo . --null null/electrician --estate ../estate.json
|
|
1098
|
+
craft retrofit https://www.example-electrical.co.uk --repo . --null null/electrician --estate ../estate.json --out RETROFIT.md
|
|
1099
1099
|
```
|
|
1100
1100
|
|
|
1101
1101
|
| Verdict | When |
|
|
@@ -1165,7 +1165,7 @@ measured colour only.
|
|
|
1165
1165
|
Cells read *source findings / R if seen on the rendered page*. Nothing here
|
|
1166
1166
|
blocks; it is for a person to read.
|
|
1167
1167
|
|
|
1168
|
-
| Tell | DD |
|
|
1168
|
+
| Tell | DD | Salon | Therapy | Accountant | Skincare | Barber | Electrician |
|
|
1169
1169
|
|---|---|---|---|---|---|---|---|
|
|
1170
1170
|
| `reflex-font` | 15 / · | 2 / · | 3 / R | 2 / R | 2 / · | 1 / · | |
|
|
1171
1171
|
| `reflex-font-2` | 7 / R | 34 / R | 2 / · | 1 / R | 3 / R | 4 / R | 12 / R |
|
|
@@ -1189,16 +1189,16 @@ blocks; it is for a person to read.
|
|
|
1189
1189
|
|
|
1190
1190
|
What it shows:
|
|
1191
1191
|
|
|
1192
|
-
- **The three survey findings reproduce where they can.**
|
|
1193
|
-
is found in source (18) and on its buttons;
|
|
1194
|
-
in source and its intro and glows on the page;
|
|
1192
|
+
- **The three survey findings reproduce where they can.** Therapy's violet
|
|
1193
|
+
is found in source (18) and on its buttons; Salon's intro, glows and glass are
|
|
1194
|
+
in source and its intro and glows on the page; Salon reveals 60% of the
|
|
1195
1195
|
sections below its fold on scroll, all three of them, one short of the
|
|
1196
|
-
four the rendered rule needs, and its source is over the reveal limit.
|
|
1196
|
+
four the rendered rule needs, and its source is over the reveal limit. A journal client's glass
|
|
1197
1197
|
hero and icon grid could not be checked: that repo is not attached to this
|
|
1198
1198
|
session.
|
|
1199
1199
|
- **Every site ships a reflex face.** Twelve of fourteen site-face pairs are
|
|
1200
|
-
on one of the two lists. Fraunces sets the headline on DD,
|
|
1201
|
-
- **DD and
|
|
1200
|
+
on one of the two lists. Fraunces sets the headline on DD, Skincare and Electrician.
|
|
1201
|
+
- **DD and Electrician were read as the closest pair** (0.46) on the first run, with
|
|
1202
1202
|
a green accent in common. DD's "green" was its floating WhatsApp button,
|
|
1203
1203
|
48px square, the only saturated paint on a near-black and white page. The
|
|
1204
1204
|
fingerprint now needs a panel's worth of area before a painted colour
|
|
@@ -1219,12 +1219,12 @@ False positives found and fixed in this run:
|
|
|
1219
1219
|
- The rendered reveal check read only a section and its direct children.
|
|
1220
1220
|
Found through the null models (below): a reveal on the cards two levels
|
|
1221
1221
|
down read as a still page. It now reads the text blocks inside a section
|
|
1222
|
-
too, ignoring anything fixed. Re-run the same day:
|
|
1222
|
+
too, ignoring anything fixed. Re-run the same day: Barber, which
|
|
1223
1223
|
has a `RevealWrapper`, now shows `reveal-everywhere` on the page (six of
|
|
1224
1224
|
nine sections below the fold).
|
|
1225
1225
|
|
|
1226
|
-
Not yet read by a person: the source counts for `icon-tile-stack` (
|
|
1227
|
-
and `glass-panel` (
|
|
1226
|
+
Not yet read by a person: the source counts for `icon-tile-stack` (Salon 93)
|
|
1227
|
+
and `glass-panel` (Salon 45) look high and are the first to check.
|
|
1228
1228
|
|
|
1229
1229
|
### Signal 2 first read, 2026-09-23
|
|
1230
1230
|
|
|
@@ -1262,18 +1262,18 @@ most of the null.
|
|
|
1262
1262
|
| Site | Score | Typical | Shares with the null |
|
|
1263
1263
|
|---|---|---|---|
|
|
1264
1264
|
| DD | 0.15 | yes | pill buttons (19 of 20), Fraunces headline (13 of 20) |
|
|
1265
|
-
|
|
|
1266
|
-
|
|
|
1267
|
-
|
|
|
1268
|
-
|
|
|
1269
|
-
|
|
|
1270
|
-
|
|
|
1265
|
+
| Accountant | 0.10 | yes, at the line | Inter body (18 of 20), yellow accent (16 of 20), white ground |
|
|
1266
|
+
| Salon | 0.05 | no | white ground, radial glow (13 of 20), Cormorant Garamond (9 of 20) |
|
|
1267
|
+
| Skincare | 0.05 | no | white ground, Fraunces (5 of 20), marquee (5 of 20) |
|
|
1268
|
+
| Barber | 0.05 | no | square buttons (18 of 20), Bebas Neue (9 of 20), dark ground |
|
|
1269
|
+
| Electrician | 0.05 | no | eyebrow chip (14 of 20), Manrope body |
|
|
1270
|
+
| Therapy | 0.00 | no | radial glow (10 of 20), Inter body |
|
|
1271
1271
|
|
|
1272
1272
|
Read with care: "not typical" says the site is not what Claude builds from
|
|
1273
|
-
the brief today. It does not say the site was decided.
|
|
1273
|
+
the brief today. It does not say the site was decided. Therapy scores 0.00
|
|
1274
1274
|
and still carries five catalogue tells on the page, violet among them: Claude
|
|
1275
1275
|
no longer builds that look for this brief, but it is still a known tell. That
|
|
1276
|
-
is what signal 1 is for. DD and
|
|
1276
|
+
is what signal 1 is for. DD and Accountant are the
|
|
1277
1277
|
two a model would most nearly have built unprompted.
|
|
1278
1278
|
|
|
1279
1279
|
**The harvest** (`calibration/null/harvest.txt`). No face outside the two
|
|
@@ -1302,11 +1302,11 @@ in `calibration/estate/`.
|
|
|
1302
1302
|
|
|
1303
1303
|
| Pair | Distance | Shares |
|
|
1304
1304
|
|---|---|---|
|
|
1305
|
-
| DD +
|
|
1306
|
-
| DD +
|
|
1307
|
-
|
|
|
1308
|
-
|
|
|
1309
|
-
|
|
|
1305
|
+
| DD + Skincare | **0.28, siblings** | no accent, Fraunces headline, no reveals |
|
|
1306
|
+
| DD + Electrician | 0.49 | Fraunces headline, grey ground, pill buttons |
|
|
1307
|
+
| Accountant + Therapy | 0.50 | white ground, square buttons, no reveals |
|
|
1308
|
+
| Skincare + Electrician | 0.56 | Fraunces headline |
|
|
1309
|
+
| Barber + anything | 0.60 to 0.86 | at most a marquee (with Skincare) |
|
|
1310
1310
|
|
|
1311
1311
|
One sibling pair in twenty-one, and it is the agency's own site with one of
|
|
1312
1312
|
its clients: the same Fraunces headline over a near-black and white page with
|
|
@@ -1400,13 +1400,13 @@ the register. Reports and retrofit plans are in `calibration/report/`.
|
|
|
1400
1400
|
|
|
1401
1401
|
| Site | Verdict | Raised | Actions |
|
|
1402
1402
|
|---|---|---|---|
|
|
1403
|
-
| DD | default | tells (12), typical (0.15), sibling of
|
|
1404
|
-
|
|
|
1405
|
-
|
|
|
1406
|
-
|
|
|
1407
|
-
|
|
|
1408
|
-
|
|
|
1409
|
-
|
|
|
1403
|
+
| DD | default | tells (12), typical (0.15), sibling of Skincare | 26 |
|
|
1404
|
+
| Skincare | default | tells (6), sibling of DD | 18 |
|
|
1405
|
+
| Salon | mixed | tells (18) | 27 |
|
|
1406
|
+
| Therapy | mixed | tells (9) | 18 |
|
|
1407
|
+
| Barber | mixed | tells (7) | 11 |
|
|
1408
|
+
| Electrician | mixed | tells (8) | 18 |
|
|
1409
|
+
| Accountant | mixed | typical (0.10) | 9 |
|
|
1410
1410
|
|
|
1411
1411
|
No site has an `art-direction.json`, so the reasons are not measured on any of
|
|
1412
1412
|
them and none can be *decided* yet. The first change after deciding is the
|
|
@@ -1420,15 +1420,15 @@ The estate and the seven null models were still on snapshot v1 (the AI set and t
|
|
|
1420
1420
|
|
|
1421
1421
|
| Measure | Before (v1) | After (v2) |
|
|
1422
1422
|
|---|---|---|
|
|
1423
|
-
| Estate typicality against its own brief's null (own): dd,
|
|
1423
|
+
| Estate typicality against its own brief's null (own): dd, salon, therapy, accountant, skincare, barber, electrician | 0.15, 0.05, 0.00, 0.10, 0.05, 0.05, 0.05 | 0.10, 0.05, 0.00, 0.10, 0.05, 0.05, 0.05 |
|
|
1424
1424
|
| Estate typicality against all seven pooled (same order) | 0.01, 0.00, 0.00, 0.09, 0.00, 0.01, 0.26 | 0.01, 0.00, 0.00, 0.10, 0.00, 0.01, 0.21 |
|
|
1425
1425
|
| Distance to own null (same order) | 0.340, 0.450, 0.503, 0.277, 0.442, 0.361, 0.518 | 0.443, 0.420, 0.530, 0.304, 0.479, 0.381, 0.558 |
|
|
1426
|
-
| Sibling pairs in the estate (below 0.31) | 1 (dd +
|
|
1427
|
-
| Null pages flagged when scored against the other six briefs (dd,
|
|
1426
|
+
| Sibling pairs in the estate (below 0.31) | 1 (dd + skincare, 0.28) | 0 (dd + skincare is now 0.58; closest pair is dd + electrician, 0.48) |
|
|
1427
|
+
| Null pages flagged when scored against the other six briefs (dd, salon, therapy, accountant, skincare, barber, electrician) | 20, 20, 19, 20, 19, 18, 15 of 20 | 20, 20, 20, 20, 20, 18, 18 of 20 |
|
|
1428
1428
|
| Null pages typical against the other six (same order) | 13, 10, 10, 12, 10, 4, 2 | 14, 8, 9, 13, 6, 7, 3 |
|
|
1429
1429
|
| AI set flagged against the pooled v2 null | 19 of 20 | 20 of 20 (typical 15, tell-heavy 20) |
|
|
1430
1430
|
|
|
1431
|
-
What moved: the estate is still atypical of what the model builds for its own brief (own typicality 0.10 or lower on all seven), and only
|
|
1431
|
+
What moved: the estate is still atypical of what the model builds for its own brief (own typicality 0.10 or lower on all seven), and only Electrician is close to the pooled null (0.21, down from 0.26; its shared traits are a hero eyebrow chip and pill buttons). The one sibling pair, the studio's own site and the skincare shop, is no longer one; the pair that stays closest is the studio's own site and the electrician (0.48). The AI set gained one flagged page (the 20 of 20 the flagged-rule decision records). Because the live sites were not frozen, the estate movement mixes the snapshot version with site changes, and this run cannot separate them.
|
|
1432
1432
|
|
|
1433
1433
|
`craft tells harvest` on the v2 models gives the same three candidates as before (red accent #e77a63, 66 of 140; square shape, 47 of 140; the opening `hero > hero > cards`, 54 of 140) and 40 recurring phrases (the same count as before; the list was not diffed line by line). The only difference is in the already-caught list, which now includes `no-real-imagery` (117 of 140), `hero-eyebrow-chip` (53), `stats-row` (42) and `unproven-claim` (35): tells that came in with snapshot v2 and later phases, which the v1 harvest could not see. Nothing was added to the catalogue, and no tell or threshold changed.
|
|
1434
1434
|
|
|
@@ -1450,19 +1450,19 @@ The board in question is the DD redesign's Stage 05 artefact (DOM-397, CRO-21);
|
|
|
1450
1450
|
|
|
1451
1451
|
### Ground temperature and structure, 2026-10-09
|
|
1452
1452
|
|
|
1453
|
-
|
|
1453
|
+
Plumber's light mode looked, to the founder, too much like Electrician, and craft gave the pair 0.59 sharing only "grey ground". Plumber then moved its light page from warm stone (`#EEEDE8`) to cool porcelain (`#F1F3F4`, the plumber's change), and craft scored the two Plumber pages 0.01 apart. Two things were missing: hue barely counts at a ground's chroma, and structure moved the score by a tenth at most. Fingerprint version 3 (DOM-637) adds ground temperature to the ground part, a rhythm part and a hero part, with the weights in *The rendered page* above. Measured on Electrician live (2026-10-09) and Plumber built locally at `c62590c` (stone, before #32) and `47f9d79` (porcelain), each snapshotted with `--scheme light` and `--scheme dark`; snapshots, a copy of the redesign workstream's register and the full tables are in `calibration/estate/2026-10-09-temperature/`. "Before" is craft 0.18.1's distance on the same snapshots.
|
|
1454
1454
|
|
|
1455
1455
|
| Pair | Before | After | Shares after |
|
|
1456
1456
|
|---|---|---|---|
|
|
1457
|
-
|
|
|
1458
|
-
|
|
|
1459
|
-
|
|
|
1460
|
-
|
|
|
1461
|
-
|
|
|
1457
|
+
| Electrician + Plumber light on stone | 0.59 (cream ground) | **0.54** | warm ground, left-aligned serif hero, photo right, light hero then dark band |
|
|
1458
|
+
| Electrician + Plumber light on porcelain | 0.59 (cream ground) | 0.58 | left-aligned serif hero, photo right, light hero then dark band |
|
|
1459
|
+
| Electrician + Plumber dark (either) | 0.77 | 0.72 | left-aligned serif hero, photo right |
|
|
1460
|
+
| Plumber stone light + porcelain light | 0.01 | 0.06 | everything but the ground |
|
|
1461
|
+
| Electrician + Electrician | 0.00 | 0.00 | |
|
|
1462
1462
|
|
|
1463
|
-
Against the register as it stands (stored version 2 fingerprints, not re-added), the stone page's nearest site is
|
|
1463
|
+
Against the register as it stands (stored version 2 fingerprints, not re-added), the stone page's nearest site is Electrician (0.54) and the porcelain page's is Accountant (0.52) with Electrician second (0.58): the move away from Electrician that the founder made by eye now shows in the numbers, and both Plumber light pages still share the opening with Electrician, which is the next thing to pull apart. Neither pair is a sibling; the faces, the accent and the button shape are their own.
|
|
1464
1464
|
|
|
1465
|
-
The seven register pairs reshuffle little: Kendall tau 0.83 between the before and after orderings over 21 pairs, the closest pair is still DD +
|
|
1465
|
+
The seven register pairs reshuffle little: Kendall tau 0.83 between the before and after orderings over 21 pairs, the closest pair is still DD + Electrician (0.48 to 0.52, now "warm ground" rather than "grey ground"), and no pair crosses the sibling line. Pairs that shared "white ground" and little else move apart by 0.02 to 0.06 as the temperature counts (Salon + Therapy keep "cool white ground"); Barber + Skincare move closer (0.74 to 0.66) because both open dark then light. The sibling line measured again on the seven v2 null models is 0.337 with the old distance and 0.339 with the new, so the weights do not move it; `SIBLING_AT` stays at the 0.31 measured on the v1 models in September, and moving it to the v2 line is a separate decision.
|
|
1466
1466
|
|
|
1467
1467
|
## The catalogue
|
|
1468
1468
|
|
|
@@ -1470,7 +1470,7 @@ Generated from the package. Run `pnpm --filter @domandigital/craft run docs`
|
|
|
1470
1470
|
after changing an entry; a test fails until you do.
|
|
1471
1471
|
|
|
1472
1472
|
<!-- craft:catalogue:start -->
|
|
1473
|
-
Catalogue version `2026.10.
|
|
1473
|
+
Catalogue version `2026.10.9`, 77 tells.
|
|
1474
1474
|
|
|
1475
1475
|
| Id | Gen | Surface | Severity | Tell | Why it is a default |
|
|
1476
1476
|
| --- | --- | --- | --- | --- | --- |
|
|
@@ -1482,9 +1482,9 @@ Catalogue version `2026.10.8`, 76 tells.
|
|
|
1482
1482
|
| `glass-panel` | 1 | source + rendered | warn | Glass panel | A translucent blurred card over a busy background is the stock way to put text on a hero image. It costs contrast and says nothing about the client. |
|
|
1483
1483
|
| `hero-then-proof` | 1 | source + rendered | warn | Hero straight into a trust strip | Six of seven estate sites go hero, then logos or stats. It is the landing-page template's order, not the client's story. |
|
|
1484
1484
|
| `icon-tile-grid` | 1 | source + rendered | warn | Three-column icon-card grid | Three cards, each an icon, a heading and two lines, is what a model builds for any list of services. |
|
|
1485
|
-
| `reveal-everywhere` | 1 | source + rendered | warn | Reveal on every section | When every block fades up on scroll, the motion stops meaning anything and the page feels slow.
|
|
1486
|
-
| `pill-everything` | 1 | source + rendered | warn | Pills everywhere | rounded-full on every button, badge and tag is the framework's friendliest default.
|
|
1487
|
-
| `shadcn-dump` | 1 | source | warn | Stock component dump | A generator exports the whole shadcn/ui kit whether the site uses it or not.
|
|
1485
|
+
| `reveal-everywhere` | 1 | source + rendered | warn | Reveal on every section | When every block fades up on scroll, the motion stops meaning anything and the page feels slow. One salon client's site had 70, the studio's own 40, a therapy practice's 27. |
|
|
1486
|
+
| `pill-everything` | 1 | source + rendered | warn | Pills everywhere | rounded-full on every button, badge and tag is the framework's friendliest default. One salon client's site had 162, the studio's own 125. A shape used everywhere is not a shape language. |
|
|
1487
|
+
| `shadcn-dump` | 1 | source | warn | Stock component dump | A generator exports the whole shadcn/ui kit whether the site uses it or not. One client's journal site ships a full set under its own book, vine and petal assets. |
|
|
1488
1488
|
| `shadcn-card-stock` | 1 | source | warn | Stock shadcn Card | The registry Card (bg-card, a plain border, rounded-lg or rounded-xl, shadow-sm) is the container every generated page is built from. Left as shipped, every card on the site looks like every other shadcn site's. |
|
|
1489
1489
|
| `cream-palette` | 2 | source + rendered | warn | Cream ground | Once white-and-violet was named, models moved to a warm off-white: parchment, linen, oat. It reads as 'tasteful' in the same way everywhere. |
|
|
1490
1490
|
| `italic-serif-display` | 2 | source + rendered | warn | Italic serif display | A serif heading with one italic word ('Beauty, reimagined') is the second wave's signature move. |
|
|
@@ -1520,6 +1520,7 @@ Catalogue version `2026.10.8`, 76 tells.
|
|
|
1520
1520
|
| `no-x-badge` | 2 | copy | warn | 'No X' badge | 'No catch.', 'NO JARGON GUIDE': a short standalone 'No X' reads as a slapped-on kicker, and worse when the same one is reused across pieces. |
|
|
1521
1521
|
| `staccato-triplet` | 2 | copy | warn | Staccato triplet | Three fragments in a row ('Fast. Friendly. Local.' or 'No fuss. No jargon. Just results.') (a tricolon in asyndeton: see COPY.md) is the second wave's favourite rhythm. |
|
|
1522
1522
|
| `parallel-pair` | 2 | copy | warn | Verbless parallel pair | 'One form, seven workflows', 'Same site, same £8,000': two matched fragments with no verb (isocolon, often with anaphora or asyndeton: see COPY.md), the staccato triplet's two-part cousin. It sounds decided and says less than a sentence would. |
|
|
1523
|
+
| `absolute-negation` | 2 | copy | warn | Absolute negation fragment | 'never pre-ticked', 'no servers', 'nothing to buy or run': a verbless fragment that opens on never, nothing, nobody or 'no' + noun. Read aloud it sounds rigid, it promises an absolute the copy rarely means, and it defines the thing by what it is not. |
|
|
1523
1524
|
| `where-x-meets-y` | 2 | copy | warn | 'Where X meets Y' | 'Where luxury meets comfort' is a tagline shape that fits every business and so describes none. |
|
|
1524
1525
|
| `chatbot-residue` | 1 | copy | warn | Chatbot residue | 'Certainly! Here's a revised version', 'as an AI language model', a citeturn0search0 token, a link tracked utm_source=chatgpt.com: text that exists only because a chat reply was pasted whole. This is evidence, not style. |
|
|
1525
1526
|
| `stock-email-line` | 1 | copy | warn | Stock email line | 'I hope this email finds you well', 'let me know if you have any questions', 'don't hesitate to contact us': the opener and closer of a form email. A client reads past them, and a model drafting an email writes them every time. |
|
package/COPY.md
CHANGED
|
@@ -99,8 +99,9 @@ person reading decides which instance earns its place.
|
|
|
99
99
|
| `review-phrase` | truly, genuinely, deeply, ultimately, clear and clearly ("a clear next step", "clear pricing": say what the reader actually gets), plain as a self-description ("plain answers", "a plain recommendation"), great question, absolutely, one-size-fits-all, and superlative over-claiming: "the single most", "by far the most", "hands down the", "arguably the best", "bar none" |
|
|
100
100
|
| `sales-tagline` | advert lines that say nothing a reader can check: "so your budget goes where it counts", "real results", "results that matter", "work harder for you", "pages that convert" |
|
|
101
101
|
| `matey-register` | the put-on British voice: "Alright Dave,", "cheers mate", "no worries", "we'll get you sorted", "proper good", "give me a shout", "chuffed", "Right then,"; and clipped speech that drops the small words: "have look at", "give it go", "Quick one:", "built you a site". Write plain, complete British English |
|
|
102
|
-
| `confession-line` | scoping the business by what it has not done, will not do or is not: "What this is and is not", "we have not yet built", "our clinic experience so far is one practice", "what we would and wouldn't take on", "who we don't work with". It's an open shop: be honest by being precise ("the portal we run for
|
|
102
|
+
| `confession-line` | scoping the business by what it has not done, will not do or is not: "What this is and is not", "we have not yet built", "our clinic experience so far is one practice", "what we would and wouldn't take on", "who we don't work with". It's an open shop: be honest by being precise ("the portal we run for a children's therapy practice") and keep the door open. Contractual facts (eligibility, who runs what) stay, said as what the buyer gets |
|
|
103
103
|
| `trailing-contrast` | the softer contrast template: a noun or phrase after ", not" closing a sentence ("Edge matters for game servers, not registration"), "not a legal one", and "renting computing instead of owning it". A genuine disclaimer has the same shape ("general information, not a recommendation"), so it is reported, never blocked. Say the positive claim; keep the contrast only where the reader would otherwise assume the other thing |
|
|
104
|
+
| `absolute-negation` | a verbless fragment that opens on never, nothing, nobody or "no" + noun, after a clause break: "A guardian consents by email; never pre-ticked", "Pay per user per month; no servers", "nothing to buy or run", "Nothing on-site to join", "no duplicates". Read aloud it sounds rigid and promises an absolute. A sentence with a subject and a verb ("Players never open the lists", "Nothing is copied by hand"), an instruction ("Never share your password"), a citation with no date ("ICO, no date") and a "No" form answer pass. Say what happens as a sentence; keep the absolute only where it is literally true and the reader needs it |
|
|
104
105
|
| `outcome-promise` | a hoped-for result written as delivered: "we'll turn that into enquiries", "once the first areas are working", "competitors you can outdo", "exactly what convinces", "guaranteed rankings", "you'll get more". Promise the work; measure and report the results |
|
|
105
106
|
| `ai-vocabulary` | tapestry, testament, realm, elevate, nestled, meticulous, unparalleled, moreover; and underscore, showcasing, pivotal, measured 10 to 14 times over-used in post-2022 text |
|
|
106
107
|
| `stock-email-line` | the form-email opener and closer: "I hope this email finds you well", "hope you're having a great week", "let me know if you have any questions", "don't hesitate to contact us". Start with the reason for writing; end with the next step and who to ask |
|
|
@@ -285,7 +286,7 @@ that ships from the repo is ours to fix; copy the owner typed is theirs.
|
|
|
285
286
|
## Rendered social assets: no raw links
|
|
286
287
|
|
|
287
288
|
A carousel slide, Story, Reel or caption never shows a raw URL: no `https://`,
|
|
288
|
-
no `www.`, no path. Show a bare domain (`
|
|
289
|
+
no `www.`, no path. Show a bare domain (`EXAMPLE-ELECTRICAL.CO.UK`) or a plain
|
|
289
290
|
call to action ("Link in bio"). Keep the full address in source data and let
|
|
290
291
|
the render step transform it. craft cannot enforce this, because raw URLs are
|
|
291
292
|
legitimate almost everywhere else in a repo. The social generator's own render
|
package/PRINCIPLES.md
CHANGED
|
@@ -121,7 +121,7 @@ the client or a test, and at which widths each was looked at. The phone is
|
|
|
121
121
|
where this is examined first; a finding made there is not assumed to hold on a
|
|
122
122
|
desktop. See [CHARACTER.md](./CHARACTER.md#decision-confidence).
|
|
123
123
|
|
|
124
|
-
The principle
|
|
124
|
+
The principle comes from a studio reviewer's review of a phone layout on 15 October 2026,
|
|
125
125
|
and its question is: what does this visitor need to see, understand and believe
|
|
126
126
|
before they are comfortable taking the next appropriate action? It adds to the
|
|
127
127
|
standards above and replaces none of them. It also sets how a change is chosen:
|
|
@@ -130,11 +130,11 @@ the evidence are judged apart, and the smallest change that answers the problem
|
|
|
130
130
|
wins. "The existing design is already appropriate" is a result. See
|
|
131
131
|
[Reviewing a proposed change](./CHARACTER.md#reviewing-a-proposed-change).
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
A review of Doman Digital's own new site (18 and 19 October 2026, 73 notes)
|
|
134
134
|
is kept whole in the reviewer corpus, with the founder's rulings of 20 October,
|
|
135
135
|
and it adds eleven principles and two tells. The main ones: an open shop is honest
|
|
136
136
|
by being precise, never by confessing what it has not done; a summary page
|
|
137
137
|
carries the substance; a case line ends on its result; a hero has one button;
|
|
138
|
-
and the first screen on a phone belongs to the business. Every later review
|
|
139
|
-
|
|
140
|
-
[
|
|
138
|
+
and the first screen on a phone belongs to the business. Every later review
|
|
139
|
+
feeds craft the same way. See
|
|
140
|
+
[Review of the studio's own site](./CHARACTER.md#review-of-the-studios-own-site-2026-10-19).
|