In the bowl of a stand mixer, beat the egg whites only using the whisk attachment on medium-high speed until the eggs are frothed and hold stiff peaks.
Transfer the eggs to a separate bowl.
In the same stand mixer bowl using the beater blade attachment, cream the butter and sugar.
Add the egg yolks and continue to beat.
In a medium bowl, whisk together the cake flour, salt and baking powder.
Add the dry ingredients alternately with the milk and vanilla extract, beating thoroughly after each addition. Scrape the sides of the bowl as needed.
Gently fold in the coconut and stiffly beaten egg whites until the egg whites are completely incorporated.
Grease and flour two 9" round cake pans.
Divide the batter equally between the two cake pans.
Bake at 350 degrees for 30 minutes or until the center of the cake bounces back when you touch it.
Cool for 10 minutes then turn the cakes out onto a wire rack to cool completely.
Make the Coconut Buttercream:
In the bowl of a stand mixer, beat the butter for 1-2 minutes until it is almost white in appearance.
Add in the coconut extract and mix again.
Add the powdered sugar, 1 cup at a time, alternating with the heavy cream and mixing well as you go. Add in enough heavy cream to get a good spreading or piping consistency.
Mix in the shredded coconut just until combined.
Assemble the Cake:
Place one cake layer on a cake plate. Frost the top.
Place the second cake layer on top of the frosted cake.
Cover the sides and top of the cake with the coconut buttercream.
Decorate with additional coconut if desired. Be sure to do this before the frosting sets.
Store at room temperature until serving. Store leftovers in a airtight container in the refrigerator.