Story images: relabel Cloud column and section 9 header as Book & Library

- 06b/06c: third column label is now "Book & Library" with the heading
  "The book and the AiBook.fun library" (was "Cloud" / "Do it yourself,
  online"). Same size, cover image unchanged.
- 09 header renamed to 09-header-book-library-and-aibook-fun.png with the
  title "Book & Library and AiBook.fun" (was "Cloud and AiBook.fun").
- three_ways() builds the grid from a list of columns so a fourth bucket can
  be added later without a CSS change; three-column output is unchanged.
- Contact sheet and README updated.
This commit is contained in:
pat
2026-09-25 19:15:39 +01:00
parent 434a70c749
commit 788bff5d56
11 changed files with 42 additions and 30 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

+5 -4
View File
@@ -29,15 +29,15 @@ All graphics for the Story tab of the We Own AI — The New American Dream campa
| 05b-sample-workflow-try-it.png | 5 Try one workflow | 1360 × 1722 | Real screenshots of workflow RE-01 at aibook.fun/read/recipe/RE-01 in a browser frame: the header, title and kit (who runs it, tools, files, model, time, cost, output), then its Try-it. A strip marks the parts left out (Problem to Evidence). | Sample workflow RE-01: draft a property-market brief with an AI agent without leaking client data, with a 15-minute Try-it |
| 05c-button-try-the-workflow.png | 5 Try one workflow | 1360 × 298 | Button image. In the editor, link it to https://aibook.fun/read/recipe/RE-01 (live now; the site currently labels it a "Reading demo"). | Try the sample workflow |
| 06-header-three-ways-to-back.png | 6 Three ways to back | 1360 × 300 | Section header | Three ways to back |
| 06b-three-ways-to-back.png | 6 Three ways to back | 1360 × 1634 | Three columns (Retreat, Academy, Cloud) showing what each is, what it includes, and when. Cloud prices are one per line ($19, $25, $47 featured). The signed paperback appears with "Price on the reward" and a small image of the landing cover. The Cloud header shows the cover too. No Retreat or Academy price is shown. | Three ways to back: Retreat, Academy, and Cloud, with Cloud rewards at $19, $25 and $47 |
| 06c-three-ways-to-back-no-paperback.png | 6 Three ways to back | 1360 × 1414 | Same image without the paperback (the Cloud header still shows the cover), for use if the paperback reward is left out at launch | Same as above |
| 06b-three-ways-to-back.png | 6 Three ways to back | 1360 × 1634 | Three columns (Retreat, Academy, Book & Library) showing what each is, what it includes, and when. Book & Library prices are one per line ($19, $25, $47 featured). The signed paperback appears with "Price on the reward" and a small image of the landing cover. The Book & Library header shows the cover too. No Retreat or Academy price is shown. | Three ways to back: Retreat, Academy, and Book & Library, with Book & Library rewards at $19, $25 and $47 |
| 06c-three-ways-to-back-no-paperback.png | 6 Three ways to back | 1360 × 1414 | Same image without the paperback (the Book & Library header still shows the cover), for use if the paperback reward is left out at launch | Same as above |
| 07-header-the-retreat.png | 7 The Retreat | 1360 × 300 | Section header | The Retreat |
| 07b-retreat-venue-PLACEHOLDER.png | 7 The Retreat | 1360 × 765 | Venue photo frame with "Burned Out Advisor Retreat, 4 to 6 November 2026" and a "369 seats" badge | Burned Out Advisor Retreat, 4 to 6 November 2026, 369 seats |
| 08-header-the-academy.png | 8 The Academy | 1360 × 300 | Section header | The Academy |
| 08b-academy-map.png | 8 The Academy | 1360 × 956 | US map with pins on #NoDe (North Denver, CO), Villa Park (Chicagoland, IL), and Azur Resorts (Orlando, FL) | Map of the three AiCoach + AOP.biz BootCamp sites: North Denver, Villa Park near Chicago, and Orlando |
| 08c-academy-sites-PLACEHOLDER.png | 8 The Academy | 1360 × 666 | Three site cards, each with a photo frame | The three Academy sites |
| 09-header-cloud-and-aibook-fun.png | 9 Cloud and AiBook.fun | 1360 × 300 | Section header | Cloud and AiBook.fun |
| 09b-aibook-fun-device-mockup.png | 9 Cloud and AiBook.fun | 1360 × 1188 | Laptop and phone frames with real screenshots of the live AiBook.fun reader (https://aibook.fun/read/real-estate), with callouts for Chapter essay, Workflow, Try-it (about 15 minutes), and Last updated | Mockup of the AiBook.fun reader on a laptop and phone, showing a chapter essay, a workflow, its Try-it and the last-updated date |
| 09-header-book-library-and-aibook-fun.png | 9 Book & Library and AiBook.fun | 1360 × 300 | Section header | Book & Library and AiBook.fun |
| 09b-aibook-fun-device-mockup.png | 9 Book & Library and AiBook.fun | 1360 × 1188 | Laptop and phone frames with real screenshots of the live AiBook.fun reader (https://aibook.fun/read/real-estate), with callouts for Chapter essay, Workflow, Try-it (about 15 minutes), and Last updated | Mockup of the AiBook.fun reader on a laptop and phone, showing a chapter essay, a workflow, its Try-it and the last-updated date |
| 10-header-stretch-goals.png | 10 Stretch goals | 1360 × 300 | Section header | Stretch goals |
| 10b-stretch-goals-locked.png | 10 Stretch goals | 1360 × 500 | Bar with padlocks: $15,000 Bonus chapter, $35,000 Audiobook sample, $54,000 Live Q&A replay pack; goal $5,000 | Stretch goals: $15,000 bonus chapter, $35,000 audiobook sample, $54,000 live Q&A replay pack |
| 10c-stretch-goals-15k-unlocked.png | 10 Stretch goals | 1360 × 500 | Same, with $15,000 unlocked | Stretch goal $15,000 unlocked: bonus chapter |
@@ -73,6 +73,7 @@ No real people or venues were generated. These frames wait for real files:
- **Chapter lead authors:** 04c follows the landing page's founding library. The landing page lists Higher Education and Communities co-authors as "To be announced".
- **Public sample workflow:** 05b shows RE-01 as it is live on AiBook.fun. If a different workflow becomes the public sample, re-run `render_screens.py` with its URL and relink 05c.
- **Paperback price:** 06b says "Price on the reward". Use 06c if the paperback is left out at launch.
- **A fourth reward bucket:** 06b and 06c are built from a list of columns in `three_ways()` in `build.py`. To add a fourth bucket once its contents and price are confirmed, append one more column entry there and re-run `python build.py '^06'`; the grid adjusts without a CSS change.
- **Academy cohort dates and seats:** 08c has no dates or seats, and timeline stop 4 says "Dates to be announced".
- **Retreat agenda:** the guide asks for a three-day agenda graphic "once the agenda exists". It doesn't exist yet, so that graphic has not been made.
- **Names for the author and team cards, and approval to list Osinachi Patrick.**
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

+25 -16
View File
@@ -57,7 +57,7 @@ HEADERS = [
('03', 'who-its-for', '🎯', 'Who it’s for'), ('04', 'whats-inside', '📖', 'What’s inside'),
('05', 'try-one-workflow', '🧪', 'Try one workflow'), ('06', 'three-ways-to-back', '🧭', 'Three ways to back'),
('07', 'the-retreat', '🏕️', 'The Retreat'), ('08', 'the-academy', '🎓', 'The Academy'),
('09', 'cloud-and-aibook-fun', '☁️', 'Cloud and AiBook.fun'), ('10', 'stretch-goals', '🎁', 'Stretch goals'),
('09', 'book-library-and-aibook-fun', '📚', 'Book & Library and AiBook.fun'), ('10', 'stretch-goals', '🎁', 'Stretch goals'),
('11', 'timeline', '⏳', 'Timeline'), ('12', 'shipping-and-delivery', '📦', 'Shipping and delivery'),
('13', 'early-readers', '👀', 'Early readers'), ('14', 'authors-and-team', '✍️', 'The authors and team'),
('15', 'special-thanks', '🙏', 'Special thanks'), ('16', 'how-to-help', '📣', 'How to help'),
@@ -233,17 +233,19 @@ page('05c-button-try-the-workflow', f'''<div class="canvas" id="shot">
# ---------------------------------------------------------------- 06 three ways to back
add_header('06')
def three_ways(paperback=True):
cloud_items = [('$19', 'Early Bird eBook', 'First 200 backers', False),
('$25', 'eBook and backer-only updates', '', False),
('$47', 'eBook and 12 months of the AiBook.fun library', '', True)]
"""One column per reward bucket. To add a fourth bucket later, append another (html, width) entry
to `cols` below; the grid template is built from the list, so no CSS change is needed."""
book_items = [('$19', 'Early Bird eBook', 'First 200 backers', False),
('$25', 'eBook and backer-only updates', '', False),
('$47', 'eBook and 12 months of the AiBook.fun library', '', True)]
rows = ''.join(f'<li class="{"feat" if f else ""}"><b>{p}</b><span>{t}' + (f'<small>{s}</small>' if s else '') + '</span></li>'
for p, t, s, f in cloud_items)
for p, t, s, f in book_items)
if paperback:
rows += f'<li><b class="np"><img src="{COVER_3D}" alt=""></b><span>Signed paperback and eBook<small>Price on the reward</small></span></li>'
cloud_deliv = ('<li>Library access: within about 14 days of a successful campaign</li><li>eBook: January 2027</li>'
+ ('<li>Signed paperback: February 2027</li>' if paperback else ''))
book_deliv = ('<li>Library access: within about 14 days of a successful campaign</li><li>eBook: January 2027</li>'
+ ('<li>Signed paperback: February 2027</li>' if paperback else ''))
inc = f'<ul class="inc"><li>{icon("seat")}Your seat</li><li>{icon("book")}The eBook</li><li>{icon("library")}12 months of AiBook.fun</li></ul>'
return f'''<div class="canvas" id="shot"><div class="cols">
cols = [(f'''
<div class="col card">
<p class="nm">Retreat</p><h3>Burned Out Advisor Retreat</h3>
<div class="sec"><p class="lb">What it is</p><p>Three days in person with the authors and other advisors.</p>
@@ -251,7 +253,8 @@ def three_ways(paperback=True):
<div class="sec"><p class="lb">Includes</p>{inc}</div>
<div class="sec"><p class="lb">When</p><p class="fact">{icon("calendar")}4–6 November 2026</p></div>
<div class="pr"><p class="price">Price on the reward</p></div>
</div>
</div>''', '1fr'),
(f'''
<div class="col card">
<p class="nm">Academy</p><h3>AiCoach + AOP.biz BootCamp</h3>
<div class="sec"><p class="lb">What it is</p><p>A seat in the next cohort at one of three sites:</p>
@@ -259,13 +262,18 @@ def three_ways(paperback=True):
<div class="sec"><p class="lb">Includes</p>{inc}</div>
<div class="sec"><p class="lb">When</p><p class="fact">{icon("calendar")}The next cohort at your chosen site</p></div>
<div class="pr"><p class="price">Price on the reward</p></div>
</div>
<div class="col card cloud">
<p class="nm">Cloud</p><div class="ch"><h3>Do it yourself, online</h3><img src="{COVER_FLAT}" alt=""></div>
</div>''', '1fr'),
(f'''
<div class="col card book">
<p class="nm">Book &amp; Library</p><div class="ch"><h3>The book and the AiBook.fun library</h3><img src="{COVER_FLAT}" alt=""></div>
<div class="sec span2"><p class="lb">Choose one</p><ul class="prices">{rows}</ul></div>
<div class="sec"><p class="lb">When</p><ul class="dl">{cloud_deliv}</ul></div>
<div class="sec"><p class="lb">When</p><ul class="dl">{book_deliv}</ul></div>
<div class="pr"></div>
</div>
</div>''', '1.3fr')]
many = len(cols) > 3 # four or more columns: let columns shrink below their content width and wrap the price pill
grid = ' '.join(f'minmax(0,{w})' if many else w for _, w in cols)
html = ''.join(h for h, _ in cols)
return f'''<div class="canvas" id="shot"><div class="cols{' many' if many else ''}" style="grid-template-columns:{grid}">{html}
</div></div>'''
TW_CSS = '''
.cols{display:grid;grid-template-columns:1fr 1fr 1.3fr;grid-template-rows:repeat(6,auto);column-gap:10px}
@@ -282,7 +290,8 @@ TW_CSS = '''
.inc li{display:flex;gap:7px;align-items:flex-start;font-size:14px;line-height:1.35;padding:2px 0}
.pr{align-self:end}
.price{font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--pine);background:var(--pine-wash);border:1px solid var(--pine-tint);border-radius:999px;padding:7px 6px;text-align:center;white-space:nowrap}
.cloud{border-color:rgba(28,93,76,.28)}
.many .price{white-space:normal}
.book{border-color:rgba(28,93,76,.28)}
.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)}
@@ -361,7 +370,7 @@ page('08c-academy-sites', '<div class="canvas" id="shot"><div class="sg">' + ''.
.pl .ico{width:17px;height:17px;margin-top:1px}
''')
# ---------------------------------------------------------------- 09 cloud and aibook.fun (device mockup)
# ---------------------------------------------------------------- 09 book & library and aibook.fun (device mockup)
add_header('09')
L, Ph = SCREENS['laptop'], SCREENS['phone']
def tgt(box, vw, vh, name, side='left', gap=16):
@@ -14,7 +14,8 @@
.inc li{display:flex;gap:7px;align-items:flex-start;font-size:14px;line-height:1.35;padding:2px 0}
.pr{align-self:end}
.price{font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--pine);background:var(--pine-wash);border:1px solid var(--pine-tint);border-radius:999px;padding:7px 6px;text-align:center;white-space:nowrap}
.cloud{border-color:rgba(28,93,76,.28)}
.many .price{white-space:normal}
.book{border-color:rgba(28,93,76,.28)}
.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)}
@@ -26,7 +27,7 @@
.prices li.feat b{color:#fff}
.dl li{font-size:14px;line-height:1.4;padding:2px 0 2px 14px;position:relative}
.dl li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;border-radius:999px;background:var(--pine)}
</style></head><body><div class="canvas" id="shot"><div class="cols">
</style></head><body><div class="canvas" id="shot"><div class="cols" style="grid-template-columns:1fr 1fr 1.3fr">
<div class="col card">
<p class="nm">Retreat</p><h3>Burned Out Advisor Retreat</h3>
<div class="sec"><p class="lb">What it is</p><p>Three days in person with the authors and other advisors.</p>
@@ -43,8 +44,8 @@
<div class="sec"><p class="lb">When</p><p class="fact"><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3.5" y="5" width="17" height="15" rx="2"/><path d="M3.5 9.5h17M8 3v4M16 3v4"/><path d="M7.5 13h2M11 13h2M14.5 13h2M7.5 16.5h2M11 16.5h2"/></svg></span>The next cohort at your chosen site</p></div>
<div class="pr"><p class="price">Price on the reward</p></div>
</div>
<div class="col card cloud">
<p class="nm">Cloud</p><div class="ch"><h3>Do it yourself, online</h3><img src="../assets-gen/cover-flat.png" alt=""></div>
<div class="col card book">
<p class="nm">Book &amp; Library</p><div class="ch"><h3>The book and the AiBook.fun library</h3><img src="../assets-gen/cover-flat.png" alt=""></div>
<div class="sec span2"><p class="lb">Choose one</p><ul class="prices"><li class=""><b>$19</b><span>Early Bird eBook<small>First 200 backers</small></span></li><li class=""><b>$25</b><span>eBook and backer-only updates</span></li><li class="feat"><b>$47</b><span>eBook and 12 months of the AiBook.fun library</span></li><li><b class="np"><img src="../assets-gen/cover-3d.png" alt=""></b><span>Signed paperback and eBook<small>Price on the reward</small></span></li></ul></div>
<div class="sec"><p class="lb">When</p><ul class="dl"><li>Library access: within about 14 days of a successful campaign</li><li>eBook: January 2027</li><li>Signed paperback: February 2027</li></ul></div>
<div class="pr"></div>
@@ -14,7 +14,8 @@
.inc li{display:flex;gap:7px;align-items:flex-start;font-size:14px;line-height:1.35;padding:2px 0}
.pr{align-self:end}
.price{font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--pine);background:var(--pine-wash);border:1px solid var(--pine-tint);border-radius:999px;padding:7px 6px;text-align:center;white-space:nowrap}
.cloud{border-color:rgba(28,93,76,.28)}
.many .price{white-space:normal}
.book{border-color:rgba(28,93,76,.28)}
.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)}
@@ -26,7 +27,7 @@
.prices li.feat b{color:#fff}
.dl li{font-size:14px;line-height:1.4;padding:2px 0 2px 14px;position:relative}
.dl li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;border-radius:999px;background:var(--pine)}
</style></head><body><div class="canvas" id="shot"><div class="cols">
</style></head><body><div class="canvas" id="shot"><div class="cols" style="grid-template-columns:1fr 1fr 1.3fr">
<div class="col card">
<p class="nm">Retreat</p><h3>Burned Out Advisor Retreat</h3>
<div class="sec"><p class="lb">What it is</p><p>Three days in person with the authors and other advisors.</p>
@@ -43,8 +44,8 @@
<div class="sec"><p class="lb">When</p><p class="fact"><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3.5" y="5" width="17" height="15" rx="2"/><path d="M3.5 9.5h17M8 3v4M16 3v4"/><path d="M7.5 13h2M11 13h2M14.5 13h2M7.5 16.5h2M11 16.5h2"/></svg></span>The next cohort at your chosen site</p></div>
<div class="pr"><p class="price">Price on the reward</p></div>
</div>
<div class="col card cloud">
<p class="nm">Cloud</p><div class="ch"><h3>Do it yourself, online</h3><img src="../assets-gen/cover-flat.png" alt=""></div>
<div class="col card book">
<p class="nm">Book &amp; Library</p><div class="ch"><h3>The book and the AiBook.fun library</h3><img src="../assets-gen/cover-flat.png" alt=""></div>
<div class="sec span2"><p class="lb">Choose one</p><ul class="prices"><li class=""><b>$19</b><span>Early Bird eBook<small>First 200 backers</small></span></li><li class=""><b>$25</b><span>eBook and backer-only updates</span></li><li class="feat"><b>$47</b><span>eBook and 12 months of the AiBook.fun library</span></li></ul></div>
<div class="sec"><p class="lb">When</p><ul class="dl"><li>Library access: within about 14 days of a successful campaign</li><li>eBook: January 2027</li></ul></div>
<div class="pr"></div>
@@ -1,5 +1,5 @@
<!doctype html><html lang="en"><head><meta charset="utf-8">
<link rel="stylesheet" href="../styles.css"><style></style></head><body><div class="hdr" id="shot"><div class="tabs"><span></span><span></span><span></span><span></span><span></span></div><div class="mark"><svg viewBox="0 0 40 40" fill="none" aria-hidden="true"><circle cx="20" cy="20" r="17.5" stroke="#efe9db" stroke-width="1" opacity="0.7"/><path d="M20 5 L22.6 20 L20 35 L17.4 20 Z" fill="#efe9db"/><path d="M5 20 L20 17.4 L35 20 L20 22.6 Z" fill="#efe9db" opacity="0.55"/></svg></div><div class="badge"><span class="emoji">☁️</span></div><div style="min-width:0;flex:1"><div class="kicker">We Own AI — The New American Dream</div><h1 data-fit>Cloud and AiBook.fun</h1></div><div class="rule"></div></div>
<link rel="stylesheet" href="../styles.css"><style></style></head><body><div class="hdr" id="shot"><div class="tabs"><span></span><span></span><span></span><span></span><span></span></div><div class="mark"><svg viewBox="0 0 40 40" fill="none" aria-hidden="true"><circle cx="20" cy="20" r="17.5" stroke="#efe9db" stroke-width="1" opacity="0.7"/><path d="M20 5 L22.6 20 L20 35 L17.4 20 Z" fill="#efe9db"/><path d="M5 20 L20 17.4 L35 20 L20 22.6 Z" fill="#efe9db" opacity="0.55"/></svg></div><div class="badge"><span class="emoji">📚</span></div><div style="min-width:0;flex:1"><div class="kicker">We Own AI — The New American Dream</div><h1 data-fit>Book & Library and AiBook.fun</h1></div><div class="rule"></div></div>
<script>
window.__ready = (async () => {
let empty = 0;
File diff suppressed because one or more lines are too long