Preheat oven to 350°F. Grease and flour three 9-inch round cake pans.
In a large bowl, at medium speed, beat the butter and sugar together until light and fluffy, about 2-3 minutes. Add eggs, one at a time, and mix until well incorporated. Add vanilla and coconut extract. Scrape the sides of the bowl as needed.
In a large bowl, whisk together the flour, baking powder, and salt.
Starting with the cream, alternately add cream and flour mixture to the butter and sugar mixture until incorporated. Scrape de sides of the bowl as needed.
Evenly divide the batter into the prepared pans. Bake for 30-35 minutes or until a toothpick inserted in the middle of the cake comes out clean. Remove the cakes from the oven and allow cooling for 10 minutes. Remove the cakes from the pans and place on a cooling rack until completely cool.
Prepare the filling. In a medium saucepan, combine the cream, sugar, and butter. Bring the mixture to a simmer. In a small bowl, combine the cornstarch and water. Bring the cream mixture to a boil. Remove from heat. Stir in the cornstarch mixture and heat until boil. Remove from heat. Add coconut extract and salt.
Strain the mixture into a bowl. Place the mixture in the refrigerator while the cakes cool down and you prepare the frosting.
Prepare the frosting. In a large bowl, beat butter, cream cheese, and sugar at low speed until combined. Increase the speed to medium and beat until well combined, about 3 minutes. Scrape the sides of the bowl. Add vanilla and coconut extract and beat until combined. Reduce the speed to low and slowly add the heavy cream until the frosting is soft and spreadable.
Assemble the cake. Place one layer of cake on a cake platter and spread the coconut filling over the cake. Top with a second layer of cake. Repeat the process. Cover the cake with plastic wrap and refrigerate for 1 hour. Toast one cup of shredded coconut, mix with the rest of the shredded coconut. Remove the cake from the refrigerator and apply the frosting on top and sides of the cake. Press the shredded coconut onto the sides of the cake. Decorate the top of the cake with pieces of fresh coconut. Serve.