Place the flour, salt, sugar and yeast in a large mixing bowl. Using a wooden spoon, slowly mix in a little water until the mixture forms into a pliable dough.
Place the dough on a floured surface and knead until it feels elastic.
Return the dough to the bowl, cover and chill in the refrigerator for an hour.
Return the chilled dough to your floured work surface and roll it into a rectangle, around 60x30cm/24x12in.
Roll out the chilled butter into a rectangle about 1cm/½in thick, around 20x30cm/8x12in.
Place the butter rectangle in the centre of the dough rectangle, so it covers the middle third of the dough.
Fold each side of the dough over the butter, so there is one layer of dough on the bottom, a layer of butter, then two layers of dough.
Wrap the dough in cling film and chill in the fridge for another hour.
Lightly flour the worktop and roll out the dough to a rectangle, around 60x30cm/24x12in. Repeat the folding process, folding the long sides into the middle, then return the dough to the fridge for a further hour.
Repeat this process of folding and chilling two more times, then wrap the dough in cling film and set it aside to rest overnight.
Using a rolling pin, roll out the rested dough to 3mm/1/8in thick.
Either use a croissant cutter to cut triangles or cut the rolled out dough into squares, each 20cm/8in square.
Cut each square diagonally, making two triangles.
Place the dough triangles on a lightly floured surface with the right angle away from you.
Roll the croissant towards the right angle point and curl the dough roll around into a traditional crescent shape. If using chocolate, add the chocolate across the widest part of the triangle, before rolling it up.
Place the shaped croissants on baking trays lined with baking parchment and leave to rise for 1½ hrs.
Preheat the oven to 200C/425F/Gas 6.
Lightly egg-wash the croissants and bake for 10-15 minutes until golden brown.