PREP OVEN AND PAN: Preheat the oven to 350°F. Grease a 9 x 13-inch baking pan with butter or nonstick spray.
CREAM BUTTER AND SUGAR: In a large mixing bowl, beat ⅔ cup softened unsalted butter and 2 cups granulated sugar, and ½ teaspoon kosher salt for about 3 minutes, until light and creamy.
ADD EGGS AND LIQUIDS: Beat in 4 large eggs one at a time. Add 2 teaspoons vanilla extract and 1 cup whole milk. Mix just until combined.
ADD DRY INGREDIENTS: Add 2 ¼ cups all-purpose flour, 2 teaspoons baking powder, ½ teaspoon baking soda, and ¾ cup cocoa powder. Mix on low speed just until no dry streaks remain.
BAKE: Pour batter into the prepared pan and spread evenly. Bake for 40 minutes, until a toothpick inserted in the center comes out mostly clean.
POKE HOLES: While the cake is still warm, use a straw or the handle of a wooden spoon to poke holes all over the surface, spacing them about 1 inch apart.
CHILL: Transfer the cake to the refrigerator and chill for 30 minutes.
MAKE TRES LECHES MIXTURE: In a medium bowl, whisk together 1 (14 ounce) can sweetened condensed milk, ½ cup evaporated milk, ¼ cup whole milk, and ¼ cup cocoa powder until smooth.
SOAK: Slowly pour the chocolate milk mixture evenly over the chilled cake. Allow it to absorb completely.
MAKE WHIPPED CREAM: In a large bowl, beat 2 cups heavy cream, ¼ cup cocoa powder, and 2 teaspoons vanilla extract until stiff peaks form.
TOP AND SERVE: Spread the chocolate whipped cream evenly over the cake. Slice and serve chilled.
Notes
Chill Before Topping: The cake must be cool before adding whipped cream or it will melt.Cocoa Choice: Dutch process cocoa provides a deeper chocolate flavor, but natural cocoa works well too.Pour Slowly: Add the tres leches mixture gradually so it absorbs evenly without pooling.Storage: Store covered in the refrigerator for up to 5 days.Freezing: Not recommended once soaked, as texture will change.