Angular gives you an opinionated structure out of the box — routing, forms, DI, HTTP, testing are all first-party and versioned together, which matters at enterprise scale with rotating teams. React asks you to assemble that stack yourself. We reach for Angular when the project is large, long-lived, and benefits from convention; we reach for React when the team already lives there or the surface is smaller and more bespoke.
Standalone, by default, on every new build. Angular has shifted its own documentation and CLI scaffolding to standalone-first since v17, and it removes a whole category of NgModule bookkeeping. We only keep NgModules around when working inside an existing codebase that hasn't migrated yet — and even then, we migrate incrementally rather than block on a big-bang rewrite.
Signals for component state and anything synchronous-feeling — they're simpler to read, simpler to test, and Angular's change detection is built around them now. RxJS stays for genuinely async, multi-event streams: WebSocket feeds, debounced search, complex combineLatest pipelines. The `resource()` API and the RxJS interop layer let both live in the same component without fighting each other.
For genuinely complex, cross-cutting state — yes, and we reach for NgRx SignalStore over the classic actions/reducers/effects setup, since it's built on signals and cuts a lot of boilerplate. For most apps, component-local signals plus a handful of injectable services are enough; we don't introduce a global store until the app actually needs one.
Yes — a large share of our Angular work is exactly this. We run `ng update` schematics where they exist, migrate AngularJS or pre-v14 apps incrementally behind route boundaries, and move NgModules to standalone component by component. No big-bang rewrites; we keep the app shippable at every step.
Vitest for unit and component tests — the Angular CLI's default test runner since v21, faster than Karma and easier to run in CI. Playwright for end-to-end flows and visual regression. axe-core for accessibility checks. CI runs the full suite on every PR; nothing merges if the suite is red.
10 — Start
Let's build something worth shipping.
Two-week diagnostic, four-week MVP, twelve-week ground-up. Bring the brief — we'll send a plan, not a pitch deck.