Preheat oven to 350°F. Line a cupcake pan with paper cupcake liners and set aside.
Using a hand mixer or stand mixer fitted with the paddle attachment, beat the butter and sugar until creamy and light. Add egg whites, egg, vanilla extract, and coconut extract and beat again, stopping to scrape the bottom and sides of the bowl.
Add flour, baking powder, baking soda, and salt. Mix on low speed just until combined.
Add coconut milk and sour cream, mixing on low speed and stopping again to scrape the bottom and sides of the bowl. Stir in the sweetened shredded coconut until evenly dispersed throughout the batter.
Fill cupcake liners ⅔ full about bake for 18-22 minutes. To test for doneness, bounce a finger lightly on the top of the cupcakes. If it bounces right back, the cupcakes are done. If it leaves an indentation, they may need to bake for another minute or two longer. Cool completely before frosting.
To make the frosting, beat the softened butter and cream cheese until creamy and smooth. Add the powdered sugar, vanilla extract, coconut extract, and almond extract, then beat again for 2-3 minutes until light. Add heavy cream or milk only as needed to reach a spreadable consistency.
Top each cooled cupcake with a generous amount of frosting, then press the frosting into shredded coconut to decorate. Enjoy!