So, at university me and a few friends wanted to have a joint calendar - so why not have it dynamic.
Durham University allows an ical export, and some other unis may. This is a pre-requisite for this. This therefore works for Durham University (at least for academic year 2025-26, it won't be changed after 2027 when I graduate, so lets hope CIS / Student Registry don't change things around!) This tool is not associated or endorsed by Durham University.
This project can work locally, or in AWS Lambda.
You must have NodeJS installed. This was developed in v20.11.0, but should work in v20 or later - unsure about prior versions of node. You must also have npm installed.
Because I am running this on AWS personally and not on my local computer, I needed to normalise time zones to whatever the UK time is, accounting for time zones.
Therefore, in line 1 of commands/termDetails.js
, I set const timeZone = "Europe/London";
- you may need to change this.
Note that this works locally on a computer in the UK time zone, or on AWS in eu-west-2
- timezones may be screwed up if you are non-UK so please change it accordingly.
-
npm install
to install dependencies. -
Configure - check below in the config section
-
node local.js
to run locally. By default, it will run on port3030
. To change this, please go to line one oflocal.js
and change the port - it is common sense where
Please refer to AWS set up docs
The config.json
file looks like:
{
"people":{
"personOne":"[LinkToICS]"
},
"terms":{
"michaelmas":{
"start":"07-10-2024",
"end":"13-12-2024"
}
}
}
As an example, personOne
is the key (so the person name displayed), and [LinkToICS]
is their corresponding string, which is an .ics
calendar (.ical
) is accepted. Must be a web calendar.
Add rows underneath this personOne
for other people. A maximum of 10 people are permitted. A minimum of 1 person is required
As an example, michaelmas
is the key (so the term name displayed), and we have an object corresponding to it, with a start
date and an end
date, both
must be in DD-MM-YYYY
. Note that only Mondays to Fridays are displayed.
Add rows underneath this michaelmas
for other terms. A minimum of 1 term is required