From 5e61d650095c4a1aefd6ffdeded9653a45a8a8ca Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 14 Oct 2026 11:55:18 +0000 Subject: [PATCH 1/2] Take the Past the Pilot offer off the public site The live buy page and its thanks page were not in git. Archive that copy under unpublished/ so it is not a route, and drop the consulting and advisory invites from about and contact. Co-authored-by: prime3679 --- src/pages/about.astro | 8 ++---- src/pages/contact.astro | 4 +-- tests/contact.spec.ts | 9 ++++++ tests/e2e/site-basics.spec.ts | 2 +- tests/work.spec.ts | 3 ++ unpublished/past-the-pilot/index.astro | 38 +++++++++++++++++++++++++ unpublished/past-the-pilot/thanks.astro | 15 ++++++++++ 7 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 unpublished/past-the-pilot/index.astro create mode 100644 unpublished/past-the-pilot/thanks.astro diff --git a/src/pages/about.astro b/src/pages/about.astro index a6d7d06..5d9ac08 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -10,7 +10,7 @@ const work = [ { id: 'salesforce', company: 'Salesforce', - summary: 'director of product, emerging technology. 2025 to present. enterprise ai adoption, 0 to 1: how large organizations actually absorb ai, and what makes it stick past the pilot.', + summary: 'director of product, emerging technology. 2025 to present. enterprise ai adoption, 0 to 1: how large organizations actually absorb ai, and what makes it stick after the first rollout.', }, { id: 'siriusxm', @@ -50,12 +50,10 @@ const work = [ -
-

open to

+
+

conversation

    -
  • advisory roles at the right early-stage companies
  • conversations about ai, enterprise product, and how organizations actually change
  • -
  • selective consulting on ai product strategy
diff --git a/src/pages/contact.astro b/src/pages/contact.astro index 26a3684..0a497a0 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -6,8 +6,8 @@ import PageIntro from '../components/PageIntro.astro'; const returnUrl = new URL('/contact/?sent=1', Astro.site).href; --- - - + + diff --git a/tests/contact.spec.ts b/tests/contact.spec.ts index ce24c3e..95e0046 100644 --- a/tests/contact.spec.ts +++ b/tests/contact.spec.ts @@ -1,5 +1,14 @@ import { test, expect } from '@playwright/test'; +test('contact page does not invite advisory work', async ({ page }) => { + await page.goto('/contact/'); + await expect(page.locator('.page-standfirst')).toHaveText('product challenges or just good conversation. it lands in my inbox.'); + await expect(page.locator('meta[name="description"]')).toHaveAttribute('content', /product leader and builder/); + const description = await page.locator('meta[name="description"]').getAttribute('content'); + expect(description?.toLowerCase()).not.toMatch(/advis|consult/); + await expect(page.locator('main')).not.toContainText(/advis|consult/i); +}); + test('contact form is present with all fields', async ({ page }) => { await page.goto('/contact'); diff --git a/tests/e2e/site-basics.spec.ts b/tests/e2e/site-basics.spec.ts index aa26aa6..92af9a5 100644 --- a/tests/e2e/site-basics.spec.ts +++ b/tests/e2e/site-basics.spec.ts @@ -41,7 +41,7 @@ test('nav: header shows the home wordmark + canonical primary tabs', async ({ pa }); test('scrubbed pages are gone, not redirected', async ({ page }) => { - for (const path of ['/360/', '/joytap-privacy/', '/writing/joytap-one-sprint/', '/lab/iron-log/', '/lab/night-train/', '/signal-room/', '/signal-room/night-shift/']) { + for (const path of ['/360/', '/joytap-privacy/', '/writing/joytap-one-sprint/', '/lab/iron-log/', '/lab/night-train/', '/signal-room/', '/signal-room/night-shift/', '/past-the-pilot/', '/past-the-pilot/thanks/']) { const response = await page.goto(path); expect(response?.status(), path).toBe(404); } diff --git a/tests/work.spec.ts b/tests/work.spec.ts index b1204df..26f4a2d 100644 --- a/tests/work.spec.ts +++ b/tests/work.spec.ts @@ -14,6 +14,9 @@ test('about page carries the work record, one row per role', async ({ page }) => await expect(work.getByText(company, { exact: true })).toBeVisible(); } await expect(work.getByText(/18% more daily sessions/)).toBeVisible(); + await expect(work.getByText(/what makes it stick after the first rollout/)).toBeVisible(); + await expect(page.getByRole('heading', { name: 'open to' })).toHaveCount(0); + await expect(page.locator('main')).not.toContainText(/advisory|consulting|past the pilot/i); }); test('/work/# keeps its anchor on the about page', async ({ page }) => { diff --git a/unpublished/past-the-pilot/index.astro b/unpublished/past-the-pilot/index.astro new file mode 100644 index 0000000..d449de0 --- /dev/null +++ b/unpublished/past-the-pilot/index.astro @@ -0,0 +1,38 @@ +--- +// Held off the public site until outside work is approved. +// Not a route: Astro only publishes files under src/pages. +// To restore, move this file to src/pages/past-the-pilot.astro and point the +// imports at ../layouts/Base.astro and ../components/PageIntro.astro. +import Base from '../../src/layouts/Base.astro'; +import PageIntro from '../../src/components/PageIntro.astro'; +--- + + + + +
+

$1,500 · async · ≤7 days · no discovery call

+
    +
  • short written memo (not a slide deck)
  • +
  • ranked kill / fix / ship-next list
  • +
  • what evidence would change the call
  • +
  • one recommended next move
  • +
+

+ personal product advisory from someone who has lived enterprise AI past the pilot. + not a Salesforce offering. not a coaching call. +

+ +
+ +
+

how it works

+
    +
  1. pay $1,500 on Stripe.
  2. +
  3. send URL + Loom/docs: what is live, who the user is, what earning was supposed to mean.
  4. +
  5. within 7 days you get the memo + ranked list. no Zoom required.
  6. +
+
+ diff --git a/unpublished/past-the-pilot/thanks.astro b/unpublished/past-the-pilot/thanks.astro new file mode 100644 index 0000000..286f0df --- /dev/null +++ b/unpublished/past-the-pilot/thanks.astro @@ -0,0 +1,15 @@ +--- +// Held off the public site until outside work is approved. +// Not a route: Astro only publishes files under src/pages. +// To restore, move this file to src/pages/past-the-pilot/thanks.astro and point +// the imports at ../../layouts/Base.astro and ../../components/PageIntro.astro. +import Base from '../../src/layouts/Base.astro'; +import PageIntro from '../../src/components/PageIntro.astro'; +--- + + + + +

turnaround: ≤7 days async. no Zoom required.

+ + From f4f4cfbe96b969b03e25d9edbc51a21683025843 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 14 Oct 2026 11:57:18 +0000 Subject: [PATCH 2/2] Refresh the architecture fingerprint after the about and contact edits The contribution gate hashes those pages. The digest now matches the softened copy. Co-authored-by: prime3679 --- .agent/architecture.json | 2 +- docs/architecture.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.agent/architecture.json b/.agent/architecture.json index f78f3ef..075de16 100644 --- a/.agent/architecture.json +++ b/.agent/architecture.json @@ -92,7 +92,7 @@ "dist/**", "node_modules/**" ], - "digest": "7ae9bd6c7d1ea083b184aa8ca135b89ec4543b0ee5d21bf7535f7534af234759" + "digest": "4137d8bcbd0f88346d9213830c19603fc0a0d23ecbc20258252ea082073778f7" }, "components": [ { diff --git a/docs/architecture.html b/docs/architecture.html index ee00e68..df1f260 100644 --- a/docs/architecture.html +++ b/docs/architecture.html @@ -4,7 +4,7 @@ - + PersonalSite architecture map