Server components with intent
The server/client boundary is a design decision, not a lint config. RSC where it eliminates JS; client where interactivity demands it.
Next.js, Remix, React Native — frontends built like furniture, joinery visible.
React frontends built like furniture — square, joinery visible, tested. Next.js and Remix on the web, React Native on mobile, all sharing state, tokens, and a testing spine that survives contributors. Server components used where they earn their keep; client boundaries drawn on purpose.
The server/client boundary is a design decision, not a lint config. RSC where it eliminates JS; client where interactivity demands it.
Route-level loaders, suspense boundaries, and cache invalidation that survives the third contributor. No useEffect-fetches sprawl.
Storybook as the workshop, Vitest for logic, Playwright for the golden paths. The testing spine that keeps velocity from decaying.
Expo with EAS Update, code-push pipelines, native modules only when they earn it. Cross-platform without pretending native doesn't exist.
One tokens source, generated for CSS, RN styles, and Tailwind. Rebrand day is a config change, not a sprint.
Route-level code splitting, third-party dependency budget, tree-shaking that actually works. Lighthouse scores tracked as a gate, not a report.
The words that separate insiders from readers.
The gap between a mutation completing and the right screen re-rendering is still where real apps stumble.
Library ecosystems still catching up. Migration paths that don't strand your third-party deps.
Shared with the Angular practice — same problem, different frameworks. Nobody has a genuinely great answer yet.
Golden-path E2E is only useful when green. Flake-triage as a first-class role, not a Friday chore.
The point where adding another dependency stops being free. Teams need a budget conversation, not a hero refusing PRs.