Prep the bread: Cut the bread into 1-inch cubes.
If it’s very fresh, spread the cubes on a baking sheet and bake at 300°F (150°C) for 10–12 minutes to dry them slightly. You want them lightly crisp, not browned.
Grease the pan: Butter a 9x13-inch baking dish or a similarly sized casserole. This helps prevent sticking and gives the edges a lovely flavor.
Warm the dairy: In a saucepan, heat the milk and cream over medium until warm and steamy, not boiling.
Remove from heat.
Make the custard base: In a large bowl, whisk the eggs, sugar, cinnamon, nutmeg, salt, and vanilla until smooth. Slowly whisk in the warm milk mixture so the eggs don’t scramble.
Combine: Add the bread cubes to the bowl and toss gently to coat. Let sit for 10–15 minutes, stirring once or twice, so the bread absorbs the custard.
Fold in optional mix-ins and zest if using.
Assemble: Pour the mixture into the prepared dish. Drizzle the melted butter over the top and sprinkle with 1–2 tablespoons sugar for a light crunch.
Bake: Bake at 350°F (175°C) for 40–50 minutes. It’s done when the top is golden and a knife inserted in the center comes out with moist crumbs but no runny custard.
Rest: Let it cool for 10 minutes.
This helps it set and makes serving cleaner.
Make the vanilla custard sauce: While the pudding bakes or rests, heat milk and cream in a small saucepan until warm. In a bowl, whisk egg yolks, sugar, and salt until pale. Slowly whisk the warm dairy into the yolks.
Return the mixture to the saucepan and cook over low heat, stirring constantly, until it thickens slightly and coats the back of a spoon, 170–175°F (77–79°C). Do not boil. Remove from heat, stir in vanilla and butter (if using).
Serve: Spoon warm bread pudding into bowls and pour the warm vanilla custard over the top.
Add a dusting of cinnamon if you like.