Stop guessing what to build. User feedback SDK for @FlutterDev 🩡

Joined June 2024
30 Photos and videos
Pinned Tweet
29 Oct 2024
πŸ’™ Launched UserOrient for Flutter! After 3 months of internal use in real apps, UserOrient is ready for the #Flutter Community! Built with Flutter web, it’s here to help product owners and indie app developers collect feature requests from users within their apps and decide what to build next based on user votes. Key features include: - Prioritize Features – let users vote on features matters them the most. - Collect Ideas – collect feature requests and feedbacks from user. - 2-Minute Setup – integrate with our SDK on pub.dev within minutes. πŸŽ‰ Launch Special: Enjoy a free month of our Growth plan with no credit card required for all new sign-ups. Visit userorient.com to get started! Visit on pub.dev: pub.dev/packages/userorient_…
3
34
5,785
UserOrient retweeted
Just noticed that @eseidel mentioned @userorient in the list of a companies ~"in the mission of filling in missing pieces in Flutter" 🫠
1
1
18
890
UserOrient retweeted
I have been following this Orient UI @FlutterDev development. It is a fantastic UI set and idea, plus very well made. Awesome work, thanks for making and sharing it ❀️ Story journey and used approach rationale was also a great read! Loved it πŸš€ πŸ’―% #MaterialMike approved! πŸ˜…πŸ’™
Story: I made a set of Flutter widgets that aren't Material or Cupertino. I use Flutter for web and desktop a lot. And if you do too, you probably know the pain: Material works fine for mobile, but on web and desktop it screams Google. Cupertino doesn't even make sense on larger screens. So, if you want your app to look like your own brand, you're building everything from scratch. I've done that for 2 years at @UserOrient: it has a web dashboard built entirely with Flutter. Our designer made a clean, neutral design for it, I implemented it, and people kept saying it looks good. At some point I looked at all these widgets I built and thought: "I keep reusing these across projects anyway, why not let others use them too?" But I didn't want to make a package. See, these are widgets, pixels, and if you import a package, you can't change how a button works inside without forking the whole thing. Then remembered, a friend told me once about shadcn in the web world and how it just gives you the component as a file. That felt right. Decided to start with CLI: activate it, run a command, and it drops a plain Dart file into your lib folder. That file is yours. Edit it, move it, rename it, whatever. That's Orient UI. It gives you two things: 1. style.dart: colors, typography, radii, durations, breakpoints. One file. Works with or without Material. 2. Widgets: buttons, toggles, navbars, toasts, popups, search fields, tabs, more. 25 of them. All tested. All responsive. One thing I didn't expect: style.dart became useful way beyond Orient UI's widgets. In my apps, I started putting all custom colors and typography there. It's now basically my whole app's design tokens in one place, and it doesn't fight Material's ThemeData at all. Here's how it works: > dart pub global activate orient_ui > orient_ui init // creates lib/style.dart > orient_ui add button // creates lib/button.dart You don't replace MaterialApp either. Keep your Scaffold, your Navigator, everything. Orient UI sits next to it. Use its button but Material's TextField. Mix however you want. Here's some questions I got and decisions I made along the way: - Is this a design system? Not really. It's foundational building blocks. You can use Orient UI's button next to Material's TextField and they won't fight each other. Use what you need, ignore the rest. - Why plain files, not a package? If it's a package, you can't change a button's internal logic without forking the whole thing. With plain files, you open button.dart and change whatever you want. - Will there be Orient UI v2, v3, breaking changes? No. There won't be. These are neutral, foundational widgets. A button is a button. A toggle is a toggle. You get the file, it's yours forever. - Why not OrientButton, OrientApp? I almost did. Then I realized that's annoying. Nobody wants to type a prefix on every widget. So the button is just Button. The theme is just Style. Simple names, no conflicts with Material's ThemeData. - How do widgets know light/dark mode? I could do Theme.of(context).brightness but that ties you to Material. What if someone uses CupertinoApp or just a plain WidgetsApp? So I made Style an InheritedWidget. You wrap your app with Style(), pass brightness, done. And if you don't wrap, it defaults to light. So wrapping is optional too. - How does the CLI work? It fetches templates from GitHub. No code generation, no build runner. You run a command, you get a file. That file imports style.dart for colors and typography. You point that import to wherever you put style.dart and you're set. Also, Flutter team recently separated Material and Cupertino into their own packages. Maybe there's room for a third option. Maybe this is it. Links in the first comment πŸ‘‡πŸ»
3
6
67
7,095
UserOrient retweeted
Story: I made a set of Flutter widgets that aren't Material or Cupertino. I use Flutter for web and desktop a lot. And if you do too, you probably know the pain: Material works fine for mobile, but on web and desktop it screams Google. Cupertino doesn't even make sense on larger screens. So, if you want your app to look like your own brand, you're building everything from scratch. I've done that for 2 years at @UserOrient: it has a web dashboard built entirely with Flutter. Our designer made a clean, neutral design for it, I implemented it, and people kept saying it looks good. At some point I looked at all these widgets I built and thought: "I keep reusing these across projects anyway, why not let others use them too?" But I didn't want to make a package. See, these are widgets, pixels, and if you import a package, you can't change how a button works inside without forking the whole thing. Then remembered, a friend told me once about shadcn in the web world and how it just gives you the component as a file. That felt right. Decided to start with CLI: activate it, run a command, and it drops a plain Dart file into your lib folder. That file is yours. Edit it, move it, rename it, whatever. That's Orient UI. It gives you two things: 1. style.dart: colors, typography, radii, durations, breakpoints. One file. Works with or without Material. 2. Widgets: buttons, toggles, navbars, toasts, popups, search fields, tabs, more. 25 of them. All tested. All responsive. One thing I didn't expect: style.dart became useful way beyond Orient UI's widgets. In my apps, I started putting all custom colors and typography there. It's now basically my whole app's design tokens in one place, and it doesn't fight Material's ThemeData at all. Here's how it works: > dart pub global activate orient_ui > orient_ui init // creates lib/style.dart > orient_ui add button // creates lib/button.dart You don't replace MaterialApp either. Keep your Scaffold, your Navigator, everything. Orient UI sits next to it. Use its button but Material's TextField. Mix however you want. Here's some questions I got and decisions I made along the way: - Is this a design system? Not really. It's foundational building blocks. You can use Orient UI's button next to Material's TextField and they won't fight each other. Use what you need, ignore the rest. - Why plain files, not a package? If it's a package, you can't change a button's internal logic without forking the whole thing. With plain files, you open button.dart and change whatever you want. - Will there be Orient UI v2, v3, breaking changes? No. There won't be. These are neutral, foundational widgets. A button is a button. A toggle is a toggle. You get the file, it's yours forever. - Why not OrientButton, OrientApp? I almost did. Then I realized that's annoying. Nobody wants to type a prefix on every widget. So the button is just Button. The theme is just Style. Simple names, no conflicts with Material's ThemeData. - How do widgets know light/dark mode? I could do Theme.of(context).brightness but that ties you to Material. What if someone uses CupertinoApp or just a plain WidgetsApp? So I made Style an InheritedWidget. You wrap your app with Style(), pass brightness, done. And if you don't wrap, it defaults to light. So wrapping is optional too. - How does the CLI work? It fetches templates from GitHub. No code generation, no build runner. You run a command, you get a file. That file imports style.dart for colors and typography. You point that import to wherever you put style.dart and you're set. Also, Flutter team recently separated Material and Cupertino into their own packages. Maybe there's room for a third option. Maybe this is it. Links in the first comment πŸ‘‡πŸ»
9
11
123
12,272
UserOrient retweeted
Orient UI is now AI-native! πŸŽ‰ One command sets up theming for your Flutter app AI rules for Claude Code, Antigravity, Windsurf and Codex. After that, your AI coding agent uses Orient UI's theming and widgets instead of hardcoding values or defaulting to Material or Cupertino.
1
2
14
1,433
UserOrient retweeted
This new widget, I call: SegmentBar. It's similar to Material's TabBar, but it wraps to more than one lines if you wish (also has horizontal-scroll version). Plus it's more neutral and cleaner. I used it for Orient UI's widgets catalog as a switcher between widgets. Now each widget have its own previews and a VS Code-style code block πŸ”₯ Though, I assume normally you'd use it for 5-8 items max, which will look cleaner. With this, Orient UI now catalogs 23 widgets! All clean. All neutral. All fully customisable.
2
1
15
2,104
UserOrient retweeted
I hope Flutter can get more love for desktop & web, but building blocks aren't there yet. I struggled with this a lot building @UserOrient's web dashboard. My dream is "Orient UI" can become a toolkit to make building desktop & web apps with Flutter much easier.
2
4
37
1,401
UserOrient retweeted
Replying to @userorient
@UserOrient v2.1.0 is live: Now you can see user's device and app details alongside with their feature request.
1
1
2
376
UserOrient retweeted
UserOrient Flutter SDK v2.0.0 is here! πŸŽ‰ Biggest update yet: - SDK now collects optional email from users - More breathing UI, more features visible at a glance - More neutral design, more like part of your app. With every update, @UserOrient is trying to close gap between your Flutter app and its users 🩡
4
46
2,240
UserOrient retweeted
I questioned @UserOrient's comments view a lot... And made lots of changes to the SDK: πŸ†• Related feature pinned at top πŸ₯· Subtle shadow on the bottom text field πŸ’¬ Text hierarchy: comment first, name secondary πŸ“… Date moved to right My brain loves doing this.
1
3
21
1,358
UserOrient retweeted
Went one step further and removed borders around the features. That removed unnecessary padding and freed a lot more space. But main gain is that the design now looks more neutral.
Adding floating pill button and limiting feature description to 2 lines freed-up a lot of space πŸ€
1
2
12
1,056
UserOrient retweeted
Adding floating pill button and limiting feature description to 2 lines freed-up a lot of space πŸ€
3
6
74
5,674
UserOrient retweeted
Unexpected: Orient UI reached 1,000 downloads! πŸŽ‰ It already has 15 Flutter widgets, 20 planned to be added by the end of February. And soon it will be AI-native: Your coding agent will know every Orient UI widget and how to use them. That's something I'm still exploring, give me a few days...
2
1
34
1,353
UserOrient retweeted
Made a badge for Orient UI πŸ”­
2
16
545
We've started February with a new subscriber! "Flippables Flashcards" started using UserOrient Flutter SDK a couple of weeks ago, now they upgraded to Growth plan after seeing value it provided to their team.
1
1
2
228
UserOrient retweeted
Yess! @userorient keeps nailing it with user oriented feature delivery! I have been waiting for this feature πŸ™
You can now reply to user comments on your @UserOrient roadmap board, and they get a simple & clean email πŸ“§
2
2
5
1,073
UserOrient retweeted
You can now reply to user comments on your @UserOrient roadmap board, and they get a simple & clean email πŸ“§
2
1
1
1,226
UserOrient retweeted
First public release of Orient UI is here! πŸŽ‰ It’s a collection of Flutter widgets without Material or Cupertino. Don't worry! It doesn't force you to migrate your app to OrientApp, use OrientScaffold or anything. It works with them. These widgets are just pure templates. As of v0.1.0 , there are 6 mature widgets: Button, Spinner, NavBar (mobile web), EmptyState, Toast and ConfirmationPopup βœ… The more to come. How it works? You just run β€œorient_ui add button” in your terminal, and πŸ₯πŸ₯πŸ₯ that widget copied to your Flutter project!Β It’s yours! Change it if you want. No pubspec dependencies and no dependencies at all! And to give you a background, it's the design system powering @UserOrient's web and mobile dashboards that are built with Flutter 🩡 So, remember, it’s early public release, API and widgets might change a bit and the more feedback you give, the more we can make it better. Let's go! Links in the first comment πŸ‘‡πŸ»
5
15
97
17,614
UserOrient retweeted
Just released @UserOrient 1.7.0 that brings theme customization 🫟 This was much-requested, long-awaited feature request.
1
1
1
872
UserOrient retweeted
Experimenting theming in @UserOrient: Just pass two colors: background & accent. That's it:
1
2
6
479