diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..40a2387
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,7 @@
+# .github/dependabot.yml
+version: 2
+updates:
+  - package-ecosystem: 'bundler'
+    directory: '/'
+    schedule:
+      interval: 'daily'
diff --git a/.readthedocs.yml b/.readthedocs.yml
index b3dd82e..70c0baf 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -7,10 +7,10 @@ version: 2
 
 # Set the version of Python and other tools you might need
 build:
-  os: ubuntu-22.04
+  os: ubuntu-24.04
   commands:
     - gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409b6b1796c275462a1703113804bb82d39dc0e3 7d2baf1cf37b13e2069d6956105bd0e739499bdb && curl -sSL https://get.rvm.io | bash -s stable
-    - ~/.rvm/bin/rvm autolibs disable && ~/.rvm/bin/rvm install ruby 3.1.2
-    - PATH="$HOME/.rvm/rubies/ruby-3.1.2/bin:$PATH" gem install bundler
-    - PATH="$HOME/.rvm/rubies/ruby-3.1.2/bin:$PATH" bundle install
-    - PATH="$HOME/.rvm/rubies/ruby-3.1.2/bin:$PATH" bundle exec jekyll build --destination _readthedocs/html --baseurl $(echo -n "$READTHEDOCS_CANONICAL_URL" | cut -d '/' -f 4-)
\ No newline at end of file
+    - ~/.rvm/bin/rvm autolibs disable && ~/.rvm/bin/rvm install ruby 3.4.3
+    - PATH="$HOME/.rvm/rubies/ruby-3.4.3/bin:$PATH" gem install bundler
+    - PATH="$HOME/.rvm/rubies/ruby-3.4.3/bin:$PATH" bundle install
+    - PATH="$HOME/.rvm/rubies/ruby-3.4.3/bin:$PATH" bundle exec jekyll build --destination _readthedocs/html --baseurl $(echo -n "$READTHEDOCS_CANONICAL_URL" | cut -d '/' -f 4-)
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..fcc4994
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,13 @@
+FROM ruby:3.4-slim
+
+RUN gem install bundler
+
+COPY . /src
+WORKDIR /src
+
+RUN apt-get update -y
+RUN apt-get install ruby-dev -y
+RUN apt-get install make gcc g++ -y
+RUN bundle install
+RUN cat Gemfile.lock
+ENTRYPOINT bundle exec jekyll serve
diff --git a/Gemfile b/Gemfile
index 13a360e..0838a70 100644
--- a/Gemfile
+++ b/Gemfile
@@ -17,16 +17,16 @@ gem "github-pages", group: :jekyll_plugins
 
 # If you have any plugins, put them here!
 group :jekyll_plugins do
-  gem "jekyll-feed", "~> 0.13"
-  gem "jekyll-include-cache"
-  gem "jekyll-sitemap"
+  gem "jekyll-feed", "~> 0.17"
+  gem "jekyll-include-cache", "~> 0.2"
+  gem "jekyll-sitemap", "~> 1.4"
 end
 
 # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
 gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
 
 # Performance-booster for watching directories on Windows
-gem "wdm", "~> 0.1.0" if Gem.win_platform?
+gem "wdm", "~> 0.2.0" if Gem.win_platform?
 
 
 gem "webrick", "~> 1.8"
diff --git a/Gemfile.lock b/Gemfile.lock
index a7b86cc..3f198c5 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,52 +1,67 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    activesupport (7.1.3)
+    activesupport (8.0.2)
       base64
+      benchmark (>= 0.3)
       bigdecimal
-      concurrent-ruby (~> 1.0, >= 1.0.2)
+      concurrent-ruby (~> 1.0, >= 1.3.1)
       connection_pool (>= 2.2.5)
       drb
       i18n (>= 1.6, < 2)
+      logger (>= 1.4.2)
       minitest (>= 5.1)
-      mutex_m
-      tzinfo (~> 2.0)
-    addressable (2.8.6)
-      public_suffix (>= 2.0.2, < 6.0)
+      securerandom (>= 0.3)
+      tzinfo (~> 2.0, >= 2.0.5)
+      uri (>= 0.13.1)
+    addressable (2.8.7)
+      public_suffix (>= 2.0.2, < 7.0)
     base64 (0.2.0)
-    bigdecimal (3.1.6)
+    benchmark (0.4.0)
+    bigdecimal (3.1.9)
     coffee-script (2.4.1)
       coffee-script-source
       execjs
     coffee-script-source (1.12.2)
     colorator (1.1.0)
-    commonmarker (0.23.10)
-    concurrent-ruby (1.2.3)
-    connection_pool (2.4.1)
-    dnsruby (1.70.0)
+    commonmarker (0.23.11)
+    concurrent-ruby (1.3.5)
+    connection_pool (2.5.1)
+    csv (3.3.4)
+    dnsruby (1.72.4)
+      base64 (~> 0.2.0)
+      logger (~> 1.6.5)
       simpleidn (~> 0.2.1)
-    drb (2.2.0)
-      ruby2_keywords
+    drb (2.2.1)
     em-websocket (0.5.3)
       eventmachine (>= 0.12.9)
       http_parser.rb (~> 0)
     ethon (0.16.0)
       ffi (>= 1.15.0)
     eventmachine (1.2.7)
-    execjs (2.9.1)
-    faraday (2.9.0)
-      faraday-net_http (>= 2.0, < 3.2)
-    faraday-net_http (3.1.0)
-      net-http
-    ffi (1.16.3)
+    execjs (2.10.0)
+    faraday (2.13.0)
+      faraday-net_http (>= 2.0, < 3.5)
+      json
+      logger
+    faraday-net_http (3.4.0)
+      net-http (>= 0.5.0)
+    ffi (1.17.2-aarch64-linux-gnu)
+    ffi (1.17.2-aarch64-linux-musl)
+    ffi (1.17.2-arm-linux-gnu)
+    ffi (1.17.2-arm-linux-musl)
+    ffi (1.17.2-arm64-darwin)
+    ffi (1.17.2-x86_64-darwin)
+    ffi (1.17.2-x86_64-linux-gnu)
+    ffi (1.17.2-x86_64-linux-musl)
     forwardable-extended (2.6.0)
     gemoji (4.1.0)
-    github-pages (231)
+    github-pages (232)
       github-pages-health-check (= 1.18.2)
-      jekyll (= 3.9.5)
+      jekyll (= 3.10.0)
       jekyll-avatar (= 0.8.0)
       jekyll-coffeescript (= 1.2.2)
-      jekyll-commonmark-ghpages (= 0.4.0)
+      jekyll-commonmark-ghpages (= 0.5.1)
       jekyll-default-layout (= 0.1.5)
       jekyll-feed (= 0.17.0)
       jekyll-gist (= 1.5.0)
@@ -83,9 +98,10 @@ GEM
       liquid (= 4.0.4)
       mercenary (~> 0.3)
       minima (= 2.5.1)
-      nokogiri (>= 1.13.6, < 2.0)
+      nokogiri (>= 1.16.2, < 2.0)
       rouge (= 3.30.0)
       terminal-table (~> 1.4)
+      webrick (~> 1.8)
     github-pages-health-check (1.18.2)
       addressable (~> 2.3)
       dnsruby (~> 1.60)
@@ -96,11 +112,12 @@ GEM
       activesupport (>= 2)
       nokogiri (>= 1.4)
     http_parser.rb (0.8.0)
-    i18n (1.14.1)
+    i18n (1.14.7)
       concurrent-ruby (~> 1.0)
-    jekyll (3.9.5)
+    jekyll (3.10.0)
       addressable (~> 2.4)
       colorator (~> 1.0)
+      csv (~> 3.0)
       em-websocket (~> 0.5)
       i18n (>= 0.7, < 2)
       jekyll-sass-converter (~> 1.0)
@@ -111,6 +128,7 @@ GEM
       pathutil (~> 0.9)
       rouge (>= 1.7, < 4)
       safe_yaml (~> 1.0)
+      webrick (>= 1.0)
     jekyll-avatar (0.8.0)
       jekyll (>= 3.0, < 5.0)
     jekyll-coffeescript (1.2.2)
@@ -118,9 +136,9 @@ GEM
       coffee-script-source (~> 1.12)
     jekyll-commonmark (1.4.0)
       commonmarker (~> 0.22)
-    jekyll-commonmark-ghpages (0.4.0)
-      commonmarker (~> 0.23.7)
-      jekyll (~> 3.9.0)
+    jekyll-commonmark-ghpages (0.5.1)
+      commonmarker (>= 0.23.7, < 1.1.0)
+      jekyll (>= 3.9, < 4.0)
       jekyll-commonmark (~> 1.4.0)
       rouge (>= 2.0, < 5.0)
     jekyll-default-layout (0.1.5)
@@ -206,41 +224,53 @@ GEM
       gemoji (>= 3, < 5)
       html-pipeline (~> 2.2)
       jekyll (>= 3.0, < 5.0)
+    json (2.10.2)
     kramdown (2.4.0)
       rexml
     kramdown-parser-gfm (1.1.0)
       kramdown (~> 2.0)
     liquid (4.0.4)
-    listen (3.8.0)
+    listen (3.9.0)
       rb-fsevent (~> 0.10, >= 0.10.3)
       rb-inotify (~> 0.9, >= 0.9.10)
+    logger (1.6.6)
     mercenary (0.3.6)
-    mini_portile2 (2.8.8)
     minima (2.5.1)
       jekyll (>= 3.5, < 5.0)
       jekyll-feed (~> 0.9)
       jekyll-seo-tag (~> 2.1)
-    minitest (5.22.2)
-    mutex_m (0.2.0)
-    net-http (0.4.1)
+    minitest (5.25.5)
+    net-http (0.6.0)
       uri
-    nokogiri (1.18.4)
-      mini_portile2 (~> 2.8.2)
+    nokogiri (1.18.7-aarch64-linux-gnu)
+      racc (~> 1.4)
+    nokogiri (1.18.7-aarch64-linux-musl)
+      racc (~> 1.4)
+    nokogiri (1.18.7-arm-linux-gnu)
+      racc (~> 1.4)
+    nokogiri (1.18.7-arm-linux-musl)
+      racc (~> 1.4)
+    nokogiri (1.18.7-arm64-darwin)
+      racc (~> 1.4)
+    nokogiri (1.18.7-x86_64-darwin)
+      racc (~> 1.4)
+    nokogiri (1.18.7-x86_64-linux-gnu)
+      racc (~> 1.4)
+    nokogiri (1.18.7-x86_64-linux-musl)
       racc (~> 1.4)
     octokit (4.25.1)
       faraday (>= 1, < 3)
       sawyer (~> 0.9)
     pathutil (0.16.2)
       forwardable-extended (~> 2.6)
-    public_suffix (5.0.4)
+    public_suffix (5.1.1)
     racc (1.8.1)
     rb-fsevent (0.11.2)
-    rb-inotify (0.10.1)
+    rb-inotify (0.11.1)
       ffi (~> 1.0)
-    rexml (3.3.9)
+    rexml (3.4.1)
     rouge (3.30.0)
-    ruby2_keywords (0.0.5)
-    rubyzip (2.3.2)
+    rubyzip (2.4.1)
     safe_yaml (1.0.5)
     sass (3.7.4)
       sass-listen (~> 4.0.0)
@@ -250,33 +280,37 @@ GEM
     sawyer (0.9.2)
       addressable (>= 2.3.5)
       faraday (>= 0.17.3, < 3)
-    simpleidn (0.2.1)
-      unf (~> 0.1.4)
+    securerandom (0.4.1)
+    simpleidn (0.2.3)
     terminal-table (1.8.0)
       unicode-display_width (~> 1.1, >= 1.1.1)
     typhoeus (1.4.1)
       ethon (>= 0.9.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
-    unf (0.1.4)
-      unf_ext
-    unf_ext (0.0.9.1)
     unicode-display_width (1.8.0)
-    uri (0.13.0)
-    webrick (1.8.2)
+    uri (1.0.3)
+    webrick (1.9.1)
 
 PLATFORMS
-  ruby
+  aarch64-linux-gnu
+  aarch64-linux-musl
+  arm-linux-gnu
+  arm-linux-musl
+  arm64-darwin
+  x86_64-darwin
+  x86_64-linux-gnu
+  x86_64-linux-musl
 
 DEPENDENCIES
   github-pages
-  jekyll-feed (~> 0.13)
-  jekyll-include-cache
+  jekyll-feed (~> 0.17)
+  jekyll-include-cache (~> 0.2)
   jekyll-redirect-from
-  jekyll-sitemap
+  jekyll-sitemap (~> 1.4)
   kramdown-parser-gfm
   tzinfo-data
   webrick (~> 1.8)
 
 BUNDLED WITH
-   2.3.6
+   2.6.8
diff --git a/README.md b/README.md
index 4876495..c861870 100644
--- a/README.md
+++ b/README.md
@@ -4,16 +4,39 @@ Main Zarr website hosted at https://zarr.dev
 
 ## Building
 
+To build the webpage, you will need a working Ruby installation.
+
+If you are on Ubuntu and want to install the requirements locally,
+follow the steps below as root. Alternatively, see the Dockerfile
+for an alternative.
+
+1. Install `rvm`.
+
+```
+gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409b6b1796c275462a1703113804bb82d39dc0e3 7d2baf1cf37b13e2069d6956105bd0e739499bdb && curl -sSL https://get.rvm.io | bash -s stable
+```
+
+2. Install Ruby
+```
+rvm autolibs disable && rvm install ruby 3.4.3
+```
+
+Note that if the above fails, you may need to specify the path for the `rvm` command in your system.
+
+3. Install `bundler`
+
+```
+gem install bundler
+```
+
+4. In the root of the repository, run:
+
 ```
-conda create -n zarr.dev -c conda-forge rb-bundler c-compiler compilers cxx-compiler
-conda activate zarr.dev
 bundle install
-bundle exec jekyll serve
 ```
 
-Note: using conda-forge packages directly failed on eventmachine (Dec 2021):
+5. Build and serve the site locally:
+
 ```
-conda create -n zarr.dev -c conda-forge rb-jekyll rb-bundler rb-public_suffix rb-minima rb-jekyll-feed
-conda activate zarr.dev
 bundle exec jekyll serve
 ```