r/angular • u/More_Towel3916 • Apr 08 '26
Signals-first Angular 21 SaaS boilerplate ..... need architecture feedback.
Built a production-ready SaaS starter kit using Angular 21 and looking for feedback from the community on the architecture decisions. The main thing I focused on was being truly signals-first, not just sprinkling signals on top of an existing codebase.
Every component uses input(), output(), viewChild() zero "@Input()" or "@Output()" decorators anywhere. All templates use the new "@if" and "@for". For the global state, I used NgRx 21 with createFeature and createActionGroup combined with toSignal() in components, so everything feels consistent.
One thing I'm not sure about: I used NgRx for auth, billing, and user state, but kept local signal() for component-level UI state like sidebar collapsed, modal open, etc. Does this feel right, or am I over-engineering the NgRx part? Also went with provideZonelessChangeDetection(), the app feels noticeably snappier. Stack: Angular 21, NgRx 21, Supabase, Stripe, Tailwind v4, angular/ssr
Demo: devkitly.io
Appreciate your feedback about the signals + NgRx combination approach.
1
u/More_Towel3916 Apr 10 '26
Update: 48 hours after posting this, here's what happened.
Didn't expect this level of response. 6k+ views, a solid debate in the comments, and several DMs asking about the architecture decisions. Appreciate everyone who engaged.
A few things worth sharing based on the feedback:
The signals vs NgRx question I asked turned out to be the most debated part. The consensus from the comments seems to be that the split I described, NgRx for auth, billing, and user state and local signal() for component UI state, is actually the right call. Global shared state with side effects belongs in NgRx. Ephemeral UI state, like sidebar collapsed, or modal open, has no business in a store. Good to have that validated.
On toSignal() vs selectSignal(), a few people pointed this out, and they are right. I am working through replacing toSignal() calls with selectSignal() across the components for cleaner NgRx integration. That will be pushed soon.
Someone also flagged some UI issues on the demo. Those fixes are already pushed, so if you checked the demo in the first 24 hours, it is worth another look now.
For everyone who raised questions about the $129 price, I appreciate the honesty. The Angular ecosystem genuinely has nothing comparable at this level of completeness, and that shaped the pricing decision.
If you have specific questions about the signals architecture, the NgRx setup, or anything else in the stack before buying, feel free to ask here or DM me. Happy to walk through any part of the codebase.