Interfaces people trust
Backend quality is wasted if the UI feels inconsistent. I spend a large part of my work on React.js, Angular, Tailwind CSS, and Sass so screens stay fast to build and easy to scan.
The same product often has a web admin and a Flutter client. The web side should feel like the same company, not a different startup. I wrote about the mobile half in Flutter DDD with generated OpenAPI clients.
React when composition matters
React is my default for dashboards and marketing-adjacent product UI. Components stay small. State stays close to the screen that owns it. Tailwind keeps spacing and color in the markup so I am not hunting a 400-line stylesheet for a padding bug.
Patterns I reuse:
- Page shells for nav and content width.
- Data tables with explicit empty and error states.
- Forms that map 1:1 to API commands, not to a giant local store.
Angular when the workspace is already strict
Angular still shows up in teams that want modules, routing, and DI out of the box. I use it the same way I use Spring on the server: respect the framework, do not fight it.
Components stay presentational. Services talk to REST or GraphQL. Guards protect routes the same way Spring Security protects endpoints.
Tailwind first, Sass when tokens need a home
Tailwind CSS is how I ship consistent UI quickly. Utility classes make reviews easier: you see the design in the JSX or template.
Sass still helps for:
- Shared design tokens compiled into CSS variables
- Rare animations that would be noisy as utilities
- Legacy screens you cannot rewrite in one pull request
The rule is not “never write CSS”. The rule is “do not invent a third styling system”.
Frontend is still API work
Pretty screens that ignore loading, pagination, and validation are demos. Production UI:
- Handles 401/403 without dumping the user into a white page.
- Shows optimistic UI only when rollback is cheap.
- Matches the contract the backend actually documents.
That is why I care about OpenAPI on mobile and clear REST on web. See projects for the full-stack picture, or contact if you need both sides built together.
Frequently Asked Questions
React or Angular for a new product UI?
I pick React when the team wants a flexible component tree. I pick Angular when the product already lives in a structured, opinionated workspace.
Does Tailwind replace Sass?
For most new screens, yes. I still use Sass when a design system needs shared tokens that utilities would repeat everywhere.
How do you keep UI consistent with a mobile app?
Share the language of spacing, type, and states. Flutter and React will never share widgets, but they can share UX rules.
Related articles
Flutter DDD with generated OpenAPI clients
How I kept a multi-platform Flutter app maintainable with Domain-Driven Design and models generated from Swagger OpenAPI.

My path as a full-stack web and mobile developer
How I went from full-stack developer training to shipping Spring Boot APIs, Flutter apps, and CI pipelines clients can trust.