diff --git a/ks-research/story-images/src/assets-gen/cover-3d.png b/ks-research/story-images/src/assets-gen/cover-3d.png
new file mode 100644
index 0000000..81670d6
Binary files /dev/null and b/ks-research/story-images/src/assets-gen/cover-3d.png differ
diff --git a/ks-research/story-images/src/assets-gen/cover-flat.png b/ks-research/story-images/src/assets-gen/cover-flat.png
new file mode 100644
index 0000000..9fb86fb
Binary files /dev/null and b/ks-research/story-images/src/assets-gen/cover-flat.png differ
diff --git a/ks-research/story-images/src/assets-gen/re01-top.png b/ks-research/story-images/src/assets-gen/re01-top.png
new file mode 100644
index 0000000..43fcb7d
Binary files /dev/null and b/ks-research/story-images/src/assets-gen/re01-top.png differ
diff --git a/ks-research/story-images/src/assets-gen/re01-tryit.png b/ks-research/story-images/src/assets-gen/re01-tryit.png
new file mode 100644
index 0000000..caa3521
Binary files /dev/null and b/ks-research/story-images/src/assets-gen/re01-tryit.png differ
diff --git a/ks-research/story-images/src/assets-gen/re01.json b/ks-research/story-images/src/assets-gen/re01.json
new file mode 100644
index 0000000..3ab39e8
--- /dev/null
+++ b/ks-research/story-images/src/assets-gen/re01.json
@@ -0,0 +1,15 @@
+{
+ "url": "https://aibook.fun/read/recipe/RE-01",
+ "top": {
+ "x": 0,
+ "y": 223.203125,
+ "width": 616,
+ "height": 386.96875
+ },
+ "tryit": {
+ "x": 0,
+ "y": 2002.140625,
+ "width": 616,
+ "height": 287.125
+ }
+}
\ No newline at end of file
diff --git a/ks-research/story-images/src/assets-gen/screen-laptop.png b/ks-research/story-images/src/assets-gen/screen-laptop.png
index 4df672f..659a82b 100644
Binary files a/ks-research/story-images/src/assets-gen/screen-laptop.png and b/ks-research/story-images/src/assets-gen/screen-laptop.png differ
diff --git a/ks-research/story-images/src/assets-gen/screen-phone.png b/ks-research/story-images/src/assets-gen/screen-phone.png
index 8033b0f..7c97044 100644
Binary files a/ks-research/story-images/src/assets-gen/screen-phone.png and b/ks-research/story-images/src/assets-gen/screen-phone.png differ
diff --git a/ks-research/story-images/src/assets-gen/screens.json b/ks-research/story-images/src/assets-gen/screens.json
index 1db1163..a0d9402 100644
--- a/ks-research/story-images/src/assets-gen/screens.json
+++ b/ks-research/story-images/src/assets-gen/screens.json
@@ -4,14 +4,14 @@
"vh": 700,
"essay": [
328,
- 95.21875,
- 201.921875,
+ 95.40625,
+ 198.921875,
29
],
"workflow": [
357,
- 364.09375,
- 200.046875,
+ 364.28125,
+ 200.109375,
37.625
]
},
@@ -20,14 +20,14 @@
"vh": 844,
"tryit": [
61,
- 114.8125,
+ 115.28125,
48.3125,
15
],
"updated": [
61,
- 769.78125,
- 170.75,
+ 794.046875,
+ 170.765625,
19
]
}
diff --git a/ks-research/story-images/src/assets/README.md b/ks-research/story-images/src/assets/README.md
index 5134131..f3f54fe 100644
--- a/ks-research/story-images/src/assets/README.md
+++ b/ks-research/story-images/src/assets/README.md
@@ -5,9 +5,10 @@ Images whose slots are filled lose the `-PLACEHOLDER` suffix.
| File name (any of .jpg/.png/.webp) | Used in | Minimum size |
|---|---|---|
-| cover | 01b welcome (final front cover) | 1600 px tall, web version of the final cover |
| retreat-venue | 07b Retreat | 1360 × 765, landscape |
| site-orlando, site-north-denver, site-villa-park | 08c Academy sites | 800 × 600 each, landscape |
| reader-1, reader-2, reader-3 | 13b early reader quotes | 400 × 400, square |
-| author-1, author-2 (add more in build.py) | 14b authors | 800 × 800, square |
+| author-1, author-2, author-3 | 14b authors (Real Estate & Finance, Fractional C-Suite, Technology & RAAI) | 800 × 800, square |
| team-thy, team-lfg, team-ceo, team-gtm, team-osinachi-patrick, team-academy-lead | 14b team | 800 × 800, square |
+
+The book cover is not a photo slot: it is rendered from the landing page's `Book3D.jsx` by `render_cover.py` into `src/assets-gen/`.
diff --git a/ks-research/story-images/src/build.py b/ks-research/story-images/src/build.py
index 14808f2..8844827 100644
--- a/ks-research/story-images/src/build.py
+++ b/ks-research/story-images/src/build.py
@@ -45,6 +45,8 @@ def slot(src, label, size, cls='', style=''):
return (f'
{ICONS["camera"]}'
f'{label} {size}
')
+COVER_3D = '../assets-gen/cover-3d.png' # rendered from the landing page (render_cover.py)
+COVER_FLAT = '../assets-gen/cover-flat.png'
pages = [] # dicts: name, body, css, sel, w, h(optional), dpr
def page(name, body, css='', w=680, h=None, extra_css='', px_h=None):
pages.append(dict(name=name, body=body, css=css, w=w, h=h, extra_css=extra_css, px_h=px_h))
@@ -74,7 +76,7 @@ add_header('01')
page('01b-welcome-cover-icons', f'''
-
{slot("cover", "Book cover goes here", "Final cover · owner supplies", "cover")}
+
Cover mockup
Welcome
{TITLE}
@@ -88,11 +90,10 @@ page('01b-welcome-cover-icons', f'''
{icon("updated", "ico big")}
Library updated often
''', css='''
-.wel{display:flex;gap:34px;align-items:center;padding:6px 6px 26px}
-.bookwrap{flex:none;padding:6px 14px 14px 4px}
-.book{width:184px;height:258px;border-radius:3px 8px 8px 3px;position:relative;box-shadow:10px 12px 0 -3px #efe9db,10px 12px 0 -2px #d6cdba,0 26px 40px -18px rgba(18,63,52,.5)}
-.book .slot{position:absolute;inset:0;border-radius:3px 8px 8px 3px}
-.book .slot .ph b{font-size:15px}
+.wel{display:flex;gap:30px;align-items:center;padding:0 6px 22px}
+.bookwrap{flex:none;margin:0;width:196px;text-align:center}
+.bookwrap img{width:196px;display:block}
+.bookwrap figcaption{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:-14px}
.wtxt h2{font-family:var(--display);font-weight:900;font-size:50px;letter-spacing:-.03em;line-height:1;color:var(--pine-deep)}
.wtxt .t{font-family:var(--display);font-weight:600;font-size:22px;letter-spacing:-.02em;line-height:1.2;margin:14px 0 12px}
.wtxt .s{font-size:16px;line-height:1.5;color:var(--muted);max-width:25rem}
@@ -183,67 +184,40 @@ page('04b-workflow-recipe-diagram', f'''
.co h4{font-weight:700;font-size:16px;line-height:1.25}
.co p{font-size:14px;line-height:1.42;color:var(--muted);margin-top:2px}
''')
-CHAPTERS = ['Real Estate', 'Financial Advisors', 'Fractional
C-Suite ', 'Higher Education', 'Communities', 'Technology']
-page('04c-chapter-tiles-DRAFT', '
Chapters
' + ''.join(
- f'
{i:02d}
{c} {icon("book")}' for i, c in enumerate(CHAPTERS, 1)) + '
', css='''
+# Published on the landing page: marketing-site/components/Contents.jsx ("The founding library")
+CHAPTERS = [('Real Estate', 'Market briefs & listings, without leaking client data'),
+ ('Financial Advisors', 'Portfolio summaries that stay compliant & reviewed'),
+ ('Fractional
C-Suite ', 'Board updates & plans with real escalation paths'),
+ ('Higher Education', 'Course & research workflows with academic integrity'),
+ ('Communities', 'Moderation & programming that respects members'),
+ ('Technology', 'Agent patterns, evals & the responsible defaults')]
+page('04c-chapter-tiles', '
The founding library
' + ''.join(
+ f'
' for i, (c, d) in enumerate(CHAPTERS, 1)) + '
', css='''
.tg{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px}
-.t{padding:18px 18px 20px;position:relative;min-height:118px;display:flex;flex-direction:column}
-.t .n{font-family:var(--mono);font-size:13px;color:var(--muted);letter-spacing:.08em}
-.t h3{font-family:var(--display);font-weight:600;font-size:22px;letter-spacing:-.02em;line-height:1.12;margin-top:auto;padding-top:22px}
-.t .ico{position:absolute;right:16px;top:16px;width:22px;height:22px;opacity:.8}
+.t{padding:16px 16px 18px;display:flex;flex-direction:column}
+.t .n{font-family:var(--mono);font-size:13px;color:var(--pine);letter-spacing:.08em}
+.t h3{font-family:var(--display);font-weight:600;font-size:21px;letter-spacing:-.02em;line-height:1.12;margin:10px 0 6px}
+.t p{font-size:14px;line-height:1.4;color:var(--muted)}
''')
# ---------------------------------------------------------------- 05 try one workflow
add_header('05')
-CHECK = ['Use the included sample_listings.csv (no live client file).',
- 'Produce the market-1pager brief.',
- 'Walk the human checklist.',
- 'Mark complete when you have a brief you would send after review.']
-page('05b-sample-workflow-try-it', f'''
+page('05b-sample-workflow-try-it', '''
-
aibook.fun
-
-
- RE-01 · v1.2 · ~15 min · ≈ $0.03Real Estate
-
-
Draft a property-market brief with an AI agent without leaking client data.
-
Safeguards
-
{ICONS["shield"]}Redaction runs on your machine. Raw client data never reaches the model.
-
{ICONS["shield"]}A human checklist is required before the brief is shared.
-
-
Try-it
-
About 15 minutes
-
{''.join(f' {c} ' for c in CHECK)}
-
◷ cost to try ≈ $0.03 Mark complete
-
-
-
-
+
aibook.fun/read/recipe/RE-01
+
+
Problem · Actors · Setup · Safeguards · Method · Evidence
+
-
-
''', extra_css='
', css='''
-body{background:#fff}
-.win{background:#fff;border:1px solid var(--line-2);border-radius:14px;overflow:hidden;box-shadow:var(--sh-lg)}
+
+
''', css='''
+.win{background:var(--paper);border:1px solid var(--line-2);border-radius:14px;overflow:hidden;box-shadow:var(--sh-lg)}
.bar{display:flex;align-items:center;gap:7px;padding:10px 14px;background:#f1eee7;border-bottom:1px solid var(--line)}
.bar i{width:11px;height:11px;border-radius:999px;background:#d8d1c4;display:block}
.bar .url{margin-left:14px;flex:1;background:#fff;border:1px solid var(--line);border-radius:999px;padding:4px 14px;font-family:var(--mono);font-size:13px;color:var(--muted)}
-.scr{padding:20px;background:var(--paper)}
-.recipe{box-shadow:var(--sh-md);border-radius:16px}
-.recipe-top{padding:14px 18px}
-.recipe-id{font-size:13px}
-.recipe-vert{font-size:12px}
-.recipe-body{padding:22px 20px 22px}
-.recipe-title{font-size:23px;margin-bottom:16px}
-.xrow{display:grid;grid-template-columns:96px 1fr;gap:14px;padding:14px 0;border-top:1px dashed var(--line-2)}
-.xrow .k{font-family:var(--mono);font-size:12.5px;text-transform:uppercase;letter-spacing:.1em;color:var(--pine);padding-top:3px;font-weight:500}
-.guard{font-size:15px;padding:5px 0;color:var(--muted);gap:9px;line-height:1.45}
-.guard svg{width:18px;height:18px;color:var(--pine);flex:none;margin-top:1px}
-.mins{font-weight:700;font-size:16px;margin-bottom:8px}
-.cl li{display:flex;gap:11px;align-items:flex-start;font-size:15px;line-height:1.45;padding:5px 0}
-.cl .box{width:18px;height:18px;border:1.6px solid var(--pine);border-radius:5px;flex:none;margin-top:2px;background:#fff}
-.acts{display:flex;align-items:center;gap:12px;margin-top:12px;flex-wrap:wrap}
-.chip{font-size:13px}
-.btn{font-size:15px;padding:10px 18px}
+.win img{display:block;width:614px}
+.gap{padding:10px 0;text-align:center;background:linear-gradient(transparent calc(50% - 1px),var(--line-2) calc(50% - 1px) calc(50% + 1px),transparent calc(50% + 1px))}
+.gap span{font-family:var(--mono);font-size:12.5px;color:var(--muted);background:var(--paper);padding:2px 10px;letter-spacing:.02em}
.foot-note{text-align:center}
''')
page('05c-button-try-the-workflow', f'''
@@ -265,7 +239,7 @@ def three_ways(paperback=True):
rows = ''.join(f'
{p} {t}' + (f'{s} ' if s else '') + ' '
for p, t, s, f in cloud_items)
if paperback:
- rows += f'
{ICONS["book"]} Signed paperback and eBookPrice on the reward '
+ rows += f'
Signed paperback and eBookPrice on the reward '
cloud_deliv = ('
Library access: within about 14 days of a successful campaign eBook: January 2027 '
+ ('
Signed paperback: February 2027 ' if paperback else ''))
inc = f'
{icon("seat")}Your seat {icon("book")}The eBook {icon("library")}12 months of AiBook.fun '
@@ -287,7 +261,7 @@ def three_ways(paperback=True):
-
Cloud
Do it yourself, online
+
Cloud
Do it yourself, online
@@ -312,7 +286,9 @@ TW_CSS = '''
.prices li{display:grid;grid-template-columns:58px 1fr;gap:8px;align-items:baseline;padding:7px 8px;border-radius:10px;font-size:14px;line-height:1.35}
.prices li+li{margin-top:4px}
.prices b{font-family:var(--display);font-weight:900;font-size:24px;letter-spacing:-.03em;color:var(--ink)}
-.prices b.np{align-self:start;color:var(--muted);width:22px;height:22px;margin:1px 0 0 4px}
+.prices b.np{align-self:start;width:30px;margin:0 0 0 6px}.prices b.np img{width:30px;display:block}
+.ch{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
+.ch img{width:46px;border-radius:2px 4px 4px 2px;box-shadow:0 6px 12px -6px rgba(18,63,52,.5);margin:4px 0 8px}
.prices small{display:block;font-size:13px;color:var(--muted)}
.prices li.feat{background:var(--pine);color:#eaf1ec}
.prices li.feat b{color:#fff}
@@ -405,7 +381,7 @@ page('09b-aibook-fun-device-mockup', f'''
Last updated
-
+