A few months back I started working with someone who was a self-proclaimed holiday aficionado. After them showing me the top google result where they get their holiday knowledge from I proposed a better solution as the site had no style and I love doing remixes. Doing a little research on the subject of holidays, there are about 4 sites out there that seem to have most of these holidays listed with variations between them. When peeking into how these sites work, they all generate the pages on the server side therefore provide no API. With no API in place the first task at hand was getting the data and putting in somewhere that could be requested from an browser in its raw JSON form. A quick side note, when structuring holiday data there are two types of holidays, static ones that occur on the same day every year (such as Christmas on December 25th) and conditional holidays (like Thanksgiving, which occurs on the third Thursday of November). For the sake of simplicity I scrapped the entire year and figured I would deal with the computing of the conditionals at a later time.
With the data available via an API the front end work was able to begin. I set out creating a proof of concept that would render all of the holidays and allow for the data to be updated from the client side. With that working proof of concept, I then took my basic material card demo and integrated the holidays. I quickly determined that the urls that I had scrapped as the source for explaining the holiday were sometimes dead. When trying to programmatically determine if the links were valid I made the design decision to ditch the source url in favor of just opening a new tab with the holiday being searched on Google. Also when trying to get the descriptions for the holiday, I found that there was no consistent way to scrap the results as some of these holidays seemed to not exist (at least according to Google). This was frustrating, so to deal with it I added a flag that would allow for a person to flag a holiday as fake.
When a person wants to update a holiday, they just need to click on the menu which is represented by the three little dots on each card. A modal window will then appear allowing the user to update the details of the holiday.