Make the dough. Warm your milk until it is tepid. Add the sugar and yeast and stir to combine. Let it stand until the yeast is frothy and milk has cooled completely.
Put your flour and salt in a food processor fitted with a metal blade. Add the cubed butter and briefly pulse – the butter should be in fairly chunky pieces. You can also do this by hand – use two knives to chop the butter into the flour.
Put the flour/butter in a large bowl and add the milk/yeast mixture. Gently combine using a spoon until the dough just comes together. If the dough is too crumbly add a little water, a few drops at a time.
Turn the dough out of a lightly floured work top and briefly knead/press together to form a square. Wrap in cling film and put in the freezer for 30 minutes or until cold but still pliable.
Lightly dust your worktop and rolling pin with flour. Roll your dough out to a long rectangle.
Fold the top third towards the middle and then the bottom third over the top to form a square.
Flip the dough over so the seams are underneath. Roll it out again repeating steps 5 & 6 three more times. The dough will become more elastic as you are rolling and folding. If the butter becomes too warm, wrap the dough and pop in the freezer to firm it before continuing.
After the final rolling and folding the dough should be a square shape. Wrap it twice with cling film and put in the fridge for a couple of hours or, ideally, overnight.
Take the dough out of the fridge and leave for 10 minutes. Roll the dough out to a long rectangle, roughly three times as long as it is wide and at least 4mm thick. Trim the edges with a pastry scraper.
Cut the dough into triangles about 30cm/12in long and 8cm/3in at the base. Score a small slit in the centre of each triangle base. (See below for how to create croissant twists).
Gently stretch the corners and tip and place about 1 tbsp of frangipane near the base of the triangle. Loosely roll the dough up and gently twist the ends to form a crescent shape. Place, tip side down, on a large tray lined with baking paper. Repeat with the rest of the dough, spacing the croissants slightly apart on the tray.
Place the tray in a large plastic bag and let the croissants rise for 2 hours at room temperature.
Preheat the oven to 200C | 400F. Brush the croissants with the egg wash and sprinkle with flaked almonds.
Bake for 15-20 minutes or until the croissants are a nice golden brown. Cool on a wire rack.
Put the icing sugar in a bowl and stir in the milk and vanilla until you have a smooth, thick but pourable glaze. Drizzle or pipe the glaze over the croissants and dust with icing sugar before serving.
Make the filling. Beat the butter and sugar together for several minutes in a stand mixer until white and fluffy.
Stop the mixer and scrape them bottom and sides. Add the egg and whisk until thoroughly combined.
Fold in the ground almonds, flour and almond extract. Transfer to a piping bag and put in the fridge until you are ready to use. The frangipane can be prepared up to a day in advance.
There will be some inevitable oozing of the frangipane in the oven. Trim any filling that spills out of the croissants (it will puff up) and eat while no-one's looking!
•The croissants need to prove slowly at a cool temperature – don't put them near a heat source or try to speed the process up or the butter will melt! •To make croissant twists, roll the dough out and cut into strips 2.5cm (1inch) wide and about 25cm (10inch) long. Pipe a strip of frangipane along the dough then twist the strip. Place, slightly spaced apart, on a tray lined with baking paper. Place tray in a plastic bag and leave to rise for 2 hours. Glaze with egg wash and sprinkle with flaked almonds. Bake for 12-15 minutes. Drizzle with glaze as above. • If you wish to make a croissant heart (and I mean, really, why not!) use two twisted strips to form a heart, pressing the ends of the dough to join together.