Mix the dry ingredients: In a large bowl, whisk the flour, sugar, yeast, and salt. Keep the salt and yeast on opposite sides until mixed to protect the yeast.
Add the wet ingredients: Pour in the warm milk, warm water, vanilla, and eggs. Stir until a shaggy dough forms.
Add the softened butter a tablespoon at a time, mixing until incorporated.
Knead to smooth: Knead by hand on a lightly floured surface or in a mixer with a dough hook for 8–10 minutes. The dough should be soft and slightly tacky, but not sticky. Add 1–2 tablespoons of flour only if needed.
First rise: Place the dough in a lightly greased bowl, cover, and let rise in a warm spot until doubled, about 1–1.5 hours.
Make the topping: Cream the butter and sugar with a spatula.
Mix in flour, vanilla, and salt until a soft, moldable paste forms. Divide and flavor/color portions if you like (cocoa or cinnamon). Keep covered so it doesn’t dry out.
Shape the buns: Punch down the dough and divide into 12 equal pieces.
Shape each into a tight ball by tucking edges underneath and rolling on the counter for surface tension.
Top with the shell: Divide the topping into 12 balls. Flatten each between parchment sheets or with your palms into a 3-inch disk. Place on top of each dough ball and gently press to adhere.
Score the pattern: Use a paring knife or concha cutter to score curved lines like a seashell, or simple crisscrosses.
Cut shallowly into the topping only.
Second rise: Arrange on parchment-lined baking sheets, spaced apart. Cover lightly and let rise until puffy, 30–45 minutes. The dough should look airy and spring back slowly when poked.
Bake: Preheat the oven to 350°F (175°C).
Bake 16–20 minutes, rotating once, until lightly golden on the edges. The topping will crack and set; the bottoms should be light brown.
Cool and serve: Cool on a rack for 10–15 minutes. Enjoy warm with coffee.
For café de olla vibes, add a pinch of cinnamon and a touch of piloncillo or brown sugar to your brew.