Cupcakes:
Preheat the oven to 350°F. Line cupcake pans with paper liners.
In a medium bowl, whisk together 2 ½ cups all-purpose flour, 2 ½ teaspoons baking powder, 1 teaspoon baking soda, and 1 teaspoon salt. Set aside.
In a large mixing bowl, beat 4 room-temperature eggs until combined. Add 1 ½ cups granulated sugar and continue mixing for about 30 seconds until slightly thickened.
Add 1 cup vegetable or canola oil and 3 teaspoons vanilla extract. Mix until fully combined.
Gradually add the dry ingredients to the wet mixture, alternating with 1 cup buttermilk. Mix just until the batter is smooth and combined. Do not overmix.
Fill each cupcake liner about ⅔ full with batter.
Bake for 12-14 minutes, or until a toothpick inserted into the center comes out clean.
Remove cupcakes from the oven and allow them to cool completely before frosting.
Frosting:
In a large mixing bowl, beat ½ cup softened unsalted butter and 1 cup shortening together for 3-5 minutes until smooth and creamy.
Stir together 1 tablespoon vanilla extract and 4-6 tablespoons very cold milk or heavy cream.
Gradually add 8-9 cups powdered sugar, alternating with the milk mixture, until the frosting reaches your desired consistency. Continue beating until the frosting is light and fluffy.
Rose Decoration
Tint the frosting with food coloring if desired.
Transfer frosting to a piping bag fitted with a #1M star tip.
Starting near the outside edge of each cupcake, pipe a spiral in a counterclockwise motion toward the center to create a buttercream rose. Serve immediately or store covered cupcakes in the refrigerator until ready to enjoy.