
30 seconds of spinners is not great UX. @tanstack/ai now streams structured output straight into useChat. Pass a Zod schema, get a typed `partial` and `final` for free. Blog post link below
The Hook
“(No spoken dialogue — silent video with a subtle, pulsing background glow.)”
Problem Agitation
“(No spoken dialogue — silent video with a subtle, pulsing background glow.)”
Product Reveal
“(No spoken dialogue — silent video with a subtle, pulsing background glow.)”
Feature Teaser
“(No spoken dialogue — silent video with a subtle, pulsing background glow.)”
Call to Action
“(No spoken dialogue — silent video with a subtle, pulsing background glow.)”
Synthesizable in Remotion · key components of the realtime-data-stream-reveal template.
Form fields dynamically populate with text, character by character or word by word, simulating real-time data streaming. A status indicator changes from 'AWAITING' to 'STREAMING'.
Use `interpolate` to reveal text content based on frame number. Each character or word can be a separate `Text` component with `opacity` or `clipPath` animated. The status indicator can be a `Sequence` with `AbsoluteFill` and `Text` components, transitioning via `spring` or `linear` interpolation for color and text changes.
Lines of code appear or disappear with a smooth fade or slide animation, highlighting changes in complexity or demonstrating simplification.
Employ `Sequence` and `AbsoluteFill` for each line of code. Animate `opacity` and `transform` (e.g., `translateY`) using `spring` or `ease-in-out` curves to create a dynamic reveal/conceal effect. Use `delay` to stagger line animations.
A loading spinner animates its arc, accompanied by a subtle, rhythmic glow or pulse effect on surrounding text or elements.
Render the spinner arc using an `SVG` `path` and animate its `strokeDasharray` and `strokeDashoffset` properties with `interpolate`. Apply a `filter` with `drop-shadow` or a separate `AbsoluteFill` with `radial-gradient` and animate its `opacity` or `scale` using `loop` and `spring` for the pulsing effect.
Purpose. Establish the pain point of slow, blocking data retrieval in AI applications.
Execution. A static spinner and a timer counting up, emphasizing '30s of nothing' and empty form fields.
Purpose. Show the verbose and inefficient code required for traditional blocking calls.
Execution. A code block demonstrating `await chat()` and a form that only populates after a long delay.
Purpose. Introduce the elegant solution of streaming with `stream: true` and `useChat`.
Execution. Code block updates to include `stream: true`, and form fields progressively fill in real-time, demonstrating immediate feedback.
Purpose. Highlight the ease of integration and the end-to-end schema benefits.
Execution. Client-side code simplifies, and a final screen summarizes 'One schema. End to end.' with a clear call to action.
Objective
Launch a new real-time stock market analytics platform that streams live data.How the recipe adapts
The '30s of nothing' hook becomes '30s of stale data', showing a static stock chart. The 'old shape' demonstrates a batch processing script. The 'add stream: true' section shows a live stock ticker and dynamic chart updates, with stock prices filling in progressively. The 'useChat' equivalent would be a simplified API call for real-time data, and the final call to action would be to 'Experience Live Market Insights'.Scene durations (4 scenes, 30s)
Key Remotion components

Anthropic Labs launches Claude Design, which turns conversation into prototypes, slides and one-pagers, powered by Claude Opus 4.7.

A vibe design partner with an AI-native canvas for turning ideas into UI.

Your work tools in Claude are now available on mobile. Explore Figma designs, create Canva slides, check Amplitude dashboards, all from your phone. Give it a try: