diff --git a/.docs/images/hero.png b/.docs/images/hero.png
new file mode 100644
index 0000000000000000000000000000000000000000..a972e6cc48f4110c9a186cf789c077ad97f7a70a
Binary files /dev/null and b/.docs/images/hero.png differ
diff --git a/.docs/images/screenshots/feature-cloud.png b/.docs/images/screenshots/feature-cloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..586a32efb9d62c32bb078bd574bf99eb3f7d50a7
Binary files /dev/null and b/.docs/images/screenshots/feature-cloud.png differ
diff --git a/.docs/images/screenshots/feature-identifiers.png b/.docs/images/screenshots/feature-identifiers.png
new file mode 100644
index 0000000000000000000000000000000000000000..c111a843b4be483bf32ac1a3735249ace15917b6
Binary files /dev/null and b/.docs/images/screenshots/feature-identifiers.png differ
diff --git a/.docs/images/screenshots/feature-jupyter.png b/.docs/images/screenshots/feature-jupyter.png
new file mode 100644
index 0000000000000000000000000000000000000000..dcbd0cb726695c21f22bb2dfe49bb8a695465087
Binary files /dev/null and b/.docs/images/screenshots/feature-jupyter.png differ
diff --git a/.docs/images/screenshots/feature-search.png b/.docs/images/screenshots/feature-search.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b0671e4ce56604449f19fff146079cd8e0c9ad3
Binary files /dev/null and b/.docs/images/screenshots/feature-search.png differ
diff --git a/.docs/index.md b/.docs/index.md
index 0ac7b018dff1a0422f69d9661f67ba2d762920a6..bd57d84cf4e8f75b023bdab2feba9fbb59baba0e 100644
--- a/.docs/index.md
+++ b/.docs/index.md
@@ -1,12 +1,14 @@
 ---
-title: Home
+template: home.html
 author: Martin Weise
 hide:
 - navigation
+- toc
+social:
+  cards_layout_options:
+    title: Documentation that simply works
 ---
 
-# DBRepo: A Database Repository to Support Research
-
 ## Problem Statement
 
 Digital repositories see themselves more frequently encountered with the problem of making databases accessible in their
@@ -14,9 +16,6 @@ collection. Challenges revolve around organizing, searching and retrieving conte
 constitute a major technical burden as their internal representation greatly differs from static documents most digital
 repositories are designed for.
 
-[System Description](./system){ .action-button .md-button .md-button--secondary }
-[How to use](./usage-overview){ .action-button .md-button .md-button--primary }
-
 ## Application Areas
 
 We present a database repository system that allows researchers to ingest data into a central, versioned repository
diff --git a/.docs/overrides/home.html b/.docs/overrides/home.html
new file mode 100644
index 0000000000000000000000000000000000000000..65612c8e08aef5a522d2f51fb401bf951629e417
--- /dev/null
+++ b/.docs/overrides/home.html
@@ -0,0 +1,164 @@
+{% extends "main.html" %}
+
+<!-- Render hero under tabs -->
+{% block tabs %}
+{{ super() }}
+
+<!-- Additional styles for landing page -->
+<style>
+
+    /* Application header should be static for the landing page */
+    .md-header {
+        position: initial;
+    }
+
+    .md-content > article h1 {
+        display: none;
+        visibility: hidden;
+    }
+
+    /*!* Remove spacing, as we cannot hide it completely *!*/
+    .md-main__inner {
+        margin-top: 0;
+    }
+
+    /*!* Hide main content for now *!*/
+    /*.md-content {*/
+    /*  display: none;*/
+    /*}*/
+
+    /*!* Hide table of contents *!*/
+    /*@media screen and (min-width: 60em) {*/
+    /*  .md-sidebar--secondary {*/
+    /*    display: none;*/
+    /*  }*/
+    /*}*/
+
+    /*!* Hide navigation *!*/
+    /*@media screen and (min-width: 76.25em) {*/
+    /*  .md-sidebar--primary {*/
+    /*    display: none;*/
+    /*  }*/
+    /*}*/
+</style>
+
+<!-- Hero for landing page -->
+<section class="mdx-container">
+    <div class="md-grid md-typeset">
+        <div class="mdx-hero">
+
+            <!-- Hero image -->
+            <div class="mdx-hero__image">
+                <img
+                        src="images/hero.png"
+                        alt=""
+                        class="img-border"
+                        width="100%"
+                        draggable="false"/>
+            </div>
+
+            <!-- Hero content -->
+            <div class="mdx-hero__content" style="margin-top:24px;margin-bottom:24px;">
+                <h1>DBRepo: A Database Repository to Support Research</h1>
+                <p>Set up in a few minutes.</p>
+                <a
+                        href="{{ page.next_page.url | url }}"
+                        title="{{ page.next_page.title | e }}"
+                        style="margin-right: 10px;"
+                        class="action-button md-button md-button--primary">
+                    Get started
+                </a>
+                <a
+                        href="{{ 'insiders/' | url }}"
+                        title="Material for MkDocs Insiders"
+                        class="action-button md-button md-button--secondary">
+                    Learn more
+                </a>
+            </div>
+        </div>
+    </div>
+</section>
+<section>
+    <div class="md-grid md-typeset">
+        <div class="mdx-spotlight">
+            <figure class="mdx-spotlight__feature">
+                <a href="../system-services-search/" tabindex="-1" title="Built-in search">
+                    <img src="images/screenshots/feature-search.png"
+                         alt="Built-in search" loading="lazy"
+                         width="500"
+                         height="327">
+                </a>
+                <figcaption class="md-typeset">
+                    <h2>Built-in search</h2>
+                    <p>DBRepo makes your dataset <strong>searchable</strong> without extra effort: most metadata is
+                        <strong>generated</strong> automatically for data in your databases. The fast and powerful
+                        OpenSearch database allows a <strong>fast retrieval</strong> of any information.</p>
+                    <p>Adding <strong>semantic mapping</strong> through a suggestion-feature, allows machines to
+                        properly understand the context of your data.</p>
+                    <p>
+                        <a href="../system-services-search/" aria-label="Built-in search">Learn more</a>
+                    </p>
+                </figcaption>
+            </figure>
+            <figure class="mdx-spotlight__feature">
+                <a href="../system-services-metadata/" tabindex="-1" title="Built-in search">
+                    <img src="images/screenshots/feature-identifiers.png"
+                         alt="Built-in search" loading="lazy"
+                         width="500"
+                         height="327">
+                </a>
+                <figcaption class="md-typeset">
+                    <h2>Citable datasets</h2>
+                    <p>Adopting the recommendations of the <strong>RDA-WGDC</strong>, arbitrary subsets can be
+                        precisely, <strong>persistently identified</strong> using system-versioned tables of MariaDB and
+                        the <strong>DOI</strong> schema.</p>
+                    <p>External systems i.e. <strong>metadata harvesters</strong> (OpenAIRE, Google Datasets) can access
+                        these datasets through OAI-PMH, JSON-LD and <strong>FAIR Signposting</strong> protocols.</p>
+                    <p>
+                        <a href="../system-services-metadata/" aria-label="Built-in search">Learn more</a>
+                    </p>
+                </figcaption>
+            </figure>
+            <figure class="mdx-spotlight__feature">
+                <a href="../usage-python/" tabindex="-1" title="Built-in search">
+                    <img src="images/screenshots/feature-jupyter.png"
+                         alt="Built-in search" loading="lazy"
+                         width="500"
+                         height="327">
+                </a>
+                <figcaption class="md-typeset">
+                    <h2>Powerful API for Data Scientists</h2>
+                    <p>With our <strong>strongly typed</strong> Python Library, Data Scientists can import, export and
+                        <strong>work with data</strong> from Jupyter Notebook or Python script, optionally using
+                        <strong>Pandas DataFrames</strong>.
+                    </p>
+                    <p>For example: the <strong>AMQP API Client</strong> can collect continuous data from edge devices
+                        like sensors and store them <strong>asynchronous</strong> in DBRepo.</p>
+                    <p>
+                        <a href="../usage-python/" aria-label="Built-in search">Learn more</a>
+                    </p>
+                </figcaption>
+            </figure>
+            <figure class="mdx-spotlight__feature">
+                <a href="../deployment-helm/" tabindex="-1" title="Built-in search">
+                    <img src="images/screenshots/feature-cloud.png"
+                         alt="Built-in search" loading="lazy"
+                         width="500"
+                         height="327">
+                </a>
+                <figcaption class="md-typeset">
+                    <h2>Cloud Native</h2>
+                    <p>Our <strong>lightweight</strong> Helm chart allows for installations on <strong>any cloud
+                        provider</strong> that has an underlying PV storage provider. DBRepo can be installed from the
+                        Artifacthub repository.</p>
+                    <p>Databases are managed as <strong>MariaDB Galera</strong> Cluster with high degree of replication,
+                        ensuring your data is always <strong>accessible</strong>.</p>
+                    <p>
+                        <a href="../deployment-helm/" aria-label="Built-in search">Learn more</a>
+                    </p>
+                </figcaption>
+            </figure>
+        </div>
+    </div>
+</section>
+{% endblock %}
diff --git a/.docs/overrides/main.html b/.docs/overrides/main.html
deleted file mode 100644
index 59631a600e66098e4224067117f8dc6b89c315db..0000000000000000000000000000000000000000
--- a/.docs/overrides/main.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends "base.html" %}
-
-{% block announce %}
-<label for="version">Version</label>
-<select style="margin-left:8px;" id="version" name="version" onchange="switchVersion(this.options[this.selectedIndex].value)">
-    <option value="latest">latest</option>
-    <option value="1.4.2">1.4.2</option>
-    <option value="1.4.1">1.4.1</option>
-    <option value="1.4.0">1.4.0</option>
-    <option value="1.3.0">1.3.0</option>
-</select>
-{% endblock %}
diff --git a/.docs/scripts/extra.js b/.docs/scripts/extra.js
deleted file mode 100644
index 2360d0d2db8579cfbd71d6077fe894cc46056c61..0000000000000000000000000000000000000000
--- a/.docs/scripts/extra.js
+++ /dev/null
@@ -1,14 +0,0 @@
-function getVersion() {
-    const segments = location.pathname.split('/');
-    if (segments.length > 4 && (segments[3].match(/[0-9]\.[0-9]\.[0-9]/g) || segments[3] == 'latest')) {
-        console.debug('version', segments[3]);
-        return segments[3];
-    }
-    console.debug('default version', '__APPVERSION__');
-    return '__APPVERSION__';
-}
-function switchVersion(value) {
-    if (!value) { return }
-    this.location.href = location.protocol + '//' + location.host + '/infrastructures/dbrepo/' + value + '/';
-}
-document.getElementById("version").value = getVersion();
\ No newline at end of file
diff --git a/.docs/stylesheets/.sass-cache/04e8358553d0156a67b95297c054a24cd7eab863/_colors.scssc b/.docs/stylesheets/.sass-cache/04e8358553d0156a67b95297c054a24cd7eab863/_colors.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..de13f4de6f248642ae9aa84dbd05890d096fb628
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/04e8358553d0156a67b95297c054a24cd7eab863/_colors.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/04e8358553d0156a67b95297c054a24cd7eab863/_typeset.scssc b/.docs/stylesheets/.sass-cache/04e8358553d0156a67b95297c054a24cd7eab863/_typeset.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..f6a80da3534c65beab6b28b85ea0a3a10ee15266
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/04e8358553d0156a67b95297c054a24cd7eab863/_typeset.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/_config.scssc b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/_config.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..20fac36e42b9c065be8d5e1e50ebd22c4e821fdd
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/_config.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/custom.scssc b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/custom.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..ee214c5de92c28b3cbcb078e4d2aa2d2450a4b32
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/custom.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/main.scssc b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/main.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..ec1210c17ed880a36d713cdf087f2134f3afaee2
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/main.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/palette.scssc b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/palette.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..7f71c61f4d4b2e986bb266940ac47ca07d60a0b3
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/10990fa183107f4149f38216a4d00fe324a8131e/palette.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/2c2cf16e0f132dd6db83c98c5ec5508783194a8a/_hero.scssc b/.docs/stylesheets/.sass-cache/2c2cf16e0f132dd6db83c98c5ec5508783194a8a/_hero.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..ce4a196a7c8a18ad198a6738bde9f253e27559fd
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/2c2cf16e0f132dd6db83c98c5ec5508783194a8a/_hero.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/bfcb905bbd9d3baa11ae35b689811451966d11bf/_accent.scssc b/.docs/stylesheets/.sass-cache/bfcb905bbd9d3baa11ae35b689811451966d11bf/_accent.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..5edd0c57d74b636ef1f7b2f4cea20a558105c465
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/bfcb905bbd9d3baa11ae35b689811451966d11bf/_accent.scssc differ
diff --git a/.docs/stylesheets/.sass-cache/bfcb905bbd9d3baa11ae35b689811451966d11bf/_scheme.scssc b/.docs/stylesheets/.sass-cache/bfcb905bbd9d3baa11ae35b689811451966d11bf/_scheme.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..1ad33e4220951570b80a301e336f7a390c5b7314
Binary files /dev/null and b/.docs/stylesheets/.sass-cache/bfcb905bbd9d3baa11ae35b689811451966d11bf/_scheme.scssc differ
diff --git a/.docs/stylesheets/_config.scss b/.docs/stylesheets/_config.scss
new file mode 100644
index 0000000000000000000000000000000000000000..859fe38e70821f3227af8e2d9b6f1ce04bfbaec6
--- /dev/null
+++ b/.docs/stylesheets/_config.scss
@@ -0,0 +1,20 @@
+// ----------------------------------------------------------------------------
+// Variables: breakpoints
+// ----------------------------------------------------------------------------
+
+// Device-specific breakpoints
+$break-devices: (
+  mobile: (
+    portrait:  px2em(220px)  px2em(479.75px),
+    landscape: px2em(480px)  px2em(719.75px)
+  ),
+  tablet: (
+    portrait:  px2em(720px)  px2em(959.75px),
+    landscape: px2em(960px)  px2em(1219.75px)
+  ),
+  screen: (
+    small:     px2em(1220px) px2em(1599.75px),
+    medium:    px2em(1600px) px2em(1999.75px),
+    large:     px2em(2000px)
+  )
+);
\ No newline at end of file
diff --git a/.docs/stylesheets/custom.css b/.docs/stylesheets/custom.css
new file mode 100644
index 0000000000000000000000000000000000000000..1630c0c6d86f8db9facbaca54c5d7ad483a258e9
--- /dev/null
+++ b/.docs/stylesheets/custom.css
@@ -0,0 +1,149 @@
+:root,
+[data-md-color-accent=indigo] {
+  --md-primary-fg-color: #006699;
+  --md-accent-fg-color: #005c8a /* darken 10% */ ;
+  --md-primary-fg-color--dark: #00537c /* darken 10% */ ; }
+
+img.img-border {
+  border: 1px solid #b3b3b3; }
+
+.md-typeset .md-button.md-button--secondary {
+  background: #ffffff; }
+  .md-typeset .md-button.md-button--secondary:focus, .md-typeset .md-button.md-button--secondary:hover {
+    color: var(--md-primary-fg-color);
+    background: #e5e5e5; }
+
+.md-main .md-content a:not(.action-button):not([tabindex]),
+.md-main .md-content a:not(.action-button):not([tabindex]) {
+  color: var(--md-typeset-color);
+  border-bottom: 2px solid var(--md-primary-fg-color); }
+  .md-main .md-content a:not(.action-button):not([tabindex]):focus, .md-main .md-content a:not(.action-button):not([tabindex]):hover,
+  .md-main .md-content a:not(.action-button):not([tabindex]):focus,
+  .md-main .md-content a:not(.action-button):not([tabindex]):hover {
+    color: var(--md-typeset-color);
+    border-bottom: 2px solid var(--md-primary-fg-color--dark); }
+
+.md-banner {
+  background-color: var(--md-primary-fg-color--dark); }
+
+@keyframes heart {
+  0%,
+  40%,
+  80%,
+  100% {
+    transform: scale(1); }
+  20%,
+  60% {
+    transform: scale(1.15); } }
+.md-typeset .twitter {
+  color: #00acee; }
+.md-typeset .mastodon {
+  color: #897ff8; }
+.md-typeset .mdx-video {
+  width: auto; }
+  .md-typeset .mdx-video__inner {
+    position: relative;
+    width: 100%;
+    height: 0;
+    padding-bottom: 56.138%; }
+  .md-typeset .mdx-video iframe {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    border: none; }
+.md-typeset .mdx-heart {
+  animation: heart 1000ms infinite; }
+.md-typeset .mdx-badge {
+  font-size: 0.85em; }
+  .md-typeset .mdx-badge--right {
+    float: right;
+    margin-left: 0.35em; }
+.md-typeset .mdx-switch button {
+  cursor: pointer;
+  transition: opacity 250ms; }
+  .md-typeset .mdx-switch button:is(:focus, :hover) {
+    opacity: 0.75; }
+  .md-typeset .mdx-switch button > code {
+    display: block;
+    color: var(--md-primary-bg-color);
+    background-color: var(--md-primary-fg-color); }
+.md-typeset .mdx-columns ol,
+.md-typeset .mdx-columns ul {
+  columns: 2; }
+.md-typeset .mdx-columns li {
+  break-inside: avoid; }
+.md-typeset .mdx-flags {
+  margin: 2em auto; }
+  .md-typeset .mdx-flags ol {
+    list-style: none; }
+    .md-typeset .mdx-flags ol li {
+      margin-bottom: 1em; }
+  .md-typeset .mdx-flags__item {
+    display: flex;
+    gap: 0.125rem; }
+  .md-typeset .mdx-flags__content {
+    display: flex;
+    flex: 1;
+    flex-direction: column; }
+    .md-typeset .mdx-flags__content span {
+      display: inline-flex;
+      align-items: baseline;
+      justify-content: space-between; }
+    .md-typeset .mdx-flags__content > span:nth-child(2) {
+      font-size: 80%; }
+    .md-typeset .mdx-flags__content code {
+      float: right; }
+
+.mdx-container {
+  padding-top: 0.25rem;
+  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(0, 0%, 100%, 1)' /></svg>") no-repeat bottom, linear-gradient(to bottom, var(--md-primary-fg-color), #363949 99%, var(--md-default-bg-color) 99%); }
+  [data-md-color-scheme="slate"] .mdx-container {
+    background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(230, 15%, 14%, 1)' /></svg>") no-repeat bottom, linear-gradient(to bottom, var(--md-primary-fg-color), #363949 99%, var(--md-default-bg-color) 99%); }
+
+.mdx-hero {
+  margin: 0 16px;
+  color: var(--md-primary-bg-color); }
+  .mdx-hero h1 {
+    margin-bottom: 20px;
+    font-weight: 700;
+    color: currentcolor; }
+  .mdx-hero__content {
+    padding-bottom: 120px; }
+
+.mdx-spotlight__feature {
+  flex-direction: row-reverse; }
+
+.mdx-spotlight .mdx-spotlight__feature {
+  width: 100%;
+  display: flex;
+  flex: 1 0 48%;
+  flex-flow: row nowrap;
+  gap: 3.2rem;
+  margin: 0 0 3.2rem; }
+  .mdx-spotlight .mdx-spotlight__feature:nth-child(odd) {
+    flex-direction: row-reverse; }
+  .mdx-spotlight .mdx-spotlight__feature > figcaption {
+    text-align: left;
+    font-style: inherit;
+    max-width: inherit;
+    margin: 1em auto 0 .8rem; }
+  .mdx-spotlight .mdx-spotlight__feature > a {
+    margin: 2rem 0;
+    display: block;
+    flex-shrink: 0; }
+    .mdx-spotlight .mdx-spotlight__feature > a > img {
+      border-radius: .2rem;
+      box-shadow: var(--md-shadow-z2);
+      display: block;
+      height: auto;
+      max-width: 100%;
+      width: 25rem; }
+
+[data-md-component=announce] .md-banner__inner {
+  margin-top: 0.2rem;
+  margin-bottom: 0.2rem; }
+
+/*# sourceMappingURL=custom.css.map */
diff --git a/.docs/stylesheets/custom.css.map b/.docs/stylesheets/custom.css.map
new file mode 100644
index 0000000000000000000000000000000000000000..34bb00e5a02205e20f7963ec0ea9cb3f33bdd1bb
--- /dev/null
+++ b/.docs/stylesheets/custom.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["custom/_colors.scss","custom/_typeset.scss","custom/layout/_hero.scss","custom.scss"],
+"names": [],
+"file": "custom.css"
+}
diff --git a/.docs/stylesheets/custom.scss b/.docs/stylesheets/custom.scss
new file mode 100644
index 0000000000000000000000000000000000000000..fa839622a427ca13e1aab8d4500e38723ff10676
--- /dev/null
+++ b/.docs/stylesheets/custom.scss
@@ -0,0 +1,15 @@
+// ----------------------------------------------------------------------------
+// Local imports
+// ----------------------------------------------------------------------------
+
+@import "config";
+
+@import "custom/colors";
+@import "custom/typeset";
+
+@import "custom/layout/hero";
+
+[data-md-component=announce] .md-banner__inner {
+    margin-top: 0.2rem;
+    margin-bottom: 0.2rem;
+}
\ No newline at end of file
diff --git a/.docs/stylesheets/custom/_colors.scss b/.docs/stylesheets/custom/_colors.scss
new file mode 100644
index 0000000000000000000000000000000000000000..59fee68b6e277108d3ee17079beb4de337c92701
--- /dev/null
+++ b/.docs/stylesheets/custom/_colors.scss
@@ -0,0 +1,40 @@
+:root,
+[data-md-color-accent=indigo] {
+  --md-primary-fg-color: #006699;
+  --md-accent-fg-color: #005c8a /* darken 10% */
+;
+  --md-primary-fg-color--dark: #00537c /* darken 10% */
+;
+}
+
+img.img-border {
+  border: 1px solid #b3b3b3;
+}
+
+.md-typeset .md-button.md-button--secondary {
+  background: #ffffff;
+
+  &:focus,
+  &:hover {
+    color: var(--md-primary-fg-color);
+    background: #e5e5e5 /* darken 10% */
+  ;
+  }
+}
+
+.md-main .md-content a:not(.action-button):not([tabindex]),
+.md-main .md-content a:not(.action-button):not([tabindex]) {
+  color: var(--md-typeset-color);
+  border-bottom: 2px solid var(--md-primary-fg-color);
+
+  &:focus,
+  &:hover {
+    color: var(--md-typeset-color);
+    border-bottom: 2px solid var(--md-primary-fg-color--dark);
+  }
+}
+
+
+.md-banner {
+  background-color: var(--md-primary-fg-color--dark);
+}
\ No newline at end of file
diff --git a/.docs/stylesheets/custom/_typeset.scss b/.docs/stylesheets/custom/_typeset.scss
new file mode 100644
index 0000000000000000000000000000000000000000..46e625cc0a83ed456ac6607d9776349f12ebd4bd
--- /dev/null
+++ b/.docs/stylesheets/custom/_typeset.scss
@@ -0,0 +1,160 @@
+// ----------------------------------------------------------------------------
+// Keyframes
+// ----------------------------------------------------------------------------
+
+// Pumping heart animation
+@keyframes heart {
+  0%,
+  40%,
+  80%,
+  100% {
+    transform: scale(1);
+  }
+
+  20%,
+  60% {
+    transform: scale(1.15);
+  }
+}
+
+// ----------------------------------------------------------------------------
+// Rules
+// ----------------------------------------------------------------------------
+
+// Scoped in typesetted content to match specificity of regular content
+.md-typeset {
+
+  // Twitter icon
+  .twitter {
+    color: #00acee;
+  }
+
+  // Mastodon icon - it's not the exact brand color, because that doesn't work
+  // well on dark backgrounds, so we lightened it up a bit.
+  .mastodon {
+    color: #897ff8;
+  }
+
+  // Insiders video
+  .mdx-video {
+    width: auto;
+
+    // Insiders video container
+    &__inner {
+      position: relative;
+      width: 100%;
+      height: 0;
+      padding-bottom: 56.138%;
+    }
+
+    // Insiders video iframe
+    iframe {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100%;
+      height: 100%;
+      overflow: hidden;
+      border: none;
+    }
+  }
+
+  // Pumping heart
+  .mdx-heart {
+    animation: heart 1000ms infinite;
+  }
+
+  // BETA #####################################################################
+
+  // Badge
+  .mdx-badge {
+    font-size: 0.85em;
+
+    // Badge moved to the right
+    &--right {
+      float: right;
+      margin-left: 0.35em;
+    }
+
+  }
+
+  // BETA #####################################################################
+
+  // Switch buttons
+  .mdx-switch button {
+    cursor: pointer;
+    transition: opacity 250ms;
+
+    // Button on focus/hover
+    &:is(:focus, :hover) {
+      opacity: 0.75;
+    }
+
+    // Code block
+    > code {
+      display: block;
+      color: var(--md-primary-bg-color);
+      background-color: var(--md-primary-fg-color);
+    }
+  }
+
+  // Two-column layout
+  .mdx-columns {
+
+    // Column
+    ol,
+    ul {
+      columns: 2;
+    }
+
+    // Column item
+    li {
+      break-inside: avoid;
+    }
+  }
+
+  // Language list
+  .mdx-flags {
+    margin: 2em auto;
+
+    // Language list
+    ol {
+      list-style: none;
+
+      // Language list item
+      li {
+        margin-bottom: 1em;
+      }
+    }
+
+    // Language item
+    &__item {
+      display: flex;
+      gap: 0.125rem;
+    }
+
+    // Language content
+    &__content {
+      display: flex;
+      flex: 1;
+      flex-direction: column;
+
+      // Language name
+      span {
+        display: inline-flex;
+        align-items: baseline;
+        justify-content: space-between;
+      }
+
+      // Language link
+      > span:nth-child(2) {
+        font-size: 80%;
+      }
+
+      // Language code
+      code {
+        float: right;
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/.docs/stylesheets/custom/layout/.sass-cache/991e99d4fce80f9249c84e5c2787c7c15c1ba446/hero.scssc b/.docs/stylesheets/custom/layout/.sass-cache/991e99d4fce80f9249c84e5c2787c7c15c1ba446/hero.scssc
new file mode 100644
index 0000000000000000000000000000000000000000..ece25c2d04f5148bfde39da0ce142961a24b3df5
Binary files /dev/null and b/.docs/stylesheets/custom/layout/.sass-cache/991e99d4fce80f9249c84e5c2787c7c15c1ba446/hero.scssc differ
diff --git a/.docs/stylesheets/custom/layout/_hero.scss b/.docs/stylesheets/custom/layout/_hero.scss
new file mode 100644
index 0000000000000000000000000000000000000000..7850ad2f5bb148b3639b61bc0cca4d832701e7ee
--- /dev/null
+++ b/.docs/stylesheets/custom/layout/_hero.scss
@@ -0,0 +1,88 @@
+// ----------------------------------------------------------------------------
+// Rules
+// ----------------------------------------------------------------------------
+
+// Landing page container
+.mdx-container {
+  padding-top: 0.25rem;
+  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(0, 0%, 100%, 1)' /></svg>") no-repeat bottom,
+  linear-gradient(
+                  to bottom,
+                  var(--md-primary-fg-color),
+                  hsla(230, 15%, 25%, 1) 99%,
+                  var(--md-default-bg-color) 99%
+  );
+
+  // Adjust background for slate theme
+  [data-md-color-scheme="slate"] & {
+    background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(230, 15%, 14%, 1)' /></svg>") no-repeat bottom,
+    linear-gradient(
+                    to bottom,
+                    var(--md-primary-fg-color),
+                    hsla(230, 15%, 25%, 1) 99%,
+                    var(--md-default-bg-color) 99%
+    );
+  }
+}
+
+// Landing page hero
+.mdx-hero {
+  margin: 0 16px;
+  color: var(--md-primary-bg-color);
+
+  // Hero headline
+  h1 {
+    margin-bottom: 20px;
+    font-weight: 700;
+    color: currentcolor;
+
+  }
+
+  // Hero content
+  &__content {
+    padding-bottom: 120px;
+  }
+}
+
+.mdx-spotlight__feature {
+  flex-direction: row-reverse;
+}
+
+// Landing page spotlight
+.mdx-spotlight {
+
+  .mdx-spotlight__feature {
+    width: 100%;
+    display: flex;
+    flex: 1 0 48%;
+    flex-flow: row nowrap;
+    gap: 3.2rem;
+    margin: 0 0 3.2rem;
+
+    &:nth-child(odd) {
+      flex-direction: row-reverse;
+    }
+
+    & > figcaption {
+      text-align: left;
+      font-style: inherit;
+      max-width: inherit;
+      margin: 1em auto 0 .8rem;
+    }
+
+    & > a {
+      margin: 2rem 0;
+      display: block;
+      flex-shrink: 0;
+
+      & > img {
+        border-radius: .2rem;
+        box-shadow: var(--md-shadow-z2);
+        display: block;
+        height: auto;
+        max-width: 100%;
+        width: 25rem;
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/.docs/stylesheets/extra.css b/.docs/stylesheets/extra.css
deleted file mode 100644
index b6614e14009c0ffb7f9d2921c4a051152fe8bb01..0000000000000000000000000000000000000000
--- a/.docs/stylesheets/extra.css
+++ /dev/null
@@ -1,31 +0,0 @@
-:root,
-[data-md-color-accent=indigo] {
-    --md-primary-fg-color: #006699;
-    --md-accent-fg-color: #005c8a /* darken 10% */;
-    --md-primary-fg-color--dark: #00537c /* darken 10% */;
-}
-
-figure img.img-border {
-    border: 1px solid #b3b3b3;
-}
-
-.md-main .md-content a:not(.action-button):not([tabindex]),
-.md-main .md-content a:not(.action-button):not([tabindex]) {
-    color: var(--md-typeset-color);
-    border-bottom: 2px solid var(--md-primary-fg-color);
-}
-
-.md-main .md-content a:not(.action-button):not([tabindex]):focus,
-.md-main .md-content a:not(.action-button):not([tabindex]):hover {
-    color: var(--md-typeset-color);
-    border-bottom: 2px solid var(--md-primary-fg-color--dark);
-}
-
-.md-banner {
-    background-color: var(--md-primary-fg-color--dark);
-}
-
-[data-md-component=announce] .md-banner__inner {
-    margin-top: 0.2rem;
-    margin-bottom: 0.2rem;
-}
\ No newline at end of file
diff --git a/.jupyter/.env b/.jupyter/.env
index 119dca696afda5f423ce2605cfaa41d8c84666c1..7c7988ff2f481a44ff41f998a7b0b0bb06782ff2 100644
--- a/.jupyter/.env
+++ b/.jupyter/.env
@@ -1,3 +1,10 @@
-DBREPO_ENDPOINT=https://test.dbrepo.tuwien.ac.at
-DBREPO_USERNAME=foo
-DBREPO_PASSWORD=bar
+REST_API_ENDPOINT="https://test.dbrepo.tuwien.ac.at"
+REST_API_USERNAME="foo"
+REST_API_PASSWORD="bar"
+REST_API_SECURE="True"
+AMQP_API_HOST="https://test.dbrepo.tuwien.ac.at"
+AMQP_API_PORT="5672"
+AMQP_API_USERNAME="foo"
+AMQP_API_PASSWORD="bar"
+AMQP_API_VIRTUAL_HOST="/"
+REST_UPLOAD_ENDPOINT="https://test.dbrepo.tuwien.ac.at/api/upload/files"
\ No newline at end of file
diff --git a/.jupyter/default.ipynb b/.jupyter/default.ipynb
index 0d51aa7188a956b2256a59c0110f9f7d6357cf3c..b51ec9c220d770c932e1944757a0b309f0442af4 100644
--- a/.jupyter/default.ipynb
+++ b/.jupyter/default.ipynb
@@ -3,13 +3,13 @@
   {
    "metadata": {
     "ExecuteTime": {
-     "end_time": "2024-04-10T06:10:08.974108Z",
-     "start_time": "2024-04-10T06:10:07.365075Z"
+     "end_time": "2024-04-10T10:40:46.450472Z",
+     "start_time": "2024-04-10T10:40:36.531251Z"
     }
    },
    "cell_type": "code",
    "source": [
-    "!pip install python-dotenv dbrepo==1.4.2rc10\n",
+    "!pip install python-dotenv dbrepo==1.4.2rc11\n",
     "import dotenv\n",
     "%load_ext dotenv\n",
     "%dotenv"
@@ -21,35 +21,58 @@
      "output_type": "stream",
      "text": [
       "Requirement already satisfied: python-dotenv in ./venv/lib/python3.11/site-packages (1.0.1)\r\n",
-      "Requirement already satisfied: dbrepo==1.4.2rc10 in ./venv/lib/python3.11/site-packages (1.4.2rc10)\r\n",
-      "Requirement already satisfied: requests>=2.31 in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc10) (2.31.0)\r\n",
-      "Requirement already satisfied: pika in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc10) (1.3.2)\r\n",
-      "Requirement already satisfied: pydantic in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc10) (2.6.4)\r\n",
-      "Requirement already satisfied: tuspy in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc10) (1.0.3)\r\n",
-      "Requirement already satisfied: charset-normalizer<4,>=2 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc10) (3.3.2)\r\n",
-      "Requirement already satisfied: idna<4,>=2.5 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc10) (3.6)\r\n",
-      "Requirement already satisfied: urllib3<3,>=1.21.1 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc10) (2.2.1)\r\n",
-      "Requirement already satisfied: certifi>=2017.4.17 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc10) (2024.2.2)\r\n",
-      "Requirement already satisfied: annotated-types>=0.4.0 in ./venv/lib/python3.11/site-packages (from pydantic->dbrepo==1.4.2rc10) (0.6.0)\r\n",
-      "Requirement already satisfied: pydantic-core==2.16.3 in ./venv/lib/python3.11/site-packages (from pydantic->dbrepo==1.4.2rc10) (2.16.3)\r\n",
-      "Requirement already satisfied: typing-extensions>=4.6.1 in ./venv/lib/python3.11/site-packages (from pydantic->dbrepo==1.4.2rc10) (4.11.0)\r\n",
-      "Requirement already satisfied: tinydb>=3.5.0 in ./venv/lib/python3.11/site-packages (from tuspy->dbrepo==1.4.2rc10) (4.8.0)\r\n",
-      "Requirement already satisfied: aiohttp>=3.6.2 in ./venv/lib/python3.11/site-packages (from tuspy->dbrepo==1.4.2rc10) (3.9.3)\r\n",
-      "Requirement already satisfied: aiosignal>=1.1.2 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc10) (1.3.1)\r\n",
-      "Requirement already satisfied: attrs>=17.3.0 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc10) (23.2.0)\r\n",
-      "Requirement already satisfied: frozenlist>=1.1.1 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc10) (1.4.1)\r\n",
-      "Requirement already satisfied: multidict<7.0,>=4.5 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc10) (6.0.5)\r\n",
-      "Requirement already satisfied: yarl<2.0,>=1.0 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc10) (1.9.4)\r\n"
+      "Collecting dbrepo==1.4.2rc11\r\n",
+      "  Downloading dbrepo-1.4.2rc11-py3-none-any.whl (26 kB)\r\n",
+      "Requirement already satisfied: requests>=2.31 in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc11) (2.31.0)\r\n",
+      "Requirement already satisfied: pika in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc11) (1.3.2)\r\n",
+      "Requirement already satisfied: pydantic in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc11) (2.6.4)\r\n",
+      "Requirement already satisfied: tuspy in ./venv/lib/python3.11/site-packages (from dbrepo==1.4.2rc11) (1.0.3)\r\n",
+      "Collecting pandas\r\n",
+      "  Downloading pandas-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.0 MB)\r\n",
+      "\u001B[2K     \u001B[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001B[0m \u001B[32m13.0/13.0 MB\u001B[0m \u001B[31m13.2 MB/s\u001B[0m eta \u001B[36m0:00:00\u001B[0m00:01\u001B[0m00:01\u001B[0m\r\n",
+      "\u001B[?25hRequirement already satisfied: charset-normalizer<4,>=2 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc11) (3.3.2)\r\n",
+      "Requirement already satisfied: idna<4,>=2.5 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc11) (3.6)\r\n",
+      "Requirement already satisfied: urllib3<3,>=1.21.1 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc11) (2.2.1)\r\n",
+      "Requirement already satisfied: certifi>=2017.4.17 in ./venv/lib/python3.11/site-packages (from requests>=2.31->dbrepo==1.4.2rc11) (2024.2.2)\r\n",
+      "Collecting numpy<2,>=1.23.2\r\n",
+      "  Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.3 MB)\r\n",
+      "\u001B[2K     \u001B[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001B[0m \u001B[32m18.3/18.3 MB\u001B[0m \u001B[31m12.7 MB/s\u001B[0m eta \u001B[36m0:00:00\u001B[0m00:01\u001B[0m00:01\u001B[0m\r\n",
+      "\u001B[?25hRequirement already satisfied: python-dateutil>=2.8.2 in ./venv/lib/python3.11/site-packages (from pandas->dbrepo==1.4.2rc11) (2.9.0.post0)\r\n",
+      "Collecting pytz>=2020.1\r\n",
+      "  Downloading pytz-2024.1-py2.py3-none-any.whl (505 kB)\r\n",
+      "\u001B[2K     \u001B[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001B[0m \u001B[32m505.5/505.5 kB\u001B[0m \u001B[31m13.7 MB/s\u001B[0m eta \u001B[36m0:00:00\u001B[0m00:01\u001B[0m\r\n",
+      "\u001B[?25hCollecting tzdata>=2022.7\r\n",
+      "  Downloading tzdata-2024.1-py2.py3-none-any.whl (345 kB)\r\n",
+      "\u001B[2K     \u001B[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001B[0m \u001B[32m345.4/345.4 kB\u001B[0m \u001B[31m13.9 MB/s\u001B[0m eta \u001B[36m0:00:00\u001B[0m\r\n",
+      "\u001B[?25hRequirement already satisfied: annotated-types>=0.4.0 in ./venv/lib/python3.11/site-packages (from pydantic->dbrepo==1.4.2rc11) (0.6.0)\r\n",
+      "Requirement already satisfied: pydantic-core==2.16.3 in ./venv/lib/python3.11/site-packages (from pydantic->dbrepo==1.4.2rc11) (2.16.3)\r\n",
+      "Requirement already satisfied: typing-extensions>=4.6.1 in ./venv/lib/python3.11/site-packages (from pydantic->dbrepo==1.4.2rc11) (4.11.0)\r\n",
+      "Requirement already satisfied: tinydb>=3.5.0 in ./venv/lib/python3.11/site-packages (from tuspy->dbrepo==1.4.2rc11) (4.8.0)\r\n",
+      "Requirement already satisfied: aiohttp>=3.6.2 in ./venv/lib/python3.11/site-packages (from tuspy->dbrepo==1.4.2rc11) (3.9.3)\r\n",
+      "Requirement already satisfied: aiosignal>=1.1.2 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc11) (1.3.1)\r\n",
+      "Requirement already satisfied: attrs>=17.3.0 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc11) (23.2.0)\r\n",
+      "Requirement already satisfied: frozenlist>=1.1.1 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc11) (1.4.1)\r\n",
+      "Requirement already satisfied: multidict<7.0,>=4.5 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc11) (6.0.5)\r\n",
+      "Requirement already satisfied: yarl<2.0,>=1.0 in ./venv/lib/python3.11/site-packages (from aiohttp>=3.6.2->tuspy->dbrepo==1.4.2rc11) (1.9.4)\r\n",
+      "Requirement already satisfied: six>=1.5 in ./venv/lib/python3.11/site-packages (from python-dateutil>=2.8.2->pandas->dbrepo==1.4.2rc11) (1.16.0)\r\n",
+      "Installing collected packages: pytz, tzdata, numpy, pandas, dbrepo\r\n",
+      "  Attempting uninstall: dbrepo\r\n",
+      "    Found existing installation: dbrepo 1.4.2rc10\r\n",
+      "    Uninstalling dbrepo-1.4.2rc10:\r\n",
+      "      Successfully uninstalled dbrepo-1.4.2rc10\r\n",
+      "Successfully installed dbrepo-1.4.2rc11 numpy-1.26.4 pandas-2.2.1 pytz-2024.1 tzdata-2024.1\r\n",
+      "The dotenv extension is already loaded. To reload it, use:\n",
+      "  %reload_ext dotenv\n"
      ]
     }
    ],
-   "execution_count": 1
+   "execution_count": 3
   },
   {
    "metadata": {
     "ExecuteTime": {
-     "end_time": "2024-04-10T06:10:09.860353Z",
-     "start_time": "2024-04-10T06:10:08.981192Z"
+     "end_time": "2024-04-10T10:40:50.794253Z",
+     "start_time": "2024-04-10T10:40:50.554072Z"
     }
    },
    "cell_type": "code",
@@ -64,15 +87,23 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "2024-04-10 08:10:09,327 root         DEBUG  method: get\n",
-      "2024-04-10 08:10:09,328 root         DEBUG  url: https://test.dbrepo.tuwien.ac.at/api/database/license\n",
-      "2024-04-10 08:10:09,328 root         DEBUG  stream: False\n",
-      "2024-04-10 08:10:09,329 root         DEBUG  secure: True\n",
-      "2024-04-10 08:10:09,329 root         DEBUG  username: foo, password: (hidden)\n"
+      "2024-04-10 12:40:50,555 root         DEBUG  method: get\n",
+      "2024-04-10 12:40:50,556 root         DEBUG  url: https://test.dbrepo.tuwien.ac.at/api/database/license\n",
+      "2024-04-10 12:40:50,557 root         DEBUG  stream: False\n",
+      "2024-04-10 12:40:50,558 root         DEBUG  secure: True\n",
+      "2024-04-10 12:40:50,559 root         DEBUG  username: foo, password: (hidden)\n"
      ]
     }
    ],
-   "execution_count": 2
+   "execution_count": 4
+  },
+  {
+   "metadata": {},
+   "cell_type": "code",
+   "outputs": [],
+   "execution_count": null,
+   "source": "",
+   "id": "4331f5b5be59bf06"
   }
  ],
  "metadata": {
diff --git a/.jupyter/requirements.txt b/.jupyter/requirements.txt
index c06c064500982d0b62a37283aeaac06c85ddb91b..51d94f0e2f617e7a5b1542fa41077ec6140a1b64 100644
--- a/.jupyter/requirements.txt
+++ b/.jupyter/requirements.txt
@@ -1,3 +1,3 @@
 python-dotenv==1.0.1
 notebook==7.1.2
-dbrepo==1.4.2rc10
+dbrepo==1.4.2rc11
diff --git a/versions.json b/versions.json
new file mode 100644
index 0000000000000000000000000000000000000000..4378f772357e093e48e74b7a254be20bd62538fc
--- /dev/null
+++ b/versions.json
@@ -0,0 +1,17 @@
+[
+  {
+    "version": "1.4.2",
+    "title": "1.4.2",
+    "aliases": ["latest"]
+  },
+  {
+    "version": "1.4.1",
+    "title": "1.4.1",
+    "aliases": []
+  },
+  {
+    "version": "1.4.0",
+    "title": "1.4.0",
+    "aliases": []
+  }
+]
\ No newline at end of file