For the cake: Heat the oven to 350°F. Line a 12-cup muffin pan with cupcake papers. Coat the liners with cooking spray.
In the bowl of an electric mixer, combine the flour, cocoa powder, sugar, baking powder, baking soda, and salt on low speed. Add the butter, and mix on medium speed until it distributes evenly into the flour mixture, 1 minute. Add the soy milk, water, vinegar, and vanilla extract, and mix on medium speed for 1 minute more (avoid overmixing). Pour the batter into the prepared cupcake papers.
Bake until a toothpick inserted in the center of a cupcake comes out clean, 20 to 25 minutes. Cool the cupcakes in the pan for 15 minutes. Remove them to a cooling rack to cool completely.
For the frosting: Beat the butter and shortening in a mixing bowl on medium-low speed until blended, 1 to 2 minutes. Add the confectioners’ sugar and beat until fluffy, 3 minutes. Scrape down the inside of the bowl; then beat in the vanilla extract and soy milk on medium-high speed until light and fluffy, 6 minutes more (the long beating time makes the frosting fluffy).
Meanwhile, put the chocolate in a medium heatproof bowl and pour on the boiling water. Stir until the chocolate melts. Add it to the frosting and beat at medium speed until smooth, 1 to 2 minutes. Spoon the frosting into a zip-top or pastry bag, seal the bag, and refrigerate it until the frosting is slightly firm but spreadable, at least 1 hour or up to 2 days.
Snip off a corner from the zip-top bag or attach a tip to the pastry bag, and squeeze the frosting onto the cooled cupcakes. Scatter on the sanding sugar.
Tip: If you prefer, replace the red sanding sugar with small red candy hearts.