1/6
From ex-Tech Lead on CHANEL TOUCH (Magic Mirror AR makeup · built from scratch in Swift) to daily Flutter with Redux in production.
Why we still choose Redux in 2025 on this project (instead of Riverpod)? Thread 🧵👇
#FlutterDev#Redux
2/6
Project context: Complex app, heavy shared state, offline-first, bi-directional sync, mixed senior/junior team.
Redux gives us:
• Full predictability (time-travel debugging with Redux DevTools even in prod)
• Powerful middleware for logging/analytics/Sentry
• Clear separation: actions → reducers → store
3/6
Daily hack #1: Custom middleware that logs ALL actions + anonymized state diffs in production.
Saved us hours on bugs that were “impossible to reproduce”.
Simple snippet → see reply below 👇
4/6
Hack #2: Redux + Freezed for immutable state at scale.
No more manual copyWith forgetting fields.
Combined with build_runner → zero boilerplate.
Sealed classes for actions + Freezed reducers = pure bliss.
5/6 Hack #3: Optimized StoreConnector with distinct: true + proper ==/hashCode on ViewModel (Freezed handles this automatically).
Cuts ~90% of unnecessary rebuilds on large pages.
Real-world result: 60fps → stable 120fps on mid-range Android devices.
6/6
Redux isn’t dead in Flutter — it shines on critical, scalable apps.
What’s your current state management? Redux, Riverpod, Bloc, something else?
Drop your real-world experience below — I read everything! 🐕
#Flutter #MobileDev
@gajesh@darkbloomai Why does your install script need to install an MDM on the Mac? That's a huge security issue. You could technically erase or lock any device with Darkbloom installed.
For years, when teams wanted to adopt React Native, I recommended incremental brownfield integration of a single screen into a mature native app. But that changed with AI agents.
Brownfield approach was a save haven. It kept the existing native app in production while the team introduced React Native one flow at a time. It provided safety, easy A/B testing possibilities, and a time for the team to learn new technology.
AI agents changed what I am willing to test first. A full-app rewrite can now be time-boxed and checked before the company funds the whole move. But don't get fooled, it's not a "single shot" attempt, but a whole process.
The team still has to recover product behavior from the native apps, ask a separate agent to review the generated code, compare each flow on devices, and keep a tested fallback.
A great example of that was Bun's migration from Zig to Rust. It was quick, but look at all the planning, infrastructure, verification gates, and token cost that went with it.
I wrote about that change in approach in our new ebook: Migration to React Native in the AI Era. The guide explains how to choose the path (there are three), organize the work, control releases, and measure whether delivery improves.
If you're considering migrating to React Native now or in the future, download the ebook: https://t.co/uKo4Bo7CRG
@swyx Interesting, I went the opposite way and shipped an enterprise platform with BMAD. Structured handoffs, review gates, no open ended loops. Curious where you draw the line, does /goal hold up when a mistake hits a client’s production infra?
@betomoedano Been waiting for this. The screenshot-review-fix loop is where most of the friction lives when agents build UI. Curious how it handles animation timing bugs, that’s usually where automated checks fall apart.
@jacobtechtavern Solid upgrade. We hit the same wall building CHANEL TOUCH’s AR face engine, richer landmark data is great until it eats your frame budget. Did you have to touch your throttling logic after the swap, or did CVLFace stay light enough?
Claude Code and OpenCode both let you ask a quick side question without polluting the agent's conversation history. @MistralAI@mistralvibe didn't have that yet, so I opened a PR to add it: /btw <question>.
https://t.co/lYEKd4YDWH
It runs against the current session as read-only context, no tools, and never touches the main conversation history — ask it while the agent is idle between turns, get an answer, and the next turn continues exactly where you left off.
Fun detail: it builds a throwaway message list and calls the backend directly, so nothing gets appended to the real history. Token usage still shows up in /status though.
@remi_rousselet Seen worse internally, colleagues submitting AI PRs they never reread. Reviewer’s the only human who’s seen the code. Can’t explain your diff, you didn’t participate. How do you even review someone else’s blind spot?