diff --git a/requirements/base.in b/requirements/base.in
index 1d5c103d1dd94570236659e0da9495ffd32695a7..c106afce04f1470d569cfbc3d35b708768b26c1b 100644
--- a/requirements/base.in
+++ b/requirements/base.in
@@ -12,3 +12,5 @@ requests
 ics
 arrow
 sentry-sdk
+nbconvert
+traitlets
diff --git a/requirements/base.txt b/requirements/base.txt
index cb3646dd54edcb2771b227a58c9d04072e502fa6..a8d63b9075d76df3fdb643ef978a9c3d8e562ea3 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -6,11 +6,15 @@
 #
 arrow==0.14.7             # via -r base.in, ics
 asgiref==3.2.10           # via django
+async-generator==1.10     # via nbclient
+attrs==20.2.0             # via jsonschema
 beautifulsoup4==4.8.2     # via wagtail
+bleach==3.1.5             # via nbconvert
 certifi==2020.6.20        # via requests, sentry-sdk
 cffi==1.14.2              # via cryptography
 chardet==3.0.4            # via requests
 cryptography==3.1         # via josepy, mozilla-django-oidc, pyopenssl
+defusedxml==0.6.0         # via nbconvert
 django-environ==0.4.5     # via -r base.in
 django-extensions==3.0.8  # via -r base.in
 django-filter==2.3.0      # via wagtail
@@ -22,40 +26,62 @@ django-treebeard==4.3.1   # via wagtail
 django==3.1.1             # via django-filter, django-redis, django-settings-export, django-taggit, django-treebeard, djangorestframework, mozilla-django-oidc, wagtail
 djangorestframework==3.11.1  # via wagtail
 draftjs-exporter==2.1.7   # via wagtail
+entrypoints==0.3          # via nbconvert
 et-xmlfile==1.0.1         # via openpyxl
 html5lib==1.1             # via wagtail
 ics==0.7                  # via -r base.in
 idna==2.10                # via requests
+ipython-genutils==0.2.0   # via nbformat, traitlets
 jdcal==1.4.1              # via openpyxl
+jinja2==2.11.2            # via nbconvert
 josepy==1.4.0             # via mozilla-django-oidc
+jsonschema==3.2.0         # via nbformat
+jupyter-client==6.1.7     # via nbclient
+jupyter-core==4.6.3       # via jupyter-client, nbconvert, nbformat
+jupyterlab-pygments==0.1.1  # via nbconvert
 l18n==2018.5              # via wagtail
+markupsafe==1.1.1         # via jinja2
+mistune==0.8.4            # via nbconvert
 mozilla-django-oidc==1.2.4  # via pirates
-numpy==1.19.1             # via opencv-python
+nbclient==0.5.0           # via nbconvert
+nbconvert==6.0.2          # via -r base.in
+nbformat==5.0.7           # via nbclient, nbconvert
+nest-asyncio==1.4.0       # via nbclient
+numpy==1.19.2             # via opencv-python
 opencv-python==4.4.0.42   # via -r base.in
 openpyxl==3.0.5           # via tablib
+packaging==20.4           # via bleach
+pandocfilters==1.4.2      # via nbconvert
 pillow==7.2.0             # via wagtail
 pirates==0.3.1            # via -r base.in
 psycopg2-binary==2.8.6    # via -r base.in
 pyasn1-modules==0.2.8     # via python-ldap
 pyasn1==0.4.8             # via pyasn1-modules, python-ldap
 pycparser==2.20           # via cffi
+pygments==2.7.0           # via jupyterlab-pygments, nbconvert
 pyopenssl==19.1.0         # via josepy
-python-dateutil==2.8.1    # via arrow, ics
+pyparsing==2.4.7          # via packaging
+pyrsistent==0.17.3        # via jsonschema
+python-dateutil==2.8.1    # via arrow, ics, jupyter-client
 python-ldap==3.3.1        # via pirates
 pytz==2020.1              # via django, django-modelcluster, l18n
+pyzmq==19.0.2             # via jupyter-client
 redis==3.5.3              # via django-redis
 requests==2.24.0          # via -r base.in, mozilla-django-oidc, wagtail
-sentry-sdk==0.17.4        # via -r base.in
-six==1.15.0               # via cryptography, html5lib, ics, josepy, l18n, mozilla-django-oidc, pyopenssl, python-dateutil
+sentry-sdk==0.17.5        # via -r base.in
+six==1.15.0               # via bleach, cryptography, html5lib, ics, josepy, jsonschema, l18n, mozilla-django-oidc, packaging, pyopenssl, python-dateutil
 soupsieve==2.0.1          # via beautifulsoup4
 sqlparse==0.3.1           # via django
 tablib[xls,xlsx]==2.0.0   # via wagtail
 tatsu==5.5.0              # via ics
+testpath==0.4.4           # via nbconvert
+tornado==6.0.4            # via jupyter-client
+traitlets==5.0.4          # via -r base.in, jupyter-client, jupyter-core, nbclient, nbconvert, nbformat
 unidecode==1.1.1          # via wagtail
 urllib3==1.25.10          # via requests, sentry-sdk
 wagtail-metadata==3.3.0   # via -r base.in
 wagtail==2.10.1           # via -r base.in, wagtail-metadata
-webencodings==0.5.1       # via html5lib
+webencodings==0.5.1       # via bleach, html5lib
 whitenoise==5.2.0         # via -r base.in
 willow==1.4               # via wagtail
 xlrd==1.2.0               # via tablib