Matt Pocock (AI hero) – Build Deep Search in TypeScript

Categories: AI and ChatGPT
Wishlist Share
Share Course
Page Link
Share On Social Media

About Course

This is a cohort-based course and the lessons will start unlocking on July 14th, 2025.

Building AI applications that are genuinely useful involves more than just hitting an LLM API and getting back stock chat responses.

The difference between a proof-of-concept and a production application lies in the details.

Generic chat responses might work for demos, but professional applications need appropriate outputs that align with specific requirements.

In a professional environment code is (ideally) tested, metrics are collected, analytics are displayed somewhere.

AI development can follow these established patterns.

You will hit roadblocks when trying to:

  • Implement essential backend infrastructure (databases, caching, auth) specifically for AI-driven applications.
  • Debug and understand the “black box” of AI agent decisions, especially when multiple tools are involved.
  • Ensure chat persistence, reliable routing, and real-time UI updates for a seamless user experience.
  • Objectively measure AI performance moving beyond subjective “vibe checks” for improvements.
  • Manage complex agent logic without creating brittle, monolithic prompts that are hard to maintain and optimize.

In this course you will build out a “DeepSearch” AI application from the ground up to help you understand and implement these patterns and ensure a production-ready product.

What Will I Learn?

  • Understand the key differences between proof-of-concept AI apps and production-ready AI applications.

  • Implement backend infrastructure tailored for AI-driven apps, including databases, caching, and authentication.

  • Debug and interpret AI agent decision-making, even when using multiple tools.

  • Build reliable chat persistence, routing, and real-time UI updates for a smooth user experience.

  • Measure AI performance with objective metrics instead of relying on subjective impressions.

  • Manage complex AI agent logic without creating brittle, hard-to-maintain prompts.

  • Develop a fully functional “DeepSearch” AI application from scratch, following professional development patterns.


Target Audience

  • Developers who want to move from AI prototypes to scalable, production-ready applications.

  • Engineers and tech leads looking to integrate AI into real-world products with reliability and performance tracking.

  • Backend and frontend developers who want to understand AI-specific infrastructure needs.

  • Product managers or technical founders aiming to create polished AI tools beyond generic chatbots.


Requirements / Instructions

  • Basic programming skills (JavaScript, Python, or similar).

  • Understanding of web application development fundamentals.

  • Willingness to work with both frontend and backend technologies.

  • Interest in debugging and improving AI systems beyond surface-level outputs.

  • Commitment to follow the course schedule as lessons unlock starting July 14th, 2025.

Show More

What Will You Learn?

  • Understand the key differences between proof-of-concept AI apps and production-ready AI applications.
  • Implement backend infrastructure tailored for AI-driven apps, including databases, caching, and authentication.
  • Debug and interpret AI agent decision-making, even when using multiple tools.
  • Build reliable chat persistence, routing, and real-time UI updates for a smooth user experience.
  • Measure AI performance with objective metrics instead of relying on subjective impressions.
  • Manage complex AI agent logic without creating brittle, hard-to-maintain prompts.
  • Develop a fully functional “DeepSearch” AI application from scratch, following professional development patterns.

Course Content

Topic 1: Matt Pocock AIhero – Build DeepSearch in TypeScript
Module containing 113 video lessons

  • Lesson 1: What Are We Building
    02:10
  • Lesson 2: Installation Instructions Dont Skip This
    03:19
  • Lesson 3: Cursor Tips
    00:23
  • Lesson 4: Explore The Repo Problem
    02:00
  • Lesson 5: Explore The Repo Solution
    02:59
  • Lesson 6: Setting Up Postgres
    02:01
  • Lesson 7: Using Drizzle And Drizzle Studio
    02:00
  • Lesson 8: Setting Up Redis
    02:00
  • Lesson 9: Faqs
    02:00
  • Lesson 10: Introduction
    02:00
  • Lesson 11: Choose An Llm Problem
    02:00
  • Lesson 12: Choose An Llm Solution
    02:00
  • Lesson 13: Our First Model Call Problem
    02:00
  • Lesson 14: Our First Model Call Solution
    02:00
  • Lesson 15: Set Up Discord Authentication Problem
    02:00
  • Lesson 16: Set Up Discord Authentication Solution
    02:00
  • Lesson 17: Create A Naive Agent With Serper Problem
    02:12
  • Lesson 18: Create A Naive Agent With Serper Solution
    02:00
  • Lesson 19: Showing Tool Calls In The Frontend Problem
    02:29
  • Lesson 20: Showing Tool Calls In The Frontend Solution
    02:00
  • Lesson 21: Search Grounding Optional Problem
    02:00
  • Lesson 22: Search Grounding Optional Solution
    02:01
  • Lesson 23: Rate Limiting Optional Problem
    02:00
  • Lesson 24: Rate Limiting Optional Solution
    02:00
  • Lesson 25: Connecting Our App To Mcp Servers Optional
    02:00
  • Lesson 26: Create Database Resources For Persisting Messages Problem
    02:03
  • Lesson 27: Create Database Resources For Persisting Messages Solution
    02:00
  • Lesson 28: Persist Chats To The Database Problem
    02:20
  • Lesson 29: Persist Chats To The Database Solution
    02:00
  • Lesson 30: Creating New Chats In The Frontend Problem
    02:00
  • Lesson 31: Creating New Chats In The Frontend Solution
    02:00
  • Lesson 32: Showing The Saved Chats In The Frontend Problem
    02:00
  • Lesson 33: Showing The Saved Chats In The Frontend Solution
    02:00
  • Lesson 34: Fixing The New Chat Button Optional Problem
    02:00
  • Lesson 35: Fixing The New Chat Button Optional Solution
    02:00
  • Lesson 36: Adding Use Scroll To Bottom Optional Problem
    02:00
  • Lesson 37: Adding Use Scroll To Bottom Optional Solution
    02:00
  • Lesson 38: Choosing An Observability Platform
    02:26
  • Lesson 39: Integrating Langfuse Problem
    02:00
  • Lesson 40: Integrating Langfuse Solution
    02:00
  • Lesson 41: Passing Extra Metadata To Langfuse Problem
    02:00
  • Lesson 42: Passing Extra Metadata To Langfuse Solution
    02:00
  • Lesson 43: Adding A Scraper Problem
    02:23
  • Lesson 44: Adding A Scraper Solution
    02:06
  • Lesson 45: Making The Llm Date Aware Optional Problem
    02:00
  • Lesson 46: Making The Llm Date Aware Optional Solution
    02:00
  • Lesson 47: Improving Our Crawler Optional
    02:44
  • Lesson 48: Reporting Db Calls To Langfuse Optional Problem
    02:00
  • Lesson 49: Reporting Db Calls To Langfuse Optional Solution
    02:00
  • Lesson 50: Initializing Evalite Problem
    02:04
  • Lesson 51: Initializing Evalite Solution
    02:00
  • Lesson 52: Choosing Our Success Criteria
    04:09
  • Lesson 53: Making Our System Testable Problem
    02:00
  • Lesson 54: Making Our System Testable Solution
    02:00
  • Lesson 55: Our First Deterministic Eval Problem
    02:00
  • Lesson 56: Our First Deterministic Eval Solution
    02:00
  • Lesson 57: Adding A Global Rate Limiter Optional Problem
    02:00
  • Lesson 58: Adding A Global Rate Limiter Optional Solution
    02:09
  • Lesson 59: The Data Flywheel
    02:42
  • Lesson 60: Our First Llm As A Judge Eval Problem
    02:59
  • Lesson 61: Our First Llm As A Judge Eval Solution
    02:00
  • Lesson 62: Create A Simple Dataset Problem
    03:20
  • Lesson 63: Create A Simple Dataset Solution
    04:08
  • Lesson 64: Organizing Our Dataset Into Dev Ci And Regression Optional Problem
    02:00
  • Lesson 65: Organizing Our Dataset Into Dev Ci And Regression Optional Solution
    02:00
  • Lesson 66: Assessing Answer Relevancy Optional Problem
    02:00
  • Lesson 67: Assessing Answer Relevancy Optional Solution
    02:00
  • Lesson 68: Extracting The Parameters Of Our System Optional Problem
    02:00
  • Lesson 69: Extracting The Parameters Of Our System Optional Solution
    02:00
  • Lesson 70: What S Wrong With Our Current Approach
    02:00
  • Lesson 71: Designing Our New System Prompt Problem
    02:00
  • Lesson 72: 1 Designing Our New System Prompt Problem
    02:00
  • Lesson 73: Designing Our New System Prompt Solution
    02:00
  • Lesson 74: Creating A Next Action Picker Problem
    02:00
  • Lesson 75: Creating A Next Action Picker Solution
    02:00
  • Lesson 76: Implementing The Loop Solution
    02:00
  • Lesson 77: Connecting Our Loop To The Frontend Problem
    02:00
  • Lesson 78: Connecting Our Loop To The Frontend Solution
    02:00
  • Lesson 79: Smoothing Our Streaming Optional Problem
    02:00
  • Lesson 80: Smoothing Our Streaming Optional Solution
    02:00
  • Lesson 81: Showing The Steps Taken In The Frontend Problem
    02:30
  • Lesson 82: Showing The Steps Taken In The Frontend Solution
    02:00
  • Lesson 83: Fixing Telemetry Problem
    02:00
  • Lesson 84: Fixing Telemetry Solution
    02:00
  • Lesson 85: Passing The Message History Problem
    02:00
  • Lesson 86: Passing The Message History Solution
    02:00
  • Lesson 87: Persisting Our New Setup To The Backend Problem
    02:00
  • Lesson 88: Persisting Our New Setup To The Backend Solution
    02:38
  • Lesson 89: Generating Chat Titles Optional Problem
    02:00
  • Lesson 90: Generating Chat Titles Optional Solution
    02:00
  • Lesson 91: Adding Geolocation Info To The System Prompt Optional Problem
    02:00
  • Lesson 92: Adding Geolocation Info To The System Prompt Optional Solution
    02:00
  • Lesson 93: Agents Vs Workflows
    02:38
  • Lesson 94: Collapse Search And Crawl Into One Tool Problem
    02:00
  • Lesson 95: Collapse Search And Crawl Into One Tool Solution
    02:00
  • Lesson 96: Search Scrape Summarize Problem
    02:00
  • Lesson 97: Search Scrape Summarize Solution
    03:19
  • Lesson 98: Making A Query Rewriter Problem
    03:10
  • Lesson 99: Making A Query Rewriter Solution
    02:38
  • Lesson 100: Use A Combined Search Scrape Api Instead Optional Problem
    02:00
  • Lesson 101: Use A Combined Search Scrape Api Instead Optional Solution
    02:00
  • Lesson 102: Resumable Streams Optional
    03:59
  • Lesson 103: Building An Evaluator Problem
    02:15
  • Lesson 104: Building An Evaluator Solution
    02:05
  • Lesson 105: Showing Sources In The Frontend Problem
    02:00
  • Lesson 106: Showing Sources In The Frontend Solution
    02:00
  • Lesson 107: Implementing Guardrails Optional Problem
    02:14
  • Lesson 108: Implementing Guardrails Optional Solution
    02:00
  • Lesson 109: Implement An Ask Clarifying Questions Step Optional Problem
    02:00
  • Lesson 110: Implement An Ask Clarifying Questions Step Optional Solution
    02:00
  • Lesson 111: Showing Usage In The Frontend Optional Problem
    02:00
  • Lesson 112: Showing Usage In The Frontend Optional Solution
    02:00
  • Lesson 113: Migrating To Ai Sdk V 5 Optional
    07:40

Download Full Course Resources

Student Ratings & Reviews

No Review Yet
No Review Yet