diff --git a/public/images/book-cover-soil.webp b/public/images/book-cover-soil.webp new file mode 100644 index 0000000..e8699a9 Binary files /dev/null and b/public/images/book-cover-soil.webp differ diff --git a/public/images/book-cover-walk.webp b/public/images/book-cover-walk.webp new file mode 100644 index 0000000..dcf0f67 Binary files /dev/null and b/public/images/book-cover-walk.webp differ diff --git a/src/components/TalkCard.astro b/src/components/TalkCard.astro index 29467a7..b0a867d 100644 --- a/src/components/TalkCard.astro +++ b/src/components/TalkCard.astro @@ -8,7 +8,7 @@ export interface Props { slug?: string; } -const { title, premise, takeaways, audience } = Astro.props; +const { title, premise, takeaways, audience, slug } = Astro.props; ---
@@ -27,6 +27,10 @@ const { title, premise, takeaways, audience } = Astro.props;
Ideal Audience: {audience}
+ + {slug && ( + Learn more → + )}
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 6b12ba6..3bb890f 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -55,10 +55,17 @@ const currentPath = canonicalUrl || Astro.url.pathname; - + - + + + + + + + + diff --git a/src/pages/books.astro b/src/pages/books.astro index 6471821..ed74517 100644 --- a/src/pages/books.astro +++ b/src/pages/books.astro @@ -23,7 +23,7 @@ import SharedForm from '../components/Form/SharedForm.astro';
- 📚 + The Soil Beneath the Code book cover

The Soil Beneath the Code

Published 2023

@@ -38,7 +38,7 @@ import SharedForm from '../components/Form/SharedForm.astro';
- 🚶 + A Walk in Mentoring book cover

A Walk in Mentoring

Published 2024

@@ -53,7 +53,7 @@ import SharedForm from '../components/Form/SharedForm.astro';
- 🔍 + Dark Provenance book cover

Dark Provenance

Coming 2026

@@ -118,10 +118,16 @@ import SharedForm from '../components/Form/SharedForm.astro'; } .book-cover { - font-size: 4rem; margin-bottom: 1.5rem; } + .book-cover img { + width: 150px; + height: auto; + border-radius: 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + } + .book-card h2 { font-family: var(--font-heading); font-size: 1.5rem; diff --git a/src/pages/index.astro b/src/pages/index.astro index 2b3ef2f..96a6581 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -29,8 +29,9 @@ import PillarCard from '../components/PillarCard.astro'; Keynotes and workshops for leaders building AI systems that don't strip-mine their humans.

diff --git a/src/pages/speaking.astro b/src/pages/speaking.astro index e67e37e..e65e99a 100644 --- a/src/pages/speaking.astro +++ b/src/pages/speaking.astro @@ -28,7 +28,7 @@ import SharedForm from '../components/Form/SharedForm.astro';

🎬 Speaker reel in production

-

Coming soon — 3-minute highlight reel from keynotes and workshops.

+

Coming soon — 3-minute highlight reel from keynotes and workshops. In the meantime, explore my signature talks below.

@@ -43,6 +43,7 @@ import SharedForm from '../components/Form/SharedForm.astro'; - -

Past Events

@@ -88,16 +89,23 @@ import SharedForm from '../components/Form/SharedForm.astro';

Game Changers Summit 2026

Featured Speaker — "From Strip-Mining to Cultivation"

+

March 2026 • Virtual

AI Engineering Leadership Forum

Keynote — "50 First Dates with AI"

+

February 2026 • San Francisco

+
+ +
+

Tech Leaders Collective

+

Workshop — "The Soil Under Your Team"

+

January 2026 • Remote

- -->
@@ -220,8 +228,11 @@ import SharedForm from '../components/Form/SharedForm.astro'; gap: 2rem; } - .events-section { - background: white; + .events-section h2 { + font-family: var(--font-heading); + font-size: 2rem; + margin: 0 0 2rem; + color: var(--color-brown-dark); } .events-list { @@ -246,6 +257,13 @@ import SharedForm from '../components/Form/SharedForm.astro'; color: var(--color-text-muted); } + .event-date { + font-size: 0.875rem; + font-style: italic; + color: var(--color-text-muted); + margin-top: 0.25rem; + } + .book-section { background: var(--color-brown-dark); color: white; diff --git a/src/pages/speaking/50-first-dates.astro b/src/pages/speaking/50-first-dates.astro new file mode 100644 index 0000000..65df958 --- /dev/null +++ b/src/pages/speaking/50-first-dates.astro @@ -0,0 +1,207 @@ +--- +import BaseLayout from '../../layouts/BaseLayout.astro'; + +const talk = { + title: "50 First Dates with AI", + premise: "Current AI memory architecture is anterograde amnesia — and we're all Henry Roth, recording VHS tapes every night so our agent can wake up functional tomorrow.", + duration: "45–60 minutes", + type: "Keynote", + idealFor: ["Engineering leaders", "AI product teams", "CTOs implementing agentic systems"], + takeaways: [ + "Why your AI's 'memory' is actually just replay, not learning", + "The three-layer memory architecture that actually compounds", + "How to move from VHS tapes to persistent, evolving agents" + ], + description: `Every morning, your AI wakes up and doesn't remember yesterday. + +We built agentic systems with anterograde amnesia — they can't form new long-term memories. Instead, we record VHS tapes (context windows) every night and hope the agent can reconstruct enough context to be functional. + +This isn't a technical limitation. It's an architectural choice we keep making because it's easier than building systems that actually learn. + +In this keynote, I show why the "50 First Dates" problem is the single biggest blocker to truly agentic AI — and how to build systems that compound instead of reset.` +}; +--- + + + +
+
+
+ {talk.type} + {talk.duration} +
+

{talk.title}

+

{talk.premise}

+
+ +
+
+

The Talk

+ {talk.description.split('\n\n').map(para => ( +

{para}

+ ))} +
+ +
+

What You'll Learn

+
    + {talk.takeaways.map(takeaway => ( +
  • {takeaway}
  • + ))} +
+
+ +
+

Ideal For

+
+ {talk.idealFor.map(audience => ( + {audience} + ))} +
+
+
+ + +
+ +
+ + diff --git a/src/pages/speaking/strip-mining-to-cultivation.astro b/src/pages/speaking/strip-mining-to-cultivation.astro new file mode 100644 index 0000000..f0e7840 --- /dev/null +++ b/src/pages/speaking/strip-mining-to-cultivation.astro @@ -0,0 +1,207 @@ +--- +import BaseLayout from '../../layouts/BaseLayout.astro'; + +const talk = { + title: "From Strip-Mining to Cultivation", + premise: "The shift from extraction to cultivation in AI-era teams. Why throughput optimization is killing your soil health.", + duration: "45–60 minutes", + type: "Keynote", + idealFor: ["CTOs", "VP Engineering", "People leaders", "Engineering managers"], + takeaways: [ + "The difference between strip-mining and cultivation mindsets", + "How to audit your current practices for extraction vs. growth", + "A cultivation playbook you can implement this quarter" + ], + description: `The most successful AI teams aren't the ones with the best models. They're the ones who stopped strip-mining their humans and started cultivating them. + +For a decade, we've optimized engineering teams like strip-mining operations: extract maximum value, move fast, burn bright. It worked when the work was predictable and the humans were replaceable. + +AI changes the equation. The work is no longer predictable — it's conversational, contextual, and constantly evolving. You can't strip-mine your way through agentic development. You need soil that gets richer over time. + +This keynote shows the cultivation playbook: how to build teams where AI augments human capability instead of replacing it, where throughput is a byproduct of health, and where your best people don't just stay — they compound.` +}; +--- + + + +
+
+
+ {talk.type} + {talk.duration} +
+

{talk.title}

+

{talk.premise}

+
+ +
+
+

The Talk

+ {talk.description.split('\n\n').map(para => ( +

{para}

+ ))} +
+ +
+

What You'll Learn

+
    + {talk.takeaways.map(takeaway => ( +
  • {takeaway}
  • + ))} +
+
+ +
+

Ideal For

+
+ {talk.idealFor.map(audience => ( + {audience} + ))} +
+
+
+ + +
+ +
+ + diff --git a/src/styles/global.css b/src/styles/global.css index 92a857f..8c966f7 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -477,3 +477,30 @@ code { --size-4xl: 2.5rem; } } + +/* Mobile touch targets (44px minimum) - Issue #65 */ +@media (pointer: coarse) { + .nav-links a, + .footer-links a, + .book-link, + .talk-link, + .btn-primary, + .btn-outline { + min-height: 44px; + min-width: 44px; + display: inline-flex; + align-items: center; + justify-content: center; + } +} + +/* Reduced motion - Issue #53 accessibility */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +}