Preheat oven to 350°F (175°C). Grease three 9-inch round cake pans and line the bottoms with parchment paper.
In a medium bowl, whisk together cake flour, baking powder, baking soda, and salt. Set aside.
In a large mixing bowl, beat sugar, softened butter, and vegetable oil for about 3 minutes until pale and fluffy.
Add egg whites, vanilla extract, and coconut extract. Mix until fully combined.
Alternate adding the flour mixture and coconut milk, beginning and ending with the flour mixture. Mix on low speed until just combined.
Gently fold in shredded coconut using a spatula.
Divide batter evenly between prepared pans and smooth the tops.
Bake for 30–32 minutes, rotating pans halfway through baking. Cakes are done when a toothpick inserted in the center comes out clean.
Cool cakes in pans for 20 minutes, then transfer to a wire rack to cool completely.
To make frosting, beat butter and cream cheese until fluffy. Add vanilla extract, coconut extract, and salt.
Gradually add confectioners’ sugar, one cup at a time, mixing until smooth and creamy.
Place one cake layer on a serving plate and spread frosting evenly on top. Repeat with remaining layers.
Frost the top and sides of the cake with remaining frosting.
Press shredded coconut onto the top and sides of the cake until fully coated.
Refrigerate for 30 minutes before slicing for cleaner cuts. Serve chilled or let sit at room temperature for 15 minutes before serving.