Begin by preheating your oven to 350°F (177°C). Prepare three 9-inch round cake pans by greasing them thoroughly, then line each with a round of parchment paper. For ease in removing the cakes later, grease the parchment paper as well.
To make the cake, first, whisk together the cake flour, baking powder, baking soda, and salt in a mixing bowl, setting this dry mixture aside for later.
In the bowl of a stand mixer fitted with either a paddle or whisk attachment, beat the softened butter and granulated sugar together on medium-high speed until the mixture is creamy and smooth, about 2 minutes. Scrape down the sides of the bowl as needed.
Next, incorporate the egg whites, beating until just combined. Follow this by adding the sour cream, vanilla extract, and coconut extract. The mixture may appear slightly curdled due to the varying textures, but this is normal. After ensuring everything is well-mixed, gradually add the dry ingredients while the mixer is on low speed. Slowly pour in the coconut milk, continuing to mix until everything is combined. Stir in the shredded coconut by hand, ensuring the batter is smooth and without lumps.
Divide the batter evenly among the prepared pans, smoothing the tops if necessary. Bake for 21 to 23 minutes, or until a toothpick inserted into the center of each cake comes out clean. Allow the cakes to cool completely in their pans on a wire rack before proceeding with the frosting.
For the frosting, in a large mixing bowl, beat the softened butter and cream cheese on medium speed until smooth and creamy, about 2 minutes. Gradually add the confectioners’ sugar, coconut milk, vanilla extract, coconut extract, and salt. Start on low speed to prevent a sugar cloud, then increase to high and beat for an additional 3 minutes. Adjust the consistency with more confectioners’ sugar if the frosting is too thin, or more coconut milk if it’s too thick. A pinch of salt can be added if the frosting is overly sweet.
To assemble the cake, first level the tops of the cakes using a serrated knife. Place one layer on your chosen serving plate or cake stand, and spread about 1 and 1/2 cups of frosting evenly over the top. Add the second cake layer and repeat. Place the final layer on top, and use the remaining frosting to cover the top and sides of the cake. Smooth the frosting using an icing spatula and a bench scraper. Finally, press the shredded coconut into the frosting on the top and sides of the cake for decoration.
For best results, refrigerate the cake for at least 20 minutes before slicing to help it hold its shape. Leftovers should be covered tightly and stored in the refrigerator, where they will keep for up to 5 days.