Skip to content
How I AIHow I AI

How Notion designers ship live prototypes in minutes | Brian Lovin (Product designer)

Brian Lovin is a designer at Notion AI who has transformed how the design team builds prototypes, by creating a shared code environment powered by Claude Code. Instead of designers working in isolated repositories or limited to static Figma designs, Brian built a collaborative “prototype playground” where the entire team can create, share, and iterate on functional prototypes. In this episode, Brian demonstrates how AI-assisted coding has dramatically accelerated the design process and why code-based prototyping is essential for building AI-powered products. *What you’ll learn:* 1. How Brian built a shared Next.js app that serves as a collaborative prototyping environment for Notion’s design team 2. Why encountering “reality” early in the design process leads to better products 3. How to use Claude Code’s “plan mode” to get better results when prototyping 4. The power of custom Claude slash commands and skills to automate repetitive tasks 5. How to transform Figma designs into working code with a single prompt 6. Why AI-powered products can’t be effectively designed in static tools like Figma 7. Brian’s rule for working with AI: “When Claude asks you to do something, teach it to do that thing itself” *Brought to you by:* WorkOS—Make your app enterprise-ready today: https://workos.com?utm_source=lennys_howiai&utm_medium=podcast&utm_campaign=q22025 Orkes—The enterprise platform for reliable applications and agentic workflows: https://www.orkes.io/ *In this episode, we cover:* (00:00) Introduction to Brian (02:36) Building for B2B SaaS (04:42) Notion’s prototype playground: what it is and how it works (08:01) The technical background of designers using the playground (10:52) Demo: building a podcast player prototype (16:00) Actionable tips for better Claude Code results (20:16) Analyzing the result (20:30) Creating slash commands to simplify the workflow (23:03) Turning Figma designs into production-ready code (25:06) MCP frustrations and tips (30:54) Demo: creating a custom “find icon” skill (35:03) Demo: Creating a deploy command to simplify GitHub workflows (41:09) Quick recap (41:59) How code-based prototyping is changing design at Notion (46:48) Brian’s tool preferences (48:42) Prompting techniques when AI is not listening *Detailed workflow walkthroughs from this episode:* • How Notion Designs with AI: Brian Lovin’s Prototype Playground and Claude Code Workflows: https://www.chatprd.ai/how-i-ai/how-notion-designs-with-ai-brian-lovins-prototype-playground-and-claude-code-workflows • Automate Your Git and Deployment Workflow with a Custom AI Command: https://www.chatprd.ai/how-i-ai/workflows/automate-your-git-and-deployment-workflow-with-a-custom-ai-command • Build an AI Workflow to Convert Figma Designs to Code with a Self-Correction Loop: https://www.chatprd.ai/how-i-ai/workflows/build-an-ai-workflow-to-convert-figma-designs-to-code-with-a-self-correction-loop • Use Claude Code to Rapidly Build Interactive Prototypes from Ideas: https://www.chatprd.ai/how-i-ai/workflows/use-claude-code-to-rapidly-build-interactive-prototypes-from-ideas *Tools referenced:* • Claude Code: https://claude.ai/ • Cursor: https://cursor.sh/ • Next.js: https://nextjs.org/ • Figma: https://figma.com/ • Monologue: https://www.monologue.to/ • GitHub: https://github.com/ • GitHub Desktop: https://desktop.github.com/ • Tailwind CSS: https://tailwindcss.com/ • Bun: https://bun.sh/ *Other references:* • Claude Skills explained: How to create reusable AI workflows: https://www.lennysnewsletter.com/p/claude-skills-explained *Where to find Brian Lovin:* Website: https://brianlovin.com/ LinkedIn: linkedin.com/in/brianlovin X: https://twitter.com/brian_lovin *Where to find Claire Vo:* ChatPRD: https://www.chatprd.ai/ Website: https://clairevo.com/ LinkedIn: https://www.linkedin.com/in/clairevo/ X: https://x.com/clairevo _Production and marketing by https://penname.co/._ _For inquiries about sponsoring the podcast, email jordan@penname.co._

Brian LovinguestClaire Vohost
Feb 23, 202651mWatch on YouTube ↗

CHAPTERS

  1. 0:00 – 4:42

    Why B2B SaaS design needs “reality” early: prototyping toward production

    Brian lays out his core philosophy for designing B2B SaaS: push ideas toward real usage conditions as quickly as possible. He explains why browser-based prototypes reveal critical issues (loading states, responsiveness, interaction feel) that static mocks often hide, and how AI coding tools accelerate that gradient toward production-like truth.

    • Design quality improves when concepts “encounter reality” early
    • Figma-to-browser gaps reveal interaction and state problems quickly
    • AI-assisted coding enables much faster iteration and higher-fidelity prototypes
    • Prototyping can happen in a production-like environment without full shipping
  2. 4:42 – 7:59

    Notion’s Prototype Playground: a shared Next.js repo for team prototypes

    Brian explains Prototype Playground as a simple, centralized Next.js app where each person has a namespaced directory of prototypes. The homepage surfaces recently updated prototypes, creating visibility across the team and making it easy to copy/borrow working patterns from others.

    • Prototype Playground is “just a Next.js project” in one repo
    • Each designer/PM/engineer gets a namespace; each subfolder is a prototype
    • Centralized listing boosts discoverability and cross-pollination of ideas
    • Shared repo makes it easy to reuse code patterns across prototypes
  3. 7:59 – 10:57

    Operational setup, adoption, and linking to external prototyping tools

    They cover how the playground was created and deployed (basic approvals, Vercel, collaborators), and who actually uses it. Brian notes uneven adoption—some prefer Figma or different stacks—so the system supports external prototype links while he works to reduce onboarding friction.

    • Set up by Brian with an engineer; deployed on Vercel with light process
    • Regular usage is concentrated among a small group with technical background
    • Not everyone wants Next.js/React—supporting heterogeneous workflows matters
    • External prototype links let the playground act as an index for any tool
  4. 10:57 – 13:00

    Creating a new prototype fast: UI button, file-based structure, and workflow layout

    Brian shows how a new prototype can be created from the running app (no backend—just files on disk) and pushed to GitHub. He also demonstrates his preferred “three-pane” setup: Claude Code in terminal, code review in editor, and live output in the browser.

    • “New prototype” creates folders/files locally—no database, just disk files
    • Metadata is collated to render the homepage list
    • Built-in affordances like “open in Cursor” streamline editing
    • Three-pane workflow helps catch issues early by continuously reviewing code and output
  5. 13:00 – 13:22

    Demo: podcast episode page with video + audio player (and confetti) using plan mode

    They build a contrived but realistic prototype: a podcast detail page with video, audio player, and a confetti effect on play. Brian emphasizes planning before coding and shows how voice-to-prompt (Monologue) speeds up specification input.

    • Use plan mode to get better structured implementations
    • Voice dictation (Monologue) reduces prompting friction and increases detail
    • Plan outputs can include useful wireframes and step-by-step structure
    • Resulting prototype is visually robust and interactive (including confetti)
  6. 13:22 – 18:02

    Getting better Claude Code results: plan review, tight feedback loops, and context files

    Claire and Brian discuss why reading plans and code outputs matters—especially for catching nonsense early. Brian shows how global and per-machine instructions (claude.md + claude.local.md) provide consistent context while keeping user-specific details uncommitted.

    • Better outcomes come from reviewing the plan before execution
    • A disciplined code/output review loop prevents costly debugging later
    • claude.md defines project-wide tools and conventions (Bun, Tailwind, structure)
    • claude.local.md adds personal context (username, directory rules) without committing to Git
  7. 18:02 – 20:26

    Teach the AI to do the work it asks you to do: linting and browser verification

    Brian shares a rule of thumb: whenever the AI asks you to check something, teach it to check for itself. He describes having Claude lint/validate and use tools (e.g., browser automation) to verify behavior rather than relying on manual inspection every iteration.

    • Meta-technique: turn AI questions into automation instructions
    • Have the agent run lint/TypeScript checks to catch errors proactively
    • Use MCP tooling to open the browser, click through flows, and verify UI behavior
    • Longer autonomous runs reduce interruptions and improve throughput
  8. 20:26 – 22:42

    Slash commands as onboarding accelerators: creating prototypes without clicking

    Brian introduces Claude slash commands—prompt templates that can also run scripts—to make common workflows trivial. He demos a “Create Prototype” command and explains how commands are defined with examples so the agent knows what “success” looks like.

    • Slash commands encapsulate repeatable workflows into one consistent entrypoint
    • Create Prototype automates folder/file scaffolding in the right namespace
    • Commands include examples/snippets to anchor the agent’s output format
    • Goal: keep users in terminal flow and reduce intimidating setup steps
  9. 22:42 – 26:14

    Figma → code via MCP: forced tool invocation + a verification loop to reach ~80%

    They demonstrate converting a Figma frame into an implementation using a custom /figma command. The command checks MCP setup, extracts design data, implements it, then iteratively verifies against the Figma reference in a loop until changes stabilize.

    • Custom /figma command avoids “magic keywords” and inconsistent MCP invocation
    • Preflight checks help non-experts install/run MCP servers correctly
    • Two-MCP approach (Figma + browser/devtools) supports implementation + validation
    • Verification loop improves quality and reliability versus one-shot generation
  10. 26:14 – 30:58

    MCP limitations and practical framing: context inefficiency, fragility, but best available

    Brian and Claire reflect on how quickly the tooling is evolving and why MCP feels imperfect today. Despite inefficiencies and occasional conflicts, MCP-driven iteration still delivers major time savings for scaffolding and pixel-ish translation from designs.

    • MCP can be slow, context-hungry, and sometimes fails unpredictably
    • Even imperfect automation can produce strong first passes with minimal prompting
    • Rapid scaffolding changes the economics of design-to-frontend translation
    • Expect tooling to evolve quickly; today’s workflows may look naïve soon
  11. 30:58 – 35:08

    Custom Claude Skills with scripts: solving icon-name hallucinations via “Find Icon”

    Brian explains a recurring pain: AI guesses icon names incorrectly, causing import errors and churn. He built a “Find Icon” skill backed by a TypeScript script to search thousands of icon files efficiently and resolve synonyms (e.g., “search” vs “magnifying glass”).

    • AI often hallucinates internal asset names (icons) leading to repeated fixes
    • Skills differ from commands: they should trigger automatically when relevant
    • Bundling skills with scripts enables efficient, programmatic searching at scale
    • Practical synonym search improves first-pass correctness and reduces friction
  12. 35:08 – 41:59

    Demo: a /deploy command to hide Git/GitHub complexity while teaching it implicitly

    To lower the intimidation barrier of Git, branches, and CI, Brian demos a deploy command that checks prerequisites (GitHub CLI, auth), creates a branch/commit/PR, opens the PR in a browser, and monitors CI—fixing failures and pushing updates automatically.

    • Deploy command guides users through prerequisites and correct Git hygiene
    • Automates branch creation, staging, commits, PR creation, and navigation
    • CI monitoring loop reduces “help me fix this red X” support burden
    • Design goal: make workflows approachable without dumbing them down
  13. 41:59 – 46:49

    How code-based prototyping changes design at Notion—especially for AI UX

    Brian explains he still spends most time in Figma, but AI product design demands reality-based testing. For chat and agent experiences, static golden paths break quickly; code prototypes connected to real models reveal failure modes, latency issues, and necessary error/progress states.

    • Figma remains valuable for many UI decisions; not everything needs code
    • AI interactions can’t be validated well with static conversational mockups
    • Real-model prototyping exposes errors, follow-ups, delays, and non-ideal paths
    • Designers must track shifting model capabilities to design “at the edge” of what works
  14. 46:49 – 51:45

    Tool and prompting preferences: why Claude Code + Opus, and what to do when AI isn’t listening

    Brian discusses his tool stack preferences—using Cursor for quick inline fixes but relying on Claude Code for deeper work and planning quality. For prompting failures, he emphasizes a surprisingly human factor: tired prompts create bad outputs; rest and clarity often outperform clever tricks.

    • Cursor remains useful for fast local fixes (e.g., “Fix in chat” on errors)
    • Claude Code + Opus feels better for planning/execution and communication style
    • Different models have different “mouth feel” and fit different workflows
    • When outputs degrade, the root cause is often unclear/tired prompting—sleep helps

Get more out of YouTube videos.

High quality summaries for YouTube videos. Accurate transcripts to search & find moments. Powered by ChatGPT & Claude AI.