Prepare your workspace and ingredients. Preheat oven to 350°F (175°C). Grease and flour three 9-inch round cake pans, or line with parchment paper for easier removal.
Mix the dry ingredients together. In a medium bowl, whisk together flour, baking powder, baking soda, and salt. Set aside.
Cream the butter and sugar until fluffy. In a large mixing bowl, beat butter and sugar with an electric mixer on medium-high speed for 3-5 minutes until pale and fluffy. This creates the base structure of your cake, so don’t rush this step.
Add eggs and extracts. Beat in eggs one at a time, ensuring each is fully incorporated before adding the next. Mix in vanilla and coconut extracts.
Incorporate the dry ingredients and coconut milk. Gradually add the flour mixture to the butter mixture, alternating with coconut milk, beginning and ending with flour (flour→milk→flour→milk→flour). Mix on low speed just until combined after each addition.
Fold in the pineapple and coconut. Gently fold in the drained crushed pineapple and shredded coconut until evenly distributed throughout the batter.
Divide and bake the cake layers. Divide batter evenly among the prepared pans and smooth the tops. Bake for 25-30 minutes or until a toothpick inserted in the center comes out clean and the tops spring back when lightly touched.
Cool the cakes properly. Allow cakes to cool in pans for 10 minutes, then turn out onto wire racks to cool completely. If the tops are domed, level them with a serrated knife for even stacking.
Make the coconut cream frosting. Beat cream cheese and butter together until smooth and fluffy, about 3 minutes. Gradually add powdered sugar, then mix in cream of coconut, vanilla, and salt until smooth and creamy.
Assemble the cake with care. Place one cake layer on a serving plate. Brush with 2-3 tablespoons of reserved pineapple juice, then spread with a thin layer of frosting and half of the pineapple preserves. Repeat with the second layer.
Complete the cake assembly. Place the final layer on top, brush with remaining pineapple juice, then frost the top and sides of the cake with the remaining frosting.
Add the finishing touches. Press toasted coconut flakes onto the sides of the cake and arrange fresh pineapple slices and optional maraschino cherries on top for decoration.
Chill before serving. Refrigerate the cake for at least 1 hour before serving to allow the flavors to meld and the frosting to set.