This project is a GitHub-style contributions calendar that aggregates my activity across various computer science platforms. It provides a unified view of my contributions throughout the year, making it easy to explore my work across the websites I use regularly (or used to).
Year:
| Mon | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wed | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Fri | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Click on a square for details
How this works
Getting all the data and updating this page
- All the data displayed on this page is gathered through web scraping.
- Since I chose to host this project on GitHub Pages, I don't have a backend service that can receive HTTP requests and fetch fresh data from my web scraper.
- Instead, I store the scraped data as JSON embedded in this page's JavaScript. Updating the page is simply a matter of running the scraper, generating a new JSON file, and inserting it into the JavaScript file as plain text. This entire process is automated with Python.
- It's not the most elegant solution because it's somewhat brittle. For example, my Python script assumes that the JSON is always on the first line of the JavaScript file. Still, it's more than good enough for a small personal project.
So yes, the approach works—but it requires a dedicated machine to keep everything automated. At that point, I might as well just run a backend server, which would defeat the whole purpose of this somewhat "wacky" implementation.
The entire front end of this page was built using only vanilla JavaScript and CSS.
The web scraper is also available in this page's repository if you'd like to take a look.