@easysociable/cli 0.1.18 → 0.1.20

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.
@@ -1,132 +0,0 @@
1
- # Deck Styles
2
-
3
- A Deck Style is a set of catalog Layout Families that share one visual language
4
- (type scale, margins, chrome, palette). Every page of a Run is **adapted from one
5
- family of a single Deck Style** — never drawn from scratch, never mixed across styles.
6
-
7
- Read a family's Studio source for the Run's platform:
8
-
9
- ```bash
10
- easysociable templates source --family <familyId> --platform <platform> --json
11
- ```
12
-
13
- Pick the style from the Brand's default style. No Brand style yet → pick by content:
14
-
15
- | Style | Use for | Needs images | Brand palette (canvas / text / textMuted / accent) |
16
- |---|---|---|---|
17
- | `cream-editorial` | explainers, opinions, news breakdowns, prompts — text-first | no | `#F4EEE7` / `#121A2B` / `#4A4F5C` / `#D4450F` |
18
- | `quiet-ledger` | frameworks, tips, how-tos, lessons — calm, structured | no | `#FFFFFF` / `#15191E` / `#384352` / `#445164` |
19
- | `dark-news` | breaking AI/tech news with a strong photo or product shot | yes (hero photo) | `#06080C` / `#FFFFFF` / `#C7CBD3` / `#4C9BFF` |
20
- | `phone-showcase` | app tips, tool demos, "how I use X" — real screenshots | yes (screenshots) | `#F9F9F9` / `#0A0A0A` / `#555555` / `#0066DD` |
21
-
22
- No images available and none can be generated → only `cream-editorial` or `quiet-ledger`.
23
-
24
- ## cream-editorial
25
-
26
- Big 112px headline with an accent-coloured second half, mono page number, pill tag, rule, SWIPE footer.
27
-
28
- | Family | Page purpose |
29
- |---|---|
30
- | `fam_0488u93z` Cream Editorial Headline Poster | hook / cover: headline + one-line aside |
31
- | `fam_w3p02voe` Cream Five-Line Headline Poster | hook / cover: headline only, up to 5 lines |
32
- | `fam_vt5zt1xg` Accent Rail Paragraph Chart | context / evidence: one paragraph on an accent rail + 3 numbers |
33
- | `fam_vw68bzh1` Cream Mono Prompt Card | value / steps: a mono "card" (prompt, quote, example input) |
34
- | `fam_x6gdbad3` Accent Rail Paragraph Logo Row | proof: paragraph + logo row (needs logos) |
35
- | `fam_9hlr90o1` Cream Big Button Follow Close | cta / follow: big question + accent button |
36
-
37
- Point / list / metric pages are not in the catalog for this style: adapt the
38
- headline poster (title on top, 2–3 rows or one huge number below), keeping its chrome.
39
-
40
- ## quiet-ledger
41
-
42
- White, small caps labels, soft green gradient blob, one idea per card.
43
-
44
- | Family | Page purpose |
45
- |---|---|
46
- | `fam_49c6pout` Title + Subtitle Cover | cover |
47
- | `fam_qery74q3` Bold Claim Hook with Swipe Arrow | hook |
48
- | `fam_e8d1qpn2` Problem Setup Card | setup / problem |
49
- | `fam_k9wge9gc` Single Takeaway Card | value / key idea |
50
- | `fam_ue542bvy` Numbered Point Card | point (one per page, big number) |
51
- | `fam_78vpdf64` Five-Step How-To List | steps |
52
- | `fam_3tw3wbxx` Big Metric Proof Card | proof / metric |
53
- | `fam_eh8wkyql` Closing Recap Summary | recap |
54
-
55
- CTA: adapt `fam_rahs52cl` Bookmark Save Close into this palette.
56
-
57
- ## dark-news
58
-
59
- Near-black, full-bleed photo with headline over a fade.
60
-
61
- | Family | Page purpose |
62
- |---|---|
63
- | `fam_321v25e7` Dark News Hero Poster | cover / hook over a hero photo |
64
- | `fam_rms4v81m` Dark News Story Stack | point / evidence: image + short story |
65
- | `fam_9lkrmau1` Monument Metric | metric / proof: one huge number |
66
-
67
- CTA: adapt `fam_9hlr90o1` (button close) into the dark palette.
68
-
69
- ## phone-showcase
70
-
71
- Light grey, a phone mockup holding a real screenshot, short caption.
72
-
73
- | Family | Page purpose |
74
- |---|---|
75
- | `fam_itnu5iiq` Title Over Fading Phone Poster | cover |
76
- | `fam_wb2l75gl` Phone Left Title Right Poster | cover / screenshot |
77
- | `fam_nk61xu51` One-Phone Prompt Tip | point: one phone + tip text |
78
- | `fam_t2x277j8` Two-Phone Tip | point: before / after |
79
- | `fam_99xxcxs0` Centered App Spotlight Stack | point: app icon + name + one line |
80
- | `fam_ct0pajcy` Caption Over Big Phone | steps: one step per page |
81
- | `fam_4ct2w5n5` Phone Left Step Note | steps |
82
- | `fam_v4yktlzk` Phone Bottom Edge Caption | steps |
83
- | `fam_sgif0njo` Twin Phones Follow Close | follow |
84
- | `fam_6lxgv3nd` Follow Me Avatar Close | cta with the Brand avatar |
85
- | `fam_rahs52cl` Bookmark Save Close | cta: save for later |
86
-
87
- ## Adapting a family (the rules that make it look designed)
88
-
89
- 1. Copy the family source. Keep its chrome (header, pill, page number, rule,
90
- footer), margins (`left` of the first column), type scale and fonts.
91
- 2. Change text, then fix each text box: explicit `<br />` line breaks, and
92
- `height` = lines × lineHeight + ~12% of fontSize for descenders.
93
- 3. Remove what you do not need; add only elements copied from a sibling family
94
- of the same style (e.g. the rule rows or stat row).
95
- 4. Brand chrome: the header label is the Brand name (or the topic when there is
96
- no Brand); the CTA names the Brand handle. Never leave a template's original
97
- name or handle (e.g. "Will.AI.m") on a page.
98
- 5. Accent colour only on large text (≥ 36px, or ≥ 28px bold) and blocks. Small
99
- labels use the text or muted colour.
100
- 6. Semantic `data-type` values (`title`, `subtitle`, `kicker`, `metric`,
101
- `caption`) get Brand colours forced by Studio. Text on an accent or image
102
- block uses `label`, `body` or `statement` with an explicit colour.
103
- 7. One family per page, no family twice in a Run unless the page purpose
104
- repeats (e.g. several numbered points), and no two adjacent pages with the
105
- same composition.
106
-
107
- ## Image placeholder
108
-
109
- A replaceable image slot for a real screenshot or photo the user will add.
110
- Studio shows an upload button when it is selected.
111
-
112
- ```jsx
113
- <img data-type="image" data-variable="image_0" data-image-mode="slot_default"
114
- alt="Add: <what goes here>" src="data:image/svg+xml;base64,<SVG>"
115
- style={{ position: 'absolute', left: 88, top: 760, width: 904, height: 388, objectFit: 'cover', borderRadius: 24 }} />
116
- ```
117
-
118
- `<SVG>` is base64 of a grey box with an image icon and the label, sized to the slot:
119
-
120
- ```xml
121
- <svg xmlns='http://www.w3.org/2000/svg' width='904' height='388' viewBox='0 0 904 388'>
122
- <rect width='904' height='388' fill='#DDD6CC'/>
123
- <g transform='translate(416,124)' fill='none' stroke='#8C8781' stroke-width='5' stroke-linejoin='round'>
124
- <rect width='72' height='56' rx='8'/><path d='M6 50 L26 28 L40 42 L50 34 L66 50'/><circle cx='52' cy='16' r='6'/>
125
- </g>
126
- <text x='50%' y='230' text-anchor='middle' font-family='Inter, Arial, sans-serif' font-size='32' font-weight='600' fill='#6F6A64'>Add: Grok Bot app screenshot</text>
127
- </svg>
128
- ```
129
-
130
- Put the same data URL in the page's `slots` under `image_N`. Number slots
131
- `image_0`, `image_1`, … per page. Use the style's own colours for the box
132
- (canvas-adjacent grey on light styles, `#1A1F27` on dark ones).
@@ -1,81 +0,0 @@
1
- # Multi-platform Layout Family (default create path)
2
-
3
- **SoT for creating templates that ship on several platforms at once.**
4
- One user-facing **Layout Family**; one **master** canvas page; additional **variant** pages per aspect preset. Studio switches variants with platform chips — it does not resize one AST (ADR-0033).
5
-
6
- Single-page ≠ single-platform. Still never create slideshow/carousel packs (`OUT_OF_SCOPE.md`).
7
-
8
- ## Default when the user asks to create a template
9
-
10
- Unless they explicitly want **one platform only**:
11
-
12
- 1. Lock a **master** platform + recommended canvas (`PLATFORM_SPECS.md`).
13
- 2. Create the master draft (Family is created with it).
14
- 3. **Derive** missing vertical presets for the family.
15
- 4. **Hand-tune** each variant’s absolute layout (do not ship raw derive output for dense pages).
16
- 5. Visual-QA master + each variant, then hand off Studio with chip switching.
17
-
18
- ### Default vertical bucket (most social covers)
19
-
20
- | Role | Preset | Pixels | Platforms on that variant |
21
- |---|---|---|---|
22
- | Master (typical) | `3:4` | 1080×1440 | `xiaohongshu` |
23
- | Variant | `4:5` | 1080×1350 | `instagram` + `threads` (shared tree) |
24
- | Variant | `9:16` | 1080×1920 | `tiktok` |
25
- | Variant | `1:1` | 1080×1080 | `linkedin` |
26
-
27
- If the user’s primary platform is already `4:5` / `9:16` / `1:1`, that page is master; derive the other presets in the bucket (see Gateway `defaultDerivePolicyForPreset`).
28
-
29
- Skip or trim targets only when the user names a subset (“只要 IG 和 LinkedIn”).
30
-
31
- ## CLI
32
-
33
- ```bash
34
- # After create-draft, read familyId from the draft view (or families list)
35
- easysociable templates families get --id <familyId> --json
36
-
37
- # Create missing presets (idempotent; use --presets to limit)
38
- easysociable templates families derive --id <familyId> --presets 4:5,9:16,1:1 --json
39
-
40
- # Hand-tuned layout per variant pageId
41
- easysociable templates update-draft --id <variantPageId> --file ./variant-4x5.patch.json --json
42
- ```
43
-
44
- Gateway equivalents: `GET/POST /v1/template-families/:id`, `POST /v1/template-families/:id/derive`.
45
-
46
- If CLI `--json` fails Zod on new family fields (`familyId`, `variants`, …) but HTTP succeeded, re-fetch with `families get` / `list-drafts` or raw Gateway — do not assume create/derive failed.
47
-
48
- ## Hand-tune rules (required after derive)
49
-
50
- `derive` applies pin `v1_vertical` (scale + bottom/center corrections). That is a **starting point**, not shippable layout for dense covers.
51
-
52
- For **each** variant page:
53
-
54
- 1. Keep the **same slots / copy / icons** as master (same `data-variable` keys).
55
- 2. Rebuild absolute geometry for the target `canvas` (`width`/`height` + root Graphic size must match preset pixels).
56
- 3. Distribute vertical rhythm across the full board: even section gaps; **no** packed header + empty foot.
57
- 4. TikTok `9:16`: keep critical UI out of bottom ~120–160px chrome.
58
- 5. JSX styles must be `style={{ ... }}` (double braces). Python f-strings turn `{{` into `{` — validate with Babel/`validate-authoring-source.mjs` before update.
59
- 6. Per-variant `selectionMetadata.platforms` / `canvasPreset` / `canvas` must match that page only (IG+Threads both listed on the `4:5` page).
60
- 7. Theme/preview tokens stay on the **Family** (`preview_tokens` via `theme.create` on draft) — not a TemplateTheme row (`THEME_TOKENS.md`, ADR-0033).
61
-
62
- ```bash
63
- node scripts/validate-authoring-source.mjs ./variant-4x5.authoring.json
64
- easysociable templates update-draft --id <variantPageId> --file ./variant-4x5.patch.json --json
65
- ```
66
-
67
- ## Visual QA
68
-
69
- Run `VISUAL_QA.md` on the **master** and **each derived preset** (screenshot Studio at that draft URL / platform chip). Fail if any variant has clipped content, overlapping bands, or large empty voids with cramped clusters.
70
-
71
- ## Handoff
72
-
73
- After QA, open the **master** Studio URL and tell the user they can switch platforms with the top-bar chips (each chip is a real canvas variant). Save still applies to the active variant; Agent publish remains post-Save (`PUBLISH_FROM_DRAFT.md`). Include every variant `pageId` + preset in the handoff notes.
74
-
75
- ## Do not
76
-
77
- - Author one AST and claim it fits 3:4 + 9:16 + 1:1
78
- - Leave dense pages on raw derive output
79
- - Put Instagram and Threads on different presets when both are 4:5
80
- - Create a second Family for the same template identity
81
- - Treat multi-platform variants as a slideshow / carousel pack