@tim_1 's got the simplest approach, and it has another upside of being able to work multichannel
More complicated it to just go all the way and EVERY product is just it’s combination of options.
aka psuedo-combined listings, sibling products, flat products, product families, etc.
And do stuff like retitle them e.g. /products/logoless-red or logofree etc
And either present them in a collection as one product, or a placholder/“parent” product that stitches them all together.
Then optionally on the backend sync inventory to a main product.
You should only need to get the forms ID and use that ID as the value of an attributeform on the input: <input form="prodcut-form-124356yasd" ....>
And update that before the form submits.
If it doesn’t work then the app is garbage because it’s probably going either through the hierarchy, or some virtual dom/state nonsense that stores only specific values and doesn’t respect reality.
So that problem turns into the advanced workaround of updating product in the cart itself; which can mean disabling instant buy-buttons so there is always a cart step.
If you need any of that built, or to automate the product option combining reach out to me or the other devs for services.