To make the dough: Beat the butter, sugar, and zest (or cinnamon) until light and fluffy, scraping the bowl as needed, about 3 minutes. Add the yolk and vanilla and beat until combined.
Meanwhile, whisk together the flour, almond flour, and salt. Add the flour mixture to the egg mixture and mix until just combined. Don't over-beat.
Divide the dough in half, and pat each half into a disc. Wrap in plastic wrap, and refrigerate until firm, about 1 hour.
Line two baking sheets with parchment paper. Set aside.
Remove the dough from the refrigerator, and let it soften for 5 to 10 minutes, until it feels soft enough to roll. It should still feel cold, but shouldn't feel rock-hard.
On a floured surface, roll each disc of dough out to about 1/8"-thick. Using a 2 1/2 to 3-inch heart-shaped cookie cutter, cut out cookies. Dust dough with extra flour as needed to prevent it from becoming too sticky.
Now, from half of the cookies, cut out another heart in the center with a 1 to 11/2-inch heart cookie cutter to make a heart shaped frame. Remove the little center heart cut out and set aside.
Place the cut cookies on the prepared baking sheets and refrigerate for 30 minutes and preheat the oven to 350°F.
Bake all of the cookies for 12 to 15 minutes, or until the edges are just beginning to turn brown. Let them cool for 5 minutes on the pan, then transfer to a rack to cool completely.
To fill the Linzer cookies: Place the cookies with the holes in them on a cookie sheet and sift confectioners' sugar over the top. Turn the remaining cookies flat side up and spoon 1/2 teaspoon of jam or lemon curd into the center, spreading it slightly. Top with the sugar-dusted cookies. Use the same process for chocolate filled cookies, only using chocolate instead of jam.
These cookies freeze well, but we suggest freezing them before filling them with the jam, so they don’t get soggy. Once filled, they last for several days in an airtight container at room temp or in the refrigerator.