This looks awesome! Seems like a great idea - I'm curious - do you download the full calendar first into a SQLite DB file and then let a user execute queries? SQLite has a "virtual table" feature: https://www3.sqlite.org/vtab.html that could allow "live" queries against the calendar APIs, though my guess is that would be too slow to make sense.

Interesting, hadn't seen the virtual table feature of SQLite. I'd have to do some benchmarking but that could be worth switching to in future for perhaps getting fresher data.

Yes, at the moment there's a batch job to download your calendars and convert them into a SQLite DB. Then, all queries are done directly on that concrete DB (read only).

Originally I was using https://github.com/dolthub/go-mysql-server which is quite similar to the virtual table feature (you just provide a struct which implements some getter methods). Unfortunately I found it a bit slow though (it had to call back into my table many times for even simple queries). Might just be a problem with that implementation and not a limitation of virtual tables themselves so thanks for pointing it out!