Preheat your oven to 350°F and grease two 9-inch round cake pans with butter or cooking spray, then line the bottoms with parchment paper for easy removal. Sift the powdered sugar for the frosting to remove any lumps, and bring your egg whites to room temperature (around 70°F) as this helps them incorporate better into the batter and create a more stable crumb. Measure out all your ingredients and have them ready before you begin mixing.
In a large mixer bowl, combine the cake flour, sugar, baking powder, and salt, then mix on low speed for about 30 seconds to blend the dry ingredients evenly. Add 1 cup of butter and 1 cup of coconut milk to the dry mixture and beat on medium speed for 2 minutes—this technique, called the "two-stage method," creates a tender, moist cake by ensuring the flour is fully hydrated before adding eggs. In a separate bowl, whisk together the egg whites, remaining 0.5 cup coconut milk, 2 teaspoons coconut flavoring, and vanilla extract until well combined.
Add the egg white mixture from Step 2 to the batter in three additions, beating on medium speed for about 20 seconds after each addition to fully incorporate without overmixing. Divide the batter evenly between the two prepared pans and smooth the tops with a spatula. Bake for 35-40 minutes until a toothpick inserted in the center comes out clean or with just a few moist crumbs. I like to rotate the pans halfway through baking to ensure even cooking, as ovens have hot spots. Cool the cakes in their pans for 10 minutes, then turn them out onto wire cooling racks and let them cool completely before frosting.
While the cakes cool, beat together the 0.66 cup butter and 8 oz cream cheese in a mixer on medium speed for 2-3 minutes until light and fluffy, scraping down the bowl occasionally. Add the sifted powdered sugar in two additions, beating until smooth between additions. Add 3 tablespoons coconut milk, 1.5 teaspoons coconut flavoring, and 0.5 teaspoon vanilla extract, then beat for another 1-2 minutes until the frosting is creamy and spreadable. I always make sure my cream cheese and butter are at room temperature so they blend together smoothly without lumps.
Pour 1 cup of the cream cheese frosting from Step 4 into a separate bowl and whip the heavy cream to stiff peaks in another bowl, then gently fold the whipped cream into the frosting to create a light, airy filling. While the whipped filling sets, spread the unsweetened shredded coconut on a baking sheet and toast it at 350°F for 5-7 minutes, stirring occasionally, until golden brown and fragrant—watch it carefully as coconut burns quickly. Set the toasted coconut aside to cool, and this is what gives the finished cake its best texture and subtle, authentic flavor.
Place the first cooled cake layer on a serving plate and spread about one-third of the whipped coconut filling from Step 5 evenly over the top. Place the second cake layer on top and gently press down. Spread the remaining cream cheese frosting from Step 4 over the top and sides of the cake, using an offset spatula to create an even finish. Press the toasted coconut from Step 5 onto the frosting, covering the top and sides of the cake completely for a beautiful presentation and rich coconut flavor in every bite.
Refrigerate the assembled cake for at least 1 hour before slicing—this helps the frosting set and makes clean slices easier. Let the cake sit at room temperature for 15-20 minutes before serving for the best flavor and texture.