Bloom the yeast: In a large bowl, combine warm milk and sugar. Sprinkle the yeast over the top and let it sit for 5–10 minutes, until foamy.
If it doesn’t foam, your yeast may be inactive or the milk too hot or cold.
Mix the wet ingredients: Whisk in the egg, melted butter, and vanilla until smooth.
Add the dry ingredients: Stir in the whole-wheat flour and salt. Add 1 1/2 cups all-purpose flour and mix with a wooden spoon until a shaggy dough forms. Add more flour, a tablespoon at a time, until the dough is soft and slightly tacky but not sticky.
Knead the dough: Turn onto a lightly floured surface and knead for 6–8 minutes, or use a stand mixer with the dough hook for 5–6 minutes.
The dough should become smooth and elastic. Avoid adding too much flour; a slightly tacky dough bakes softer.
First rise: Place the dough in a lightly oiled bowl, cover, and let rise in a warm spot until doubled, about 60–90 minutes. A slightly warm oven (off) or a sunny counter helps.
Make the filling: Stir together softened butter, brown sugar, cinnamon, and a pinch of salt until it becomes a spreadable paste.
Shape the rolls: Punch down the dough and roll it into a 12x16-inch rectangle.
Spread the cinnamon filling evenly, leaving a 1/2-inch border on one long edge. Roll tightly from the opposite long side toward the border, then pinch the seam to seal.
Slice the rolls: Use a sharp knife or unflavored dental floss to cut 12 even rolls. Place them in a greased 9x13-inch pan, spaced slightly apart.
Second rise: Cover and let rise until puffy, 30–45 minutes.
They should expand to gently touch each other.
Bake: Preheat the oven to 350°F (175°C). Bake for 20–25 minutes, until the tops are lightly golden and the centers are cooked but still soft. Avoid overbaking for maximum tenderness.
Make the icing: Beat cream cheese and butter until smooth.
Add powdered sugar, vanilla, salt, and milk to reach a thick, spreadable consistency.
Finish and serve: Spread icing over warm rolls so it melts slightly into the swirls. Serve warm and enjoy.