diff --git a/README.md b/README.md
index e9770a3..ce65cae 100644
--- a/README.md
+++ b/README.md
@@ -53,7 +53,7 @@ Run the same discovery locally with an explicit date:
bun run history:news:pull -- --as-of 2026-08-20 --json-out /tmp/stripe-news.json --markdown-out /tmp/stripe-news.md
```
-The manual [leadership appearance backfill](./.github/workflows/appearance-backfill.yml) searches one bounded calendar window at a time from 2009 onward and uploads a review artifact. It does not edit public data or open issues. The same window can be inspected locally:
+The manual [leadership appearance backfill](./.github/workflows/appearance-backfill.yml) searches one bounded calendar window at a time from 2009 onward and uploads a review artifact. It does not edit public data or open issues. A reviewer can normalize a completed run into the public, nonindexable [appearance backfill queue](https://stripehistory.com/appearances/backfill); candidates remain separate from the reviewed appearance corpus until full source review. The same window can be inspected locally:
```sh
bun run history:news:pull -- --from 2020-01-01 --as-of 2020-12-31 --monitor exa-stripe-leadership-appearances --json-out /tmp/stripe-appearances-2020.json --markdown-out /tmp/stripe-appearances-2020.md
diff --git a/app/appearances/backfill/page.test.tsx b/app/appearances/backfill/page.test.tsx
new file mode 100644
index 0000000..ad0cdb0
--- /dev/null
+++ b/app/appearances/backfill/page.test.tsx
@@ -0,0 +1,30 @@
+import { describe, expect, test } from "bun:test";
+import { renderToStaticMarkup } from "react-dom/server";
+
+import AppearanceBackfillPage, { metadata } from "./page";
+
+describe("leadership appearance backfill page", () => {
+ test("keeps unreviewed discovery results public but out of search results", () => {
+ expect(metadata).toMatchObject({
+ alternates: { canonical: "/appearances/backfill" },
+ robots: { follow: true, index: false },
+ title: "Leadership Appearance Backfill",
+ });
+ });
+
+ test("renders the complete normalized review queue with provenance", async () => {
+ const html = renderToStaticMarkup(await AppearanceBackfillPage());
+
+ expect(html).toContain('
Leadership Appearance Backfill ');
+ expect(html).toContain("31 candidates");
+ expect(html).toContain("47 raw hits");
+ expect(html).toContain("not accepted historical records");
+ expect(html.match(/source review needed/gu)).toHaveLength(31);
+ expect(html).toContain('href="https://www.youtube.com/watch?v=YgYiF86h0yU"');
+ expect(html).toContain('href="https://www.youtube.com/watch?v=y_4emS6D4og"');
+ expect(html).toContain(
+ 'href="https://github.com/hraness/stripe-history/actions/runs/32265726670"',
+ );
+ expect(html).not.toContain("OpenAI Co-founder Greg Brockman");
+ });
+});
diff --git a/app/appearances/backfill/page.tsx b/app/appearances/backfill/page.tsx
new file mode 100644
index 0000000..f2ccac0
--- /dev/null
+++ b/app/appearances/backfill/page.tsx
@@ -0,0 +1,105 @@
+import {
+ loadAppearanceBackfill,
+ type AppearanceBackfill,
+} from "@/lib/appearance-backfill";
+import type { Metadata } from "next";
+import Link from "next/link";
+
+import { SiteFooter } from "../../site-footer";
+import { SiteHeader } from "../../site-header";
+import { site, socialMetadata } from "../../site";
+
+const title = "Leadership Appearance Backfill";
+const description =
+ "A public review queue of historical Stripe founder and executive podcast, interview, talk, and testimony candidates discovered through bounded Exa search.";
+
+export const dynamic = "force-static";
+
+export const metadata: Metadata = {
+ title,
+ description,
+ alternates: { canonical: "/appearances/backfill" },
+ robots: { follow: true, index: false },
+ ...socialMetadata(`${title} | ${site.domain}`, description, "/appearances/backfill"),
+};
+
+export default async function AppearanceBackfillPage() {
+ const backfill = await loadAppearanceBackfill();
+ const candidatesByYear = new Map<
+ string,
+ AppearanceBackfill["candidates"][number][]
+ >();
+ for (const candidate of backfill.candidates) {
+ const year = candidate.published_at.slice(0, 4);
+ const candidates = candidatesByYear.get(year) ?? [];
+ candidates.push(candidate);
+ candidatesByYear.set(year, candidates);
+ }
+
+ return (
+
+
+
+ history
+ /
+ appearances
+ /
+ backfill
+
+
+
+
{title}
+ {backfill.candidates.length} candidates
+
+
+
{description}
+
+ These links are discovery results, not accepted historical records.
+ Each one still needs canonical deduplication, complete source capture,
+ role verification, and transcript-grounded editorial review before it
+ can join the reviewed appearances.
+
+
+ The successful backfill run searched
+ {" "}{backfill.review_window.from.slice(0, 4)} through{" "}
+ {backfill.review_window.through.slice(0, 4)} and returned{" "}
+ {backfill.counts.raw_hits} raw hits. Review collapsed{" "}
+ {backfill.counts.duplicate_variants} duplicate source variants, matched{" "}
+ {backfill.counts.already_reviewed_variants} variants to existing records,
+ and excluded {backfill.counts.excluded_hits} unrelated hits.
+
+
+
+ {[...candidatesByYear.entries()].map(([year, candidates]) => (
+
+
+
{year}
+ {candidates.length}
+
+
+ {candidates.map((candidate) => (
+
+
+
+ {candidate.published_at}
+ source review needed
+
+
+
+ {candidate.participants.join(" · ")}
+
+
+ {new URL(candidate.url).hostname}
+
+
+
+ ))}
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/app/appearances/page.test.tsx b/app/appearances/page.test.tsx
index 23d1945..e8cf2e7 100644
--- a/app/appearances/page.test.tsx
+++ b/app/appearances/page.test.tsx
@@ -25,5 +25,7 @@ describe("Stripe leadership appearances", () => {
expect(html).toContain('"@type":"CollectionPage"');
expect(html).toContain('"@type":"PodcastEpisode"');
expect(html).toContain('"@type":"VideoObject"');
+ expect(html).toContain('href="/appearances/backfill"');
+ expect(html).toContain("Review 31 historical appearance candidates");
});
});
diff --git a/app/appearances/page.tsx b/app/appearances/page.tsx
index 26f04ff..aa1229e 100644
--- a/app/appearances/page.tsx
+++ b/app/appearances/page.tsx
@@ -1,4 +1,5 @@
import { loadHistory } from "@/lib/content";
+import { loadAppearanceBackfill } from "@/lib/appearance-backfill";
import { JsonLdScript } from "@hraness/web-discovery/json-ld";
import type { Metadata } from "next";
import Link from "next/link";
@@ -29,7 +30,10 @@ function durationLabel(seconds: number | undefined): string | null {
}
export default async function AppearancesPage() {
- const history = await loadHistory();
+ const [history, backfill] = await Promise.all([
+ loadHistory(),
+ loadAppearanceBackfill(),
+ ]);
const sourceById = new Map(history.sources.map((source) => [source.id, source]));
return (
@@ -56,6 +60,12 @@ export default async function AppearancesPage() {
{history.appearances.length} reviewed
{description}
+
+
+ Review {backfill.candidates.length} historical appearance candidates
+ {" "}
+ from the public 2009–2026 leadership backfill.
+
{history.appearances.map((appearance) => {
const sources = appearance.source_ids.flatMap((sourceId) => {
diff --git a/app/data/page.test.tsx b/app/data/page.test.tsx
index 228df37..c53ac48 100644
--- a/app/data/page.test.tsx
+++ b/app/data/page.test.tsx
@@ -37,6 +37,9 @@ describe("Stripe company history dataset", () => {
expect(html).toContain('href="/research/sources.yml"');
expect(html).toContain('href="/research/valuations.yml"');
expect(html).toContain('href="/research/appearances.yml"');
+ expect(html).toContain('href="/appearances/backfill"');
+ expect(html).toContain('href="/research/appearance-backfill.yml"');
+ expect(html).toContain("31 candidates");
expect(html).toContain('href="/research/collections.yml"');
expect(html).toContain('href="/research/runs.yml"');
expect(html).toContain(`${history.sources.length} canonical sources`);
diff --git a/app/data/page.tsx b/app/data/page.tsx
index 3bacf7f..26005c0 100644
--- a/app/data/page.tsx
+++ b/app/data/page.tsx
@@ -1,4 +1,5 @@
import { loadHistory } from "@/lib/content";
+import { loadAppearanceBackfill } from "@/lib/appearance-backfill";
import { JsonLdScript } from "@hraness/web-discovery/json-ld";
import type { Metadata } from "next";
import Link from "next/link";
@@ -23,7 +24,10 @@ export const metadata: Metadata = {
};
export default async function DataPage() {
- const history = await loadHistory();
+ const [history, appearanceBackfill] = await Promise.all([
+ loadHistory(),
+ loadAppearanceBackfill(),
+ ]);
const countByCategory = new Map(
history.categories.map(({ id }) => [
id,
@@ -166,6 +170,11 @@ export default async function DataPage() {
YAML ·{" "}
{history.appearances.length} appearances
+
+ appearance backfill queue ·{" "}
+ YAML ·{" "}
+ {appearanceBackfill.candidates.length} candidates
+
research collections YAML
diff --git a/app/globals.css b/app/globals.css
index 266ec77..46f725f 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -291,6 +291,59 @@
text-align: end;
}
+.stripe-history-backfill-intro {
+ color: var(--plain-muted);
+ display: grid;
+ gap: 0.7rem;
+ margin-bottom: 2rem;
+ max-width: 42rem;
+}
+
+.stripe-history-backfill-intro p,
+.stripe-history-backfill-list h3,
+.stripe-history-backfill-list p {
+ margin: 0;
+}
+
+.stripe-history-backfill-years {
+ display: grid;
+ gap: 2rem;
+}
+
+.stripe-history-backfill-years > section > .stripe-history-section-heading {
+ border-top: 2px solid var(--plain-foreground);
+ margin-bottom: 0;
+ padding-top: 0.5rem;
+}
+
+.stripe-history-backfill-list {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.stripe-history-backfill-list > li {
+ border-top: 1px solid var(--plain-line);
+}
+
+.stripe-history-backfill-list article {
+ padding-block: 0.85rem 1rem;
+}
+
+.stripe-history-backfill-list h3 {
+ font-family: var(--font-heading);
+ font-size: var(--text-label);
+ line-height: 1.35;
+ margin-top: 0.25rem;
+}
+
+.stripe-history-backfill-list .stripe-history-appearance-participants,
+.stripe-history-backfill-source {
+ color: var(--plain-muted);
+ font-size: var(--text-caption);
+ margin-top: 0.3rem;
+}
+
.stripe-history-state button {
background: var(--plain-foreground);
border: 1px solid var(--plain-foreground);
diff --git a/lib/appearance-backfill.test.ts b/lib/appearance-backfill.test.ts
new file mode 100644
index 0000000..558b71e
--- /dev/null
+++ b/lib/appearance-backfill.test.ts
@@ -0,0 +1,43 @@
+import { describe, expect, test } from "bun:test";
+import { readFile } from "node:fs/promises";
+import { join } from "node:path";
+
+import { parse } from "yaml";
+
+import {
+ AppearanceBackfillFileSchema,
+ loadAppearanceBackfill,
+} from "./appearance-backfill";
+
+describe("leadership appearance backfill", () => {
+ test("accounts for every raw discovery hit without promoting candidates", async () => {
+ const backfill = await loadAppearanceBackfill();
+
+ expect(backfill.counts).toEqual({
+ already_reviewed_variants: 9,
+ duplicate_variants: 5,
+ excluded_hits: 2,
+ raw_hits: 47,
+ });
+ expect(backfill.candidates).toHaveLength(31);
+ expect(backfill.candidates.every(({ review_status: status }) =>
+ status === "source-review-needed")).toBe(true);
+ expect(backfill.candidates[0]?.published_at).toBe("2026-05-21");
+ expect(backfill.candidates.at(-1)?.published_at).toBe("2013-08-13");
+ });
+
+ test("rejects incomplete hit accounting", async () => {
+ const value = parse(await readFile(join(
+ process.cwd(),
+ "public",
+ "research",
+ "appearance-backfill.yml",
+ ), "utf8")) as Record;
+ const counts = value.counts as Record;
+ counts.raw_hits = 48;
+
+ expect(() => AppearanceBackfillFileSchema.parse(value)).toThrow(
+ "Backfill accounting covers 47 of 48 raw hits",
+ );
+ });
+});
diff --git a/lib/appearance-backfill.ts b/lib/appearance-backfill.ts
new file mode 100644
index 0000000..55e3ccd
--- /dev/null
+++ b/lib/appearance-backfill.ts
@@ -0,0 +1,115 @@
+import { readFile } from "node:fs/promises";
+import { dirname, join } from "node:path";
+import { fileURLToPath } from "node:url";
+
+import { parse } from "yaml";
+import { z } from "zod";
+
+import { CompactTextSchema, HttpsUrlSchema, PartialDateSchema } from "./history-schema";
+
+export const STRIPE_HISTORY_APPEARANCE_BACKFILL_SCHEMA_VERSION =
+ "stripe-history/appearance-backfill/v1" as const;
+
+const ExactDateSchema = PartialDateSchema.refine(
+ (value) => value.length === 10,
+ "Backfill dates must include year, month, and day",
+);
+
+const AppearanceBackfillCandidateSchema = z.strictObject({
+ participants: z.array(CompactTextSchema.max(100)).min(1).max(2),
+ published_at: ExactDateSchema,
+ review_status: z.literal("source-review-needed"),
+ title: CompactTextSchema.max(240),
+ url: HttpsUrlSchema,
+});
+
+export const AppearanceBackfillFileSchema = z.strictObject({
+ candidates: z.array(AppearanceBackfillCandidateSchema).min(1).max(100),
+ completed_at: z.iso.datetime({ offset: true }),
+ counts: z.strictObject({
+ already_reviewed_variants: z.number().int().nonnegative(),
+ duplicate_variants: z.number().int().nonnegative(),
+ excluded_hits: z.number().int().nonnegative(),
+ raw_hits: z.number().int().positive(),
+ }),
+ monitor_id: z.literal("exa-stripe-leadership-appearances"),
+ review_window: z.strictObject({
+ from: ExactDateSchema,
+ through: ExactDateSchema,
+ }),
+ schema: z.literal(STRIPE_HISTORY_APPEARANCE_BACKFILL_SCHEMA_VERSION),
+ workflow_run: HttpsUrlSchema,
+}).superRefine((file, context) => {
+ if (file.review_window.from > file.review_window.through) {
+ context.addIssue({
+ code: "custom",
+ message: "Backfill review window must be ordered",
+ path: ["review_window"],
+ });
+ }
+ const accountedHits = file.candidates.length
+ + file.counts.already_reviewed_variants
+ + file.counts.duplicate_variants
+ + file.counts.excluded_hits;
+ if (accountedHits !== file.counts.raw_hits) {
+ context.addIssue({
+ code: "custom",
+ message: `Backfill accounting covers ${accountedHits} of ${file.counts.raw_hits} raw hits`,
+ path: ["counts"],
+ });
+ }
+ const urls = new Set();
+ for (const [index, candidate] of file.candidates.entries()) {
+ if (
+ candidate.published_at < file.review_window.from
+ || candidate.published_at > file.review_window.through
+ ) {
+ context.addIssue({
+ code: "custom",
+ message: "Candidate date falls outside the reviewed window",
+ path: ["candidates", index, "published_at"],
+ });
+ }
+ if (urls.has(candidate.url)) {
+ context.addIssue({
+ code: "custom",
+ message: "Candidate URLs must be unique",
+ path: ["candidates", index, "url"],
+ });
+ }
+ urls.add(candidate.url);
+ const previous = file.candidates[index - 1];
+ if (
+ previous !== undefined
+ && (
+ previous.published_at < candidate.published_at
+ || (
+ previous.published_at === candidate.published_at
+ && previous.title.localeCompare(candidate.title) > 0
+ )
+ )
+ ) {
+ context.addIssue({
+ code: "custom",
+ message: "Candidates must be reverse chronological, then title ordered",
+ path: ["candidates", index],
+ });
+ }
+ }
+});
+
+export type AppearanceBackfill = z.infer;
+
+const PROJECT_DIRECTORY = dirname(dirname(fileURLToPath(import.meta.url)));
+const DEFAULT_PATH = join(
+ PROJECT_DIRECTORY,
+ "public",
+ "research",
+ "appearance-backfill.yml",
+);
+
+export async function loadAppearanceBackfill(
+ path = DEFAULT_PATH,
+): Promise {
+ return AppearanceBackfillFileSchema.parse(parse(await readFile(path, "utf8")) as unknown);
+}
diff --git a/public/research/appearance-backfill.yml b/public/research/appearance-backfill.yml
new file mode 100644
index 0000000..34eee75
--- /dev/null
+++ b/public/research/appearance-backfill.yml
@@ -0,0 +1,168 @@
+schema: stripe-history/appearance-backfill/v1
+completed_at: 2026-08-19T14:45:15Z
+workflow_run: https://github.com/hraness/stripe-history/actions/runs/32265726670
+monitor_id: exa-stripe-leadership-appearances
+review_window:
+ from: 2009-01-01
+ through: 2026-08-19
+counts:
+ raw_hits: 47
+ already_reviewed_variants: 9
+ duplicate_variants: 5
+ excluded_hits: 2
+candidates:
+ - published_at: 2026-05-21
+ title: "The Best Time in History to Start a Company | Patrick Collison & Amjad Masad"
+ url: https://www.youtube.com/watch?v=YgYiF86h0yU
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2026-05-19
+ title: "Nat Friedman and Daniel Gross in conversation with John and Patrick Collison"
+ url: https://www.youtube.com/watch?v=l9wzs_QIyp0
+ participants: [John Collison, Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2026-05-16
+ title: "Stripe's John Collison on How Agentic Commerce Will Reshape the Internet | Odd Lots"
+ url: https://www.youtube.com/watch?v=QhGqLqCzFac
+ participants: [John Collison]
+ review_status: source-review-needed
+ - published_at: 2026-04-28
+ title: "John and Patrick Collison on Stripe's Growth, Agent Commerce, and the Future of Software"
+ url: https://a16z.com/podcast/john-and-patrick-collison-on-stripes-growth-agent-commerce-and-the-future-of-software
+ participants: [John Collison, Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2026-02-20
+ title: "Patrick Collison on Stripe's Early Choices, Smalltalk, and What Comes After Coding"
+ url: https://a16z.com/podcast/patrick-collison-on-stripes-early-choices-smalltalk-and-what-comes-after-coding
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2025-11-13
+ title: "Inside Stripe: Stablecoins, AI, and (not) Going Public | Will Gaybrick"
+ url: https://www.youtube.com/watch?v=AM1_NADNSgI
+ participants: [Will Gaybrick]
+ review_status: source-review-needed
+ - published_at: 2025-07-17
+ title: "Patrick Collison on programming languages, AI, and Stripe"
+ url: https://podcasts.apple.com/id/podcast/patrick-collison-on-programming-languages-ai-and/id1819406817?i=1000717598878
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2025-06-27
+ title: "Hard Fork Live, with Patrick Collison, Kathryn Zealand, Sam Altman & Brad Lightcap"
+ url: https://www.youtube.com/watch?v=jdNwzYMtPN8
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2025-02-28
+ title: "Bonus Episode: Stripe CEO John Collison"
+ url: https://podcasts.apple.com/us/podcast/bonus-episode-stripe-ceo-john-collison-2-28-25/id1480890290?i=1000696834852
+ participants: [John Collison]
+ review_status: source-review-needed
+ - published_at: 2024-09-20
+ title: "Will Gaybrick on capital allocation, org design, AI, and global growth"
+ url: https://podcasts.apple.com/us/podcast/ep-118-will-gaybrick-president-of-product-and/id1606770839?i=1000670156025
+ participants: [Will Gaybrick]
+ review_status: source-review-needed
+ - published_at: 2023-10-06
+ title: "Arthur Mensch and John Collison | Stripe AI Day Paris"
+ url: https://www.youtube.com/watch?v=yXN5xSXJ1Is
+ participants: [John Collison]
+ review_status: source-review-needed
+ - published_at: 2023-08-08
+ title: "Scaling People with Claire Hughes Johnson"
+ url: https://www.newcomer.co/p/scaling-people-with-claire-hughes
+ participants: [Claire Hughes Johnson]
+ review_status: source-review-needed
+ - published_at: 2023-05-24
+ title: "Claire Hughes Johnson on scaling operations and culture at Stripe"
+ url: https://podcasts.apple.com/us/podcast/claire-hughes-johnson-stripe-scaling-operations-and/id80867514?i=1000614322138
+ participants: [Claire Hughes Johnson]
+ review_status: source-review-needed
+ - published_at: 2023-05-15
+ title: "Stripe CEO Patrick Collison on innovating e-commerce and accelerating biomedical research"
+ url: https://podcasts.apple.com/us/podcast/stripe-ceo-patrick-collison-on-innovating-e-commerce/id1610419911?i=1000613083611
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2023-05-04
+ title: "Building a culture of excellence | David Singleton"
+ url: https://www.youtube.com/watch?v=F0_IKKY3HCk
+ participants: [David Singleton]
+ review_status: source-review-needed
+ - published_at: 2023-03-06
+ title: "Former Stripe COO Claire Hughes Johnson on scaling people"
+ url: https://podcasts.apple.com/us/podcast/128-former-coo-corporate-officer-at-stripe-claire-hughes/id1510985491?i=1000602919224
+ participants: [Claire Hughes Johnson]
+ review_status: source-review-needed
+ - published_at: 2023-03-05
+ title: "Lessons from scaling Stripe | Claire Hughes Johnson"
+ url: https://podcasts.apple.com/us/podcast/lessons-from-scaling-stripe-claire-hughes-johnson-ex/id1627920305?i=1000602823726
+ participants: [Claire Hughes Johnson]
+ review_status: source-review-needed
+ - published_at: 2023-02-22
+ title: "Extreme Product Design with Stripe CTO David Singleton"
+ url: https://podcasts.apple.com/us/podcast/saastr-636-extreme-product-design-building-things-people/id1089973241?i=1000601129097
+ participants: [David Singleton]
+ review_status: source-review-needed
+ - published_at: 2023-02-14
+ title: "Stripe's Patrick Collison: Micro Pessimism, Macro Optimism"
+ url: https://podcasts.apple.com/mu/podcast/stripes-patrick-collison-micro-pessimism-macro-optimism/id1089013200?i=1000599602701
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2022-07-13
+ title: "Stripe's David Singleton on technology innovation, customers, and the CTO role"
+ url: https://podcasts.apple.com/us/podcast/stripes-david-singleton-on-technology-innovation-putting/id962121995?i=1000569774533
+ participants: [David Singleton]
+ review_status: source-review-needed
+ - published_at: 2022-06-20
+ title: "The future of the internet economy with John Collison"
+ url: https://podcasts.apple.com/ca/podcast/the-future-of-the-internet-economy-with-stripe/id1462649946?i=1000567104995
+ participants: [John Collison]
+ review_status: source-review-needed
+ - published_at: 2022-06-10
+ title: "John Collison in conversation with Stanley Druckenmiller | Sohn 2022"
+ url: https://www.youtube.com/watch?v=-7sWLIybWnQ
+ participants: [John Collison]
+ review_status: source-review-needed
+ - published_at: 2021-10-11
+ title: "Stripe CRO Mike Clayville: Building Tornado Companies"
+ url: https://podcasts.apple.com/us/podcast/cro-stripe-mike-clayville-building-tornado-companies/id1510985491?i=1000538185612
+ participants: [Mike Clayville]
+ review_status: source-review-needed
+ - published_at: 2021-05-10
+ title: "Claire Hughes Johnson, COO of Stripe | The #ANGELS Podcast"
+ url: https://podcasts.apple.com/us/podcast/claire-hughes-johnson-coo-of-stripe/id1550832941?i=1000521087003
+ participants: [Claire Hughes Johnson]
+ review_status: source-review-needed
+ - published_at: 2019-11-25
+ title: "Tech and Progress with Patrick Collison and Tyler Cowen"
+ url: https://podcasts.apple.com/us/podcast/tech-and-progress-with-patrick-collison-and-tyler-cowen/id1460731098?i=1000457824338
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2018-05-02
+ title: "Patrick Collison: Earning Your Stripes | The Knowledge Project"
+ url: https://podcasts.apple.com/us/podcast/32-patrick-collison-earning-your-stripes/id990149481?i=1000410487693
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2018-03-02
+ title: "Stripe's Patrick Collison: I'm petrified of getting too big"
+ url: https://podcasts.apple.com/us/podcast/stripes-patrick-collison-im-petrified-of-getting-too/id1233991021?i=1000404469689
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2017-04-12
+ title: "Patrick Collison has a few questions for Tyler (live)"
+ url: https://podcasts.apple.com/jp/podcast/patrick-collison-has-a-few-questions-for-tyler-live/id983795625?i=1000384289632
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2016-12-06
+ title: "Stripe CEO Patrick Collison on management, rationalism, and the Enlightenment"
+ url: https://podcasts.apple.com/no/podcast/stripe-ceo-patrick-collison-on-management-rationalism/id1081584611?i=1000378637097
+ participants: [Patrick Collison]
+ review_status: source-review-needed
+ - published_at: 2014-10-28
+ title: "Hiring and Culture, Part 2 | Patrick and John Collison"
+ url: https://www.youtube.com/watch?v=H8Dl8rZ6qwE
+ participants: [Patrick Collison, John Collison]
+ review_status: source-review-needed
+ - published_at: 2013-08-13
+ title: "unSEXY Conf 2013: Patrick Collison, Stripe"
+ url: https://www.youtube.com/watch?v=y_4emS6D4og
+ participants: [Patrick Collison]
+ review_status: source-review-needed