***As charming as paper with the practicality of Google*** ![](https://www.youtube.com/embed/b_6jgsGsrCs?si=DDh1oM1jquxNH04B) ## The Idea ### What's wrong with Calendars? Paper calendars are nice to look at, easy to check and your flatmates can add to them too. I love being able to see what's coming up in my life **without being on my phone or laptop.** But as you get through the month, you can see fewer and fewer days ahead until the **calendar hardly serves its purpose**. While Google Calendar **lacks the analogue charm** of paper, it's also easy to use, automatically adds events you're invited to and seamlessly integrates with friends' calendars. In reality, it sucks to be stuck to a screen, but it's **hard to keep both of these up to date** at once and my paper calendar always ends up neglected. ### My concept So, I started a project to get the best of both worlds: a calendar which automatically stays up-to-date and relevant, but with all the charm of paper! ![[Paper.Journal.44.png]] ## Architecture Here's the overall architecture for a Raspberry Pi with eInk (Inky Impressions display): 1. On boot / button press, create a dictionary of Calendar events from Google Calendar API call, taking relevant metadata for plotting events. 2. Using today's date, calculate the date of the previous Monday. 3. Plot the calendar from the previous Monday to 3 or 4 (you can choose) weeks later 4. From the events dictionary, plot the events on the calendar ![[IMG_90EA21863DC1-1.jpeg]] ### 📆 + 💻 = e-Ink E-ink displays are the classic Kindle screen, renowned for their paper-like interface . They are low-power 'screens', which can display information, even after you've turned them off. Despite starting with the classic Waveshare displays, I switched to Inky displays, settling on the 7.3" 7-colour Inky Impressions e-ink display for the added colour options and leagues better documentation! ### iFrame, Selenium or Pillow? Most of why this project has taken so long is contained in the above question. There's a few different methods of obtaining the image of the Google Calendar, but maintaining privacy, design control and displaying on e-Ink all provided challenges. Here's a quick run down: **iFrame with html2img** - The Google Calendar iframe has great customisation but I can't change it to a 4-week view. It's month view or week view only. Also, to use the iframe, either I have to get Selenium to log into my personal Google account every time I refresh the calendar or I make my personal calendar public on the internet, including on Google Search. No thanks. **Calendar JS Library** - This was actually not so bad and I might revisit it sometime. The biggest problem I found was just that it's a less robust process. Relying on loading a dynamic site and grabbing a screenshot it is pretty fragile, but also a pain to prototype between different OSs. **Pillow** - After trying (and not enjoying) the above options, I implemented a third version using Pillow. It's well-supported on Python (yay!) and allows all the customisation I could ever want (albeit a little painful). While I was initially resistant to make this into a UI design project, I would say it's been worth it. ## The Results (so far!) I'm still working on a week-view, but the calendar looks great already! ![[inkycalendar1.gif]] I'm still working on this project - check in soon / follow me on Twitter @mireyburn for updates. --- [![[Pasted image 20240110213631.png | 100]]](<https://github.com/mimireyburn/inky-calendar>)