Back to Blog
January 8, 20269 min readCreate a Blazor

Create a Blazor WebAssembly UI from a Video Walkthrough

R
Replay Team
Developer Advocates

TL;DR: Replay allows you to generate a fully functional Blazor WebAssembly UI directly from a video recording of a user interacting with an existing application or a design mockup.

The dream of automatically generating UI code from design concepts has long been pursued. While screenshot-to-code tools offer a partial solution, they lack the crucial element of behavioral understanding. They can render static visuals, but they can't capture the intent behind user interactions. This is where Replay steps in, leveraging video analysis and Gemini's powerful AI to reconstruct not just the appearance, but the functionality of a UI. We're talking about Behavior-Driven Reconstruction.

Understanding the Challenge: Beyond Pixels#

Traditional methods struggle because they treat UI generation as a purely visual problem. A screenshot only provides a snapshot in time. It doesn't reveal the sequence of actions, the conditional logic, or the underlying data flow. Replay addresses this limitation by analyzing video recordings. By watching a user interact with an interface – even a prototype – Replay can infer the intended behavior and generate code that replicates that behavior.

Replay: Video-to-Blazor Code Generation#

Replay introduces a paradigm shift: video as the source of truth. Instead of relying on static images or incomplete design specifications, Replay analyzes user behavior within a video recording to generate a working Blazor WebAssembly UI. This approach offers several key advantages:

  • Multi-page generation: Replay can stitch together multiple screens and transitions based on the video evidence.
  • Supabase integration: Seamlessly connect your generated UI to a Supabase backend for data persistence and real-time functionality.
  • Style injection: Replay can infer and apply styles based on the visual appearance in the video, creating a polished and consistent look.
  • Product Flow maps: Understand the user journey within your application, visualized directly from the video walkthrough.

Let's dive into a practical example. Imagine you have a video of a user navigating a simple to-do list application. The video shows them:

  1. Adding a new task.
  2. Marking a task as complete.
  3. Deleting a task.

Replay can analyze this video and generate the corresponding Blazor components, event handlers, and data binding logic to recreate this exact functionality.

Setting Up Your Blazor Project#

Before we dive into the Replay process, ensure you have a Blazor WebAssembly project set up. If not, you can create one using the .NET CLI:

bash
dotnet new blazorwasm -o ReplayBlazorApp cd ReplayBlazorApp

This command creates a new Blazor WebAssembly project named "ReplayBlazorApp" and navigates into the project directory.

Generating Blazor Code with Replay#

While the actual code generation happens within the Replay platform (which takes video as input), let's illustrate how the generated Blazor code might look, focusing on the key components and functionalities extracted from the hypothetical to-do list video.

Step 1: Recording the Video#

The first step is to record a clear and concise video of the user interacting with the desired UI. Ensure the video captures all relevant actions and transitions. The clearer the video, the more accurate the Replay analysis.

💡 Pro Tip: Speak clearly during the recording, describing the actions you are performing. This can aid Replay in understanding the context and intent.

Step 2: Uploading to Replay and Code Generation#

Upload the video to the Replay platform. Replay will process the video, analyze the user behavior, and generate the corresponding Blazor code. This process typically takes a few minutes, depending on the length and complexity of the video.

Step 3: Examining the Generated Code#

Once the code generation is complete, you'll receive a set of Blazor components, services, and stylesheets. Let's examine a few key snippets.

TodoItem.razor (Generated Component)

razor
@* TodoItem.razor *@ <div class="todo-item"> <input type="checkbox" @bind="IsCompleted" /> <span>@Title</span> <button @onclick="OnDelete">Delete</button> </div> @code { [Parameter] public string Title { get; set; } [Parameter] public bool IsCompleted { get; set; } [Parameter] public EventCallback OnDelete { get; set; } }

This code represents a single to-do item. It includes a checkbox for marking the item as complete, a span for displaying the task title, and a button for deleting the item. The

text
@code
block defines the component's parameters and event handlers.

Index.razor (Main Page)

razor
@page "/" <h1>To-Do List</h1> <input type="text" @bind="NewTaskTitle" placeholder="Add a new task" /> <button @onclick="AddTask">Add</button> <ul> @foreach (var task in Tasks) { <TodoItem Title="@task.Title" IsCompleted="@task.IsCompleted" OnDelete="() => DeleteTask(task)" /> } </ul> @code { private List<TodoTask> Tasks = new List<TodoTask>(); private string NewTaskTitle; private void AddTask() { if (!string.IsNullOrEmpty(NewTaskTitle)) { Tasks.Add(new TodoTask { Title = NewTaskTitle, IsCompleted = false }); NewTaskTitle = string.Empty; } } private void DeleteTask(TodoTask task) { Tasks.Remove(task); } public class TodoTask { public string Title { get; set; } public bool IsCompleted { get; set; } } }

This code represents the main page of the to-do list application. It includes an input field for adding new tasks, a button for submitting the task, and a list for displaying the existing tasks. The

text
@code
block defines the data and logic for managing the to-do list.

📝 Note: This is a simplified example. Replay can generate more complex components and logic based on the video analysis.

Step 4: Integrating with Supabase (Optional)#

Replay can also generate code that integrates with Supabase for data persistence. This allows you to store and retrieve to-do list items from a Supabase database. The generated code would include the necessary Supabase client initialization and data access logic.

csharp
// Example of Supabase integration (Conceptual) using Supabase; public class TodoService { private readonly SupabaseClient _supabaseClient; public TodoService() { var url = "YOUR_SUPABASE_URL"; var key = "YOUR_SUPABASE_KEY"; _supabaseClient = new SupabaseClient(url, key); } public async Task<List<TodoTask>> GetTasks() { var response = await _supabaseClient .From<TodoTask>() .Get(); return response.Models; } // ... other methods for adding, updating, and deleting tasks }

⚠️ Warning: Remember to replace

text
"YOUR_SUPABASE_URL"
and
text
"YOUR_SUPABASE_KEY"
with your actual Supabase credentials.

Comparison with Existing Tools#

Let's compare Replay with other UI generation tools:

FeatureScreenshot-to-CodeLow-Code PlatformsReplay
Input TypeScreenshotsVisual DesignerVideo
Behavior AnalysisPartial
Code QualityVariesOften LimitedHigh
Learning CurveLowMediumLow
Blazor SupportLimitedLimited
Supabase IntegrationRequires Manual SetupRequires Manual SetupBuilt-in
Multi-Page SupportLimitedYes

As you can see, Replay stands out with its unique video input, behavior analysis capabilities, and seamless Supabase integration.

Benefits of Using Replay for Blazor Development#

  • Rapid Prototyping: Quickly generate a working UI from a video of a design mockup, accelerating the prototyping process.
  • Improved Communication: Use video walkthroughs to communicate design ideas and generate code that accurately reflects the intended behavior.
  • Reduced Development Time: Automate the creation of UI components and logic, freeing up developers to focus on more complex tasks.
  • Enhanced Collaboration: Bridge the gap between designers and developers by using video as a common language.
  • Accessibility Focused: By observing user interactions, Replay can potentially infer and implement accessibility best practices.
  • Maintainability: Replay-generated code is clean and well-structured, making it easier to maintain and extend.

Code Customization and Refinement#

While Replay generates a functional UI, you'll likely need to customize and refine the code to meet your specific requirements. The generated code serves as a solid foundation, allowing you to focus on adding custom features and optimizations.

Here's an example of customizing the

text
TodoItem.razor
component to add a CSS class based on the task's completion status:

razor
@* TodoItem.razor *@ <div class="todo-item @(IsCompleted ? "completed" : "")"> <input type="checkbox" @bind="IsCompleted" /> <span>@Title</span> <button @onclick="OnDelete">Delete</button> </div> @code { [Parameter] public string Title { get; set; } [Parameter] public bool IsCompleted { get; set; } [Parameter] public EventCallback OnDelete { get; set; } }

In this example, we added a conditional CSS class

text
completed
to the
text
div
element based on the
text
IsCompleted
property. You can define the styling for the
text
completed
class in your CSS file.

css
/* Example CSS */ .todo-item { display: flex; align-items: center; padding: 5px; border-bottom: 1px solid #ccc; } .todo-item.completed { text-decoration: line-through; color: #888; }

This is just one example of how you can customize the generated code to enhance the functionality and appearance of your Blazor UI.

Frequently Asked Questions#

Is Replay free to use?#

Replay offers a free tier with limited usage. Paid plans are available for increased usage and advanced features. Check the Replay website for current pricing details.

How is Replay different from v0.dev?#

While both aim to generate code from descriptions, Replay uniquely uses video input to understand user behavior. V0.dev relies on text prompts, which can be ambiguous. Replay analyzes actual interactions for a more accurate and behavior-driven reconstruction.

Can Replay handle complex UI interactions?#

Replay is designed to handle a wide range of UI interactions, including complex workflows and conditional logic. However, the accuracy of the generated code depends on the clarity and completeness of the video recording.

What if the generated code isn't perfect?#

The generated code is intended to be a starting point. You can always customize and refine the code to meet your specific requirements. Replay provides a solid foundation, saving you significant development time.

Does Replay support other frameworks besides Blazor?#

Currently, Replay focuses on generating Blazor code. Support for other frameworks is planned for future releases.


Ready to try behavior-driven code generation? Get started with Replay - transform any video into working code in seconds.

Ready to try Replay?

Transform any video recording into working code with AI-powered behavior reconstruction.

Launch Replay Free