Preheat your oven to 350°F (175°C) and line a 12-cup muffin pan with cupcake liners. Set aside.
In a medium bowl, whisk together the flour, baking powder, and salt until evenly combined.
In a large mixing bowl, beat the softened butter and granulated sugar together for 2 to 3 minutes, until pale and fluffy. This step helps create a light cupcake texture.
Add the eggs one at a time, beating well after each addition. Mix in the vanilla extract until smooth.
Add the dry ingredients in two additions, alternating with the milk. Start and end with the dry ingredients, mixing gently just until combined. Do not overmix.
Divide the batter evenly among the prepared cupcake liners, filling each about two-thirds full.
Bake for 18 to 20 minutes, or until a toothpick inserted into the center comes out clean or with a few moist crumbs.
Remove the cupcakes from the oven and let them cool in the pan for 5 minutes, then transfer to a wire rack to cool completely before frosting.
To make the frosting, beat the softened butter on medium speed for 2 to 3 minutes until smooth and creamy.
Gradually add the powdered sugar, one cup at a time, mixing on low speed to avoid a mess.
Add the vanilla extract and 2 tablespoons of cream or milk. Beat on medium-high speed for 2 to 3 minutes until light and fluffy. Add the remaining cream if needed for a smooth, pipeable consistency.
Divide the frosting into two bowls. Leave one bowl white and tint the other with a few drops of pink food coloring, mixing until evenly colored.
Fit a piping bag with a large star tip and spoon both frostings side by side into the bag to create a two-tone swirl.
Pipe the frosting onto the cooled cupcakes in a smooth spiral, starting from the outside and working inward.
Finish by gently sprinkling the tops with heart-shaped sprinkles.