Add blueberries, sugar, lemon juice, zest, vanilla, and salt to a saucepan.
Simmer over medium heat for 8–10 minutes until berries burst and the mixture thickens slightly.
Lightly mash some berries with a spoon for texture. You want a spoonable, jammy sauce.
Cool to room temperature, then chill. For an ultra-smooth ice cream, blend and strain to remove skins. I like a mix: half strained, half rustic.
In a medium pot, heat the milk, half the cream, and half the sugar over medium until steaming, not boiling.
Whisk yolks with the remaining sugar and salt in a bowl until slightly paler.
Temper the yolks: Slowly stream in a ladle of hot milk while whisking constantly. Repeat with another ladle.
Return the yolk mixture to the pot. Cook over medium-low, stirring constantly with a spatula, until the custard thickens enough to coat the back of the spatula and reaches 170–175°F.
Remove from heat. Stir in the remaining cream and vanilla.
Strain the custard through a fine mesh sieve into a clean bowl for extra-smooth texture.
Press plastic wrap directly on the surface to prevent a skin.
Chill both the custard and the compote until very cold, at least 4 hours or overnight. Colder base = smoother ice cream.
Churn the custard in an ice cream maker according to the manufacturer’s directions until it resembles soft-serve.
Layer in a freezer-safe container: a scoop of churned ice cream, a spoonful of blueberry compote, repeat. Gently swirl with a butter knife for pretty ribbons.
Freeze until firm, about 4–6 hours. For the cleanest scoops, freeze overnight.
Whip 2 cups cold heavy cream to soft peaks.
Fold in a can (14 oz) of sweetened condensed milk, 1 teaspoon vanilla, and a pinch of salt.
Marble in the chilled blueberry compote.
Freeze 6 hours or until scoopable. It’s different from custard-churned, but still luscious and easy.