Preheat oven to 350 degrees F. Line muffin tins with cupcake liners (12 regular, 48 mini, or a combo of 6 regular and 24 mini).
In a mixing bowl, combine flour, baking powder, baking soda, and salt.
In another bowl, melt butter and whisk in the sugar, buttermilk, sour cream, and vanilla. Add the liquid ingredients to the dry and mix until just combined. Set aside.
With an electric mixer, beat egg whites until soft peaks form. Fold into the batter until combined.
Spoon batter into cupcake liners (I like to use an ice cream scoop for the regular size cupcakes and a cookie scoop for the mini). Bake mini cupcakes for 9-11 minutes and regular cupcakes for 15-18 minutes until toothpick comes out clean. (If you are baking mini and regular cupcakes, bake the mini ones first and then the regular.)
For the Frosting:
Melt the chocolate in the microwave on low in 20 second increments, stirring after each. Let the chocolate cool slightly for about 2 minutes so it is not too hot that it melts the butter and cream cheese.
In a mixing bowl, beat butter and cream cheese on medium speed for 1 minute. Add the melted chocolate and vanilla and beat anther minute. Beat in the sugar a little at a time, mixing until until light and fluffy. Add milk 1 tablespoon at a time if needed to reach desired consistency. Place in a piping bag with tip and pipe onto the cupcakes.
For the Topping:
Using a vegetable peeler, shave the chocolate to create long chocolate shavings. Sprinkle over the freshly piped frosting and then top with Cadbury Mini Eggs.
Store in the fridge if not eating within 24 hours. Remove from fridge 30-60 minutes before serving to allow cupcakes to come to room temperature.