I've been building a fitness app called DAUNTRA.
One problem I kept running into before launch was simple:
People could see screenshots of the app, but they couldn't actually use it.
I didn't want to wait until the App Store release to find out whether people understood the product, so I built a separate interactive Flutter Web demo.
What is DAUNTRA?
DAUNTRA combines:
- workout tracking
- nutrition tracking
- progress analytics
- Lab Insights, which tries to help users understand patterns in their training and nutrition data
The goal isn't just to collect more fitness data.
It's to help make that data easier to understand.
The demo
The web demo uses fictional athlete data, so you can explore the app without creating an account or entering personal information.
You can actually navigate through:
- Workouts
- Nutrition
- Progress
- Lab Insights
- Profile
The demo is built separately from the production app and doesn't connect to real user data.
Tech
The main product is built with Flutter.
For the demo I used:
- Flutter Web
- CanvasKit
- a dedicated
main_demo.dart - fake/precomputed demo data
- Cloudflare Pages
- PostHog for anonymous product analytics
One of the more interesting problems was making something originally designed as a mobile app still feel natural when shown inside a desktop browser.
Try it
Interactive demo:
Main site:
I'm still pre-launch, so criticism is much more useful to me than compliments.
I'd especially like feedback on:
- Is the product understandable without me explaining it?
- Does Lab Insights seem useful or unnecessary?
- Is the web demo comfortable to use?
- What would you change before releasing the actual app?
Feel free to be critical — that's exactly what I'm looking for.
Top comments (1)
On question 3, from the loading side: a first visit to demo.dauntra.com downloads about 3–4 MB before anything paints (
canvaskit.wasmis 2.1 MB in Chrome and 2.8 MB elsewhere,main.dart.js1.1 MB, all brotli), and the<body>holds nothing but scripts. On a slow connection that's a blank white page for several seconds, and a lot of people leave a blank page. A plain HTML loading screen in<body>, removed on theflutter-first-frameevent, costs almost nothing and makes the wait look like loading.Two smaller things. There are no
og:tags in the head, so the demo link shows no preview card when it's pasted into X, Slack or WhatsApp, and sharing is most of what a demo is for. And good call self-hosting the fallback fonts withfontFallbackBaseUrl: most CanvasKit apps quietly pull Noto from gstatic the first time they hit a glyph they don't bundle.