Clocks were the first thing that I created when I started with electronics: There was a clock with 7 segment displays without SW / microcontroller, a handy egg-timer (also used to remember to remove the teabag or close windows etc) and so on.
I started my first real alarm clock project in the time when arduino was not well known yet and so I used to program my Atmegas on register level. I even layouted my own stackable universal PCB for my microcontrollers (see left PCB in the picture below). I have some of them left in my electro corner as I thought I needed a lot of them - but then arduino crossed my way and they became quite obsolete. The PCB on the right side of this picture (usually stacked on the left PCB) is a breadboard-like PCB from elektor and contains some LEDs to show the sleep time, a piezzo buzzer and a button to set the time and stop the alarm.
This was a quite basic approach that already included the important feature that you can't set the alarm again for the next x minutes after an alarm (anti-snooze-feature). I wanted to avoid that I stand up, stop the alarm (while the brain still resides in a sleep mode) and set it again (because the mental strength module inside the brain has not booted up completely yet).
That project was quite effective but it lacked some other features that I needed a better display and human-machine-interface for.
In addition I used a cheap sound module (that is commonly not working reliably), amplifier module and speaker. So the whole thing became complex as you might see having a look at the wiring:
But not only the HW side, of course also the SW became quite messy as I wrote all the basic bit-banging SW on myself and my original SW architecture was not designed to handle all the features that came in step for step.
So in the end the system worked not reliably and there were a lot of not easily removable heisenbugs etc.
I thought that my dream to build the ultimate alarm clock has passed away forever...