Build two kinds of ViewComponents: generic ones that accept parameters like color/size/label, and object-specific ones that accept a record and encapsulate the full rendering logic (conditionals, collections) for that object — keeping it out of decorators or the model.