I think this is right about what the layers are, but in terms of how to build it, I think you have to start with domain-specific components and then slowly extract the styled and unstyled primitives out of it as you see common repetition. If you start the other way around, you’ll build primitive you don’t need and can’t use to solve your problems. Plus most things end up being one offs anyway, so you don’t need to make another one.
I think this is right about what the layers are, but in terms of how to build it, I think you have to start with domain-specific components and then slowly extract the styled and unstyled primitives out of it as you see common repetition. If you start the other way around, you’ll build primitive you don’t need and can’t use to solve your problems. Plus most things end up being one offs anyway, so you don’t need to make another one.
Isn’t that always the problem in software engineering: starting top-down or bottom-up?
This matches my experience.