Date/time data is parsed from the RMC NMEA string output by the GPS module over the USART. This is converted to local time according to an adjustable UTC offset. This offset is stored in eeprom so that it is retained after a power-cycle. The offset can be adjusted in half-hour increments from -12hrs to +12hrs.
After a sync, the time is set in the DS3234 RTC module which is referenced whenever the display is refreshed. The RTC has a battery back-up so that the time is retained with no power. The RTC is only re-set after a "successful" time sync from the GPS, so if there is no signal, the current time is not changed.
The schematic and PCB cad files were developed with KiCAD. The code was written in C and developed using Atom. All these files are included in the github repository.
This project served as my first attempt sourcing boards from a fabricator (previously I have etched them myself). This meant I was able to use SMD components (also a first) to reduce board size. I used OSH Park for board fab due to user-friendlieness. Next time I will try a different supplier (hopefully more local and at lower cost).
The project is actually an iteration on a similar project (rev_1) created in 2014. Rev_1 used single-sided hand-etched PCBs and a much more "rustic" enclosure. Rev_2 has a number of newer features and improvements, particularly in firmware.
Note, by default, the clock boots into a mode that displays date/time in ISO-8601 format, since the EPOCH time display mode isn't super practical and really just implemented to amuse myself.