From 660b7cdf1847231d42f95471bb650a918e9a2bbe Mon Sep 17 00:00:00 2001 From: Garfield Date: Wed, 13 May 2026 14:54:48 -0400 Subject: [PATCH] feat(remotion): YC application video template + talking points - Add YCAppVideo Remotion composition (1920x1080, 60s) - 3s intro card with founder name + company - 55s video placeholder with branded frame + lower thirds - 2s outro card with logo + tagline - Update Root.tsx with new composition - Add YC_APPLICATION_TALKING_POINTS.md with bullet points and recording tips per YC instructions --- product/YC_APPLICATION_TALKING_POINTS.md | 52 ++++ videos/remotion-demo/src/Root.tsx | 9 + videos/remotion-demo/src/YCAppVideo.tsx | 335 +++++++++++++++++++++++ 3 files changed, 396 insertions(+) create mode 100644 product/YC_APPLICATION_TALKING_POINTS.md create mode 100644 videos/remotion-demo/src/YCAppVideo.tsx diff --git a/product/YC_APPLICATION_TALKING_POINTS.md b/product/YC_APPLICATION_TALKING_POINTS.md new file mode 100644 index 0000000..ac6342d --- /dev/null +++ b/product/YC_APPLICATION_TALKING_POINTS.md @@ -0,0 +1,52 @@ +# Y Combinator Application Video — Talking Points + +> **Rules from YC:** 1 minute. Founders talking. No script — use bullet points only. Talk like you're explaining to a friend. + +--- + +## Your Bullet Points (≈60 seconds) + +**[0:00–0:10] Who you are** +- "Hey, I'm Garfield Heron, solo founder of SquareMCP." +- "I'm a builder who's been in the trenches of API integrations for years." + +**[0:10–0:25] The problem** +- "Every company now needs to post to TikTok, Instagram, LinkedIn, Twitter, WhatsApp, Telegram, Discord, Facebook, and email." +- "Right now that's 9 different APIs, 9 different auth flows, 9 different docs, 9 different failure modes." +- "Engineers spend weeks wiring this up. Then it breaks when TikTok changes their API or Meta deprecates a permission." + +**[0:25–0:40] What SquareMCP is** +- "SquareMCP is one API that connects to all of them." +- "You authenticate once per platform through our dashboard, then call one endpoint: `publish_post` or `send_message`." +- "We handle the tokens, the rate limits, the retries, the API changes." +- "It's built on the Model Context Protocol — an open standard — so AI agents can use it too." + +**[0:40–0:52] Traction / proof** +- "We've got the full TikTok sandbox working, Facebook Graph API, and SMTP/email." +- "We're live at squaremcp.com with per-user credential storage, usage tracking, and invoice-based billing." +- "TikTok app review is in progress." + +**[0:52–1:00] Why you, why now** +- "I lived this pain. I'm the exact person to fix it." +- "AI agents need to post to social too — and they need a standard way to do it. MCP is that standard." +- "We're building the infrastructure layer that every AI-native company will need." + +--- + +## Recording Tips + +1. **Use your phone or laptop webcam** — 1080p is plenty. Good lighting matters more than camera quality. +2. **Look at the lens, not the screen.** It feels like eye contact. +3. **Don't memorize.** Glance at these bullet points, then talk naturally. Stumbling is fine — YC prefers real over polished. +4. **One continuous take.** No cuts, no B-roll, no music. Just you talking. +5. **Background:** clean wall, or a desk with a monitor showing your product. Nothing distracting. + +## After Recording + +1. Export your raw video as `my-recording.mp4` (1920×1080 ideally) +2. Replace the placeholder in `YCAppVideo.tsx` with an `` component pointing to your file +3. Re-render: `npx remotion render YCAppVideo out/final-yc-video.mp4` + +--- + +*Good luck!* 🚀 diff --git a/videos/remotion-demo/src/Root.tsx b/videos/remotion-demo/src/Root.tsx index c371ed0..635c144 100644 --- a/videos/remotion-demo/src/Root.tsx +++ b/videos/remotion-demo/src/Root.tsx @@ -2,6 +2,7 @@ import "./index.css"; import { Composition } from "remotion"; import { SquareMCPLinkedIn } from "./SquareMCPLinkedIn"; import { SquareMCPHeroLoop } from "./SquareMCPHeroLoop"; +import { YCAppVideo } from "./YCAppVideo"; import { SquareMCPTikTokCTA, SquareMCPTikTokDemo, @@ -78,6 +79,14 @@ export const RemotionRoot = () => { width={1080} height={1920} /> + ); }; diff --git a/videos/remotion-demo/src/YCAppVideo.tsx b/videos/remotion-demo/src/YCAppVideo.tsx new file mode 100644 index 0000000..0c02e74 --- /dev/null +++ b/videos/remotion-demo/src/YCAppVideo.tsx @@ -0,0 +1,335 @@ +import { AbsoluteFill, interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion"; +import { COLORS, FONT, SPRING_CFG } from "./styles"; + +// ─── CONFIG ────────────────────────────────────────────────────────── +const INTRO_DURATION = 3; // seconds +const OUTRO_DURATION = 2; // seconds +const TOTAL_DURATION = 60; // seconds (YC wants ~1 min) + +// ─── INTRO CARD ────────────────────────────────────────────────────── +const IntroCard = () => { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + + + const nameY = spring({ + frame, + fps, + config: SPRING_CFG, + from: 60, + to: 0, + delay: 0, + }); + + const companyY = spring({ + frame, + fps, + config: SPRING_CFG, + from: 40, + to: 0, + delay: 5, + }); + + const taglineOpacity = interpolate( + frame, + [1.5 * fps, 2 * fps], + [0, 1], + { extrapolateLeft: "clamp", extrapolateRight: "clamp" } + ); + + const fadeOut = interpolate( + frame, + [(INTRO_DURATION - 0.4) * fps, INTRO_DURATION * fps], + [1, 0], + { extrapolateLeft: "clamp", extrapolateRight: "clamp" } + ); + + return ( + + {/* Accent glow */} +
+ + {/* Founder name */} +
+ Garfield Heron +
+ + {/* Company name */} +
+ + SquareMCP +
+ + {/* Subtitle */} +
+ Y Combinator Application +
+ + ); +}; + +// ─── VIDEO PLACEHOLDER (subtle frame for your recording) ───────────── +const VideoFrame = ({ children }: { children?: React.ReactNode }) => { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + + // Fade in from intro + const fadeIn = interpolate( + frame, + [INTRO_DURATION * fps, (INTRO_DURATION + 0.5) * fps], + [0, 1], + { extrapolateLeft: "clamp", extrapolateRight: "clamp" } + ); + + // Fade out to outro + const fadeOut = interpolate( + frame, + [(TOTAL_DURATION - OUTRO_DURATION - 0.5) * fps, (TOTAL_DURATION - OUTRO_DURATION) * fps], + [1, 0], + { extrapolateLeft: "clamp", extrapolateRight: "clamp" } + ); + + return ( + + {/* Corner accents */} +
+ {/* Corner dots */} + {[ + { top: 16, left: 16 }, + { top: 16, right: 16 }, + { bottom: 16, left: 16 }, + { bottom: 16, right: 16 }, + ].map((pos, i) => ( +
+ ))} + + {/* Lower third - name + company */} +
+
+
+ Garfield Heron +
+
+ Founder, SquareMCP +
+
+
+ squaremcp.com +
+
+ + {/* Placeholder text (remove when you overlay your actual video) */} + {!children && ( +
+
YOUR RECORDING GOES HERE
+
+ Record yourself talking, then overlay it in Remotion +
+
+ )} + {children} + + ); +}; + +// ─── OUTRO CARD ────────────────────────────────────────────────────── +const OutroCard = () => { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + const outroStart = (TOTAL_DURATION - OUTRO_DURATION) * fps; + const localFrame = frame - outroStart; + + const scale = spring({ + frame: localFrame, + fps, + config: SPRING_CFG, + from: 0.9, + to: 1, + }); + + const opacity = interpolate( + localFrame, + [0, 0.5 * fps], + [0, 1], + { extrapolateLeft: "clamp", extrapolateRight: "clamp" } + ); + + return ( + + {/* Logo mark */} +
+ ■ +
+ +
+ SquareMCP +
+ +
+ One API. Every Platform. +
+ +
+ squaremcp.com +
+
+ ); +}; + +// ─── MAIN COMPOSITION ──────────────────────────────────────────────── +export const YCAppVideo = () => { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + + const showIntro = frame < INTRO_DURATION * fps; + const showOutro = frame >= (TOTAL_DURATION - OUTRO_DURATION) * fps; + + return ( + + {showIntro && } + {!showIntro && !showOutro && } + {showOutro && } + + ); +};