How To: Flutter Web

Why We Built Our App in Flutter

This is as cliché as it gets, but a few people told us we were crazy when we decided to build a B2B SaaS platform 100% in Flutter.


When we started Videotape — an AI-powered research platform that runs end-to-end video surveys — we didn’t pick React.

We didn't deploy to Vercel.

We didn't rely on Firebase or Supabase.

We picked Flutter + the good old-fashioned VPS. Because granular control and consistency across every platform mattered to us, especially when working with enterprise clients and adhering to strict, battle-tested practices.


Not familiar with Flutter? It’s Google’s open-source UI framework that lets you build for iOS, Android, web, and desktop from a single codebase — think of it as design and engineering finally speaking the same language. The important thing to know is that Flutter started as a cross-platform mobile platform in 2017.

It's first stable web release was just in 2021.


When we first started playing around with the concept of Videotape in 2023 and showed our earliest web experience to friends, all the engineers of the group gave us looks.


A few laughed and said we should've just used React (true story lol).


But we didn't.


Because for what we needed — one codebase, seamless performance across mobile, web, and desktop, and pixel-perfect control over UI — Flutter wasn’t a gamble. It was the only thing that made sense.

For reference, our platform is 100% currently Web. A native mobile app for survey respondents is on the product roadmap (and a big reason why we chose Flutter long-term), but because we rely on several custom platform views and low-level integrations, maintaining parallel iOS, Android, or desktop deploys isn't feasible at our current pace – we maintain 4 separate applications already in our monorepo.


The Problem We Were Actually Solving


We didn't set out to build a to-do list app.


We launched Videotape with one premise: to build an AI-first research experience — one with engaging surveys, custom animated charts, and a cinematic (yes, Videotape) report experience that makes understanding effortless.


It had to run beautifully on:

  1. A respondent’s phone browser — with live video capture, dynamic form inputs, and zero install friction.

  2. A client’s desktop or tablet — with interactive reports, motion graphics, and custom data visualizations.


In short: the same cinematic, frictionless experience, everywhere.


That’s what made Flutter so appealing. We didn’t want three codebases pretending to stay in sync — we wanted one design system that was the product.

Flutter let us build exactly that. It was our way of keeping the experience honest.


Authentic Design


We have never hired a design agency.


The brand, the product, the motion, the typography. It’s all 100% authentic to us.
Every part of the experience today has been crafted personally by our founding team, not passed down a handoff chain.


That’s part of why Flutter made sense.


It gives us full creative control without needing separate teams to interpret what we mean.


Our design process isn’t about perfection. It’s about personality.
Videotape looks and feels the way it does because it’s built by the same people who use it every day.


Cinematic Reports


We didn’t want dashboards.
We wanted stories.


Our reports are built to feel cinematic. They rely smooth transitions, custom motion, and charts that animate with intent. Every element should guide understanding, not just display numbers.


With a report that dynamic, there’s a lot happening under the hood. Each component has a scope, each component group has a scope, each section has a scope — and within those groups, dozens of states constantly react to user input, data changes, and animations.


We needed a platform that could run fast and handle complex, reactive, interdependent state management without breaking flow. That’s why we love Riverpod. It gives us predictable, granular control over every moving piece, without sacrificing performance or readability. Worth noting: we don't use any code generation in our project. No build_runner no freezed, or @riverpod). Every line of code used in our deploy (besides core Flutter libs) is written by us (accelerated with help from Copilot). We find it keeps our architecture more transparent, debuggable, and has helped build our Flutter knowledge. This may change in the future, but as of now this is our internal approach.


Embedded below is an example of one of our bar charts, powered by a heavily customized version of fl_chart – a Flutter library we’ve extended to support dynamic theming, custom overlays, animated transitions, and interactive filtering. We find fl_chart to be an excellent lightweight charting library, that with some optimization and custom extensibility, is extremely powerful.

What started as a simple visualization package has become a core part of our storytelling engine. Every chart in Videotape is reactive, responsive, and meant to feel alive.

Good data visualization isn’t static, it’s expressive.

Loading chart...



That’s why we built our report CMS and visualizations directly in Flutter. We get pretty much full control over every frame, from how bars enter a chart to how one insight flows into the next.


And when your promise as a company is to make the research process effortless, it needs to look effortless also.


An example of one of our custom treemap visualizations.

Loading chart...



That’s the whole point of building in Flutter. It lets us design research that feels effortless because every detail, every transition, and every interaction is intentional.

When the medium disappears, the message shines through.


And for us, that message is simple: great research shouldn’t feel like work. It should feel like watching a highlight reel of insights.


That’s why we love Flutter, and why we’ll keep investing in it. With the evolution of WebAssembly and the continued growth of the Flutter ecosystem, we’re genuinely excited about what’s next for the platform, and for Videotape.


Most teams default to React.

It’s safe, familiar, and there’s nothing wrong with that until it quietly starts shaping how you think.


We didn’t want to inherit the conventions of every SaaS / research dashboard before us.

We wanted to design from first principles. To control not just how our product looks, but how it feels.


Flutter gave us that. It let us build something expressive, fast, and entirely ours. It's not for everyone, but it's definitely for us.

And maybe that’s the real takeaway: sometimes the craziest choice is the one that keeps your vision intact.

Check out a sample report: https://vhs.report/landing-page-demo-september-2025

Related Articles