diff --git a/assets/js/clubstatus.js b/assets/js/clubstatus.js
new file mode 100644
index 0000000..d87eb04
--- /dev/null
+++ b/assets/js/clubstatus.js
@@ -0,0 +1,67 @@
+const spaceapiUrl = "https://spaceapi.hamburg.ccc.de"
+const interval_ms = 60000
+
+console.log("clubstatus.js geladen!"); /* TODO: ENTFERNEN */
+
+function timeDistanceDE(pastDate) {
+  const seconds = Math.floor((Date.now() - pastDate.getTime()) / 1000)
+  const minutes = Math.floor(seconds / 60)
+  const hours = Math.floor(minutes / 60)
+  const days = Math.floor(hours / 24)
+
+  if (days = 1) return `since ${days}d`
+  if (days > 1) return `since ${days}d`
+  if (hours = 1) return `since ${hours}h`
+  if (hours > 1) return `since ${hours}h`
+  if (minutes = 1) return `since ${minutes}min`
+  if (minutes > 1) return `since ${minutes}min`
+  return `gerade eben`
+}
+
+function updateRoomState(openState, lastChangeTimestamp) {
+  const roomstate = document.querySelector('#clubstatus-badge')
+  const statusItem = roomstate.querySelector(".state")
+  const durationItem = roomstate.querySelector(".duration")
+
+  if (!statusItem || !durationItem) return
+
+  roomstate.classList.remove("open", "closed", "unknown")
+  statusItem.classList.remove("open", "closed", "unknown")
+
+  if (openState === null || lastChangeTimestamp === null) {
+    statusItem.textContent = "unbekannt"
+    statusItem.classList.add("unknown")
+    durationItem.textContent = "(since unbekannt)"
+  } else {
+    const changeDate = new Date(lastChangeTimestamp * 1000)
+    const sinceText = timeDistanceDE(changeDate)
+
+    if (openState) {
+      statusItem.textContent = "open"
+      statusItem.classList.add("open")
+    } else {
+      statusItem.textContent = "closed"
+      statusItem.classList.add("closed")
+    }
+
+    durationItem.textContent = `(${sinceText})`
+  }
+}
+
+function fetchRoomState() {
+  fetch(spaceapiUrl)
+    .then(response => response.json())
+    .then(data => {
+      const openState = data?.state?.open ?? null
+      const lastChange = data?.state?.lastchange ?? null
+      updateRoomState(openState, lastChange)
+    })
+    .catch(err => {
+      console.error("Fehler beim Laden der SpaceAPI:", err)
+      updateRoomState(null, null)
+    })
+}
+
+// Initialer Abruf + dann regelmäßig
+fetchRoomState()
+setInterval(fetchRoomState, interval_ms)
diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml
index 4253a6e..f96279d 100644
--- a/config/_default/hugo.toml
+++ b/config/_default/hugo.toml
@@ -1,92 +1,89 @@
-theme = 'blowfish'
-baseURL = 'https://oururl.de/'
-defaultContentLanguage = 'de'
+theme = "blowfish"
+baseURL = "https://oururl.de/"
+defaultContentLanguage = "de"
 relativeURLs = true
 canonifyURLs = true
-
 pluralizeListTitles = false
-
 enableRobotsTXT = true
 summaryLength = 0
-
 buildDrafts = false
 buildFuture = false
-
 enableEmoji = true
 
 [pagination]
-  pagerSize = 100
+pagerSize = 100
 
 [imaging]
-  anchor = 'Center'
+anchor = "Center"
 
 [taxonomies]
-  tag = 'tags'
-  category = 'categories'
-  author = 'authors'
-  series = 'series'
+tag = "tags"
+category = "categories"
+author = "authors"
+series = "series"
 
 [sitemap]
-  changefreq = 'daily'
-  filename = 'sitemap.xml'
-  priority = 0.5
+changefreq = "daily"
+filename = "sitemap.xml"
+priority = 0.5
 
 [permalinks]
-  post = '/post/:year/:month/:day/:title/'
+post = "/post/:year/:month/:day/:title/"
 
 [outputs]
-  home = ['html', 'rss', 'json']
-  section = ['html', 'Calendar', 'rss', 'xml']
-  page = ['html', 'Calendar']
+home = ["html", "rss", "json"]
+section = ["html", "Calendar", "rss", "xml"]
+page = ["html", "Calendar"]
 
 # Output Formats Configuration
 [outputFormats.Calendar]
-  mediaType = 'text/calendar'
-  baseName = 'index'
-  isPlainText = true
-  notAlternative = true
+mediaType = "text/calendar"
+baseName = "index"
+isPlainText = true
+notAlternative = true
 
 [outputFormats.XML]
-  mediaType = 'application/xml'
-  baseName = 'index'
-  isPlainText = true
+mediaType = "application/xml"
+baseName = "index"
+isPlainText = true
 
 [outputFormats.RSS]
-  mediaType = 'application/rss+xml'
+mediaType = "application/rss+xml"
 
 # Media Types Configuration
 [mediaTypes]
-  [mediaTypes.'text/calendar']
-    suffixes = ['ics']
-  [mediaTypes.'application/rss+xml']
-    suffixes = ['xml', 'rss']
+[mediaTypes.'text/calendar']
+suffixes = ["ics"]
+
+[mediaTypes.'application/rss+xml']
+suffixes = ["xml", "rss"]
 
 [related]
-  threshold = 0
-  toLower = false
+threshold = 0
+toLower = false
 
-  [[related.indices]]
-    name = 'tags'
-    weight = 100
+[[related.indices]]
+name = "tags"
+weight = 100
 
-  [[related.indices]]
-    name = 'categories'
-    weight = 100
+[[related.indices]]
+name = "categories"
+weight = 100
 
-  [[related.indices]]
-    name = 'series'
-    weight = 50
+[[related.indices]]
+name = "series"
+weight = 50
 
-  [[related.indices]]
-    name = 'authors'
-    weight = 20
+[[related.indices]]
+name = "authors"
+weight = 20
 
-  [[related.indices]]
-      name = 'date'
-      weight = 10
+[[related.indices]]
+name = "date"
+weight = 10
 
-  [[related.indices]]
-    applyFilter = false
-    name = 'fragmentrefs'
-    type = 'fragments'
-    weight = 10
+[[related.indices]]
+applyFilter = false
+name = "fragmentrefs"
+type = "fragments"
+weight = 10
diff --git a/config/_default/languages.de.toml b/config/_default/languages.de.toml
index 71158ad..ed57e00 100644
--- a/config/_default/languages.de.toml
+++ b/config/_default/languages.de.toml
@@ -5,28 +5,28 @@ weight = 1
 title = "Chaos Computer Club Berlin"
 
 [params]
-  displayName = "DE"
-  isoCode = "de"
-  rtl = false
-  dateFormat = "January 2, 2006"
-  DateForm = "30.12.2006"
-  logo = "img/logo.png"
-  # secondaryLogo = "img/avatar-CCCB-Logo.png"
-  description = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin."
-  copyright = "CCC-BY"
-  selfHosted = true
-  mainSections = ["post", "datengarten"]
+displayName = "DE"
+isoCode = "de"
+rtl = false
+dateFormat = "January 2, 2006"
+DateForm = "30.12.2006"
+logo = "img/logo.png"
+# secondaryLogo = "img/avatar-CCCB-Logo.png"
+description = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin."
+copyright = "CCC-BY"
+selfHosted = true
+mainSections = ["post", "datengarten"]
 
 [params.author]
-  # name = "Your name here"
-  email = "mail2025@berlin.ccc.de"
-  image = "img/logo.png"
-  # imageQuality = 96
-  headline = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin."
-#   bio = "A little bit about you"
-  links = [
-    { mastodon = "https://chaos.social/@clubdiscordia" },
-    { forgejo = "https://git.berlin.ccc.de/explore/repos" },
-    { email = "mailto:mail2025@berlin.ccc.de" },
-    { github = "https://github.com/cccb/" },
-  ]
+# name = "Your name here"
+email = "mail2025@berlin.ccc.de"
+image = "img/logo.png"
+# imageQuality = 96
+headline = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin."
+# bio = "A little bit about you"
+links = [
+  { mastodon = "https://chaos.social/@clubdiscordia" },
+  { forgejo = "https://git.berlin.ccc.de/explore/repos" },
+  { email = "mailto:mail2025@berlin.ccc.de" },
+  { github = "https://github.com/cccb/" },
+]
diff --git a/config/_default/markup.toml b/config/_default/markup.toml
index 4219cc6..fed9b07 100644
--- a/config/_default/markup.toml
+++ b/config/_default/markup.toml
@@ -3,11 +3,11 @@
 
 [goldmark]
 [goldmark.renderer]
-  unsafe = true
+unsafe = true
 
 [highlight]
-  noClasses = false
+noClasses = false
 
 [tableOfContents]
-  startLevel = 1
-  endLevel = 5
+startLevel = 1
+endLevel = 5
diff --git a/config/_default/menus.de.toml b/config/_default/menus.de.toml
index 041c14d..e32926e 100644
--- a/config/_default/menus.de.toml
+++ b/config/_default/menus.de.toml
@@ -1,7 +1,7 @@
 # -- Main Menu --
 # The main menu is displayed in the header at the top of the page.
 # Acceptable parameters are name, pageRef, page, url, title, weight.
-# 
+#
 # The simplest menu configuration is to provide:
 #   name = The name to be displayed for this menu link
 #   pageRef = The identifier of the page or section to link to
@@ -10,51 +10,51 @@
 # overridden by providing a weight value. The menu will then be
 # ordered by weight from lowest to highest.
 
-#[[main]]
+# [[main]]
 #  name = "Blog"
 #  pageRef = "posts"
 #  weight = 10
 
 [[main]]
- name = "Verein"
- pageRef = "verein"
- weight = 200
+name = "Verein"
+pageRef = "verein"
+weight = 200
 
 [[main]]
- name = "Veranstaltungen"
- pageRef = "veranstaltungen"
- weight = 300
+name = "Veranstaltungen"
+pageRef = "veranstaltungen"
+weight = 300
 
 [[main]]
- name = "Mitgliedschaft"
- pageRef = "mitgliedschaft"
- weight = 400
+name = "Mitgliedschaft"
+pageRef = "mitgliedschaft"
+weight = 400
 
 [[main]]
- name = "News"
- pageRef = "post"
- weight = 500
+name = "News"
+pageRef = "post"
+weight = 500
 
 # -- Footer Menu --
 # The footer menu is displayed at the bottom of the page, just before
 # the copyright notice. Configure as per the main menu above.
 
 [[footer]]
-  name = "Tags"
-  pageRef = "tags"
-  weight = 10
+name = "Tags"
+pageRef = "tags"
+weight = 10
 
 [[footer]]
-  name = "Kategorien"
-  pageRef = "categories"
-  weight = 20
+name = "Kategorien"
+pageRef = "categories"
+weight = 20
 
 [[footer]]
- name = "Impressum"
- pageRef = "impressum"
- weight = 500
+name = "Impressum"
+pageRef = "impressum"
+weight = 500
 
 [[footer]]
- name = "Datenschutz"
- pageRef = "datenschutz"
- weight = 600
+name = "Datenschutz"
+pageRef = "datenschutz"
+weight = 600
diff --git a/config/_default/params.toml b/config/_default/params.toml
index d19b358..15fd981 100644
--- a/config/_default/params.toml
+++ b/config/_default/params.toml
@@ -5,13 +5,11 @@
 # Refer to the theme docs for more details about each of these parameters.
 # https://blowfish.page/docs/configuration/#theme-parameters
 
-colorScheme = "fira" # "congo"
-defaultAppearance = "dark" # valid options: light or dark
+colorScheme = "fira"  # "congo"
+defaultAppearance = "dark"  # valid options: light or dark
 autoSwitchAppearance = false
-
 enableSearch = true
 enableCodeCopy = false
-
 replyByEmail = false
 
 # mainSections = ["section1", "section2"]
@@ -21,113 +19,109 @@ replyByEmail = false
 disableImageOptimization = false
 disableTextInHeader = false
 backgroundImageWidth = 1200
-
-# defaultBackgroundImage = "/img/cccb-im-winter.jpg" # used as default for background images 
-defaultFeaturedImage = "/img/avatar-CCCB-Logo.png" # used as default for featured images in all articles
-
+# defaultBackgroundImage = "/img/cccb-im-winter.jpg" # used as default for background images
+defaultFeaturedImage = "/img/avatar-CCCB-Logo.png"  # used as default for featured images in all articles
 # highlightCurrentMenuArea = true
 smartTOC = true
 smartTOCHideUnfocusedChildren = true
-
 giteaDefaultServer = "https://git.fsfe.org"
 forgejoDefaultServer = "https://git.berlin.ccc.de"
 
 [header]
-  layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
+layout = "basic"  # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
 
 [footer]
-  showMenu = true
-  showCopyright = true
-  showThemeAttribution = true
-  showAppearanceSwitcher = true
-  showScrollToTop = true
+showMenu = true
+showCopyright = true
+showThemeAttribution = true
+showAppearanceSwitcher = true
+showScrollToTop = true
 
 [homepage]
-  layout = "background" # valid options: page, profile, hero, card, background, custom
-  homepageImage = "img/cccb-im-winter.jpg" # used in: hero, and card
-  showRecent = true
-  showRecentItems = 9
-  showMoreLink = true
-  showMoreLinkDest = "/post/"
-  cardView = true
-  cardViewScreenWidth = false
-  layoutBackgroundBlur = false # only used when layout equals background
+layout = "background"  # valid options: page, profile, hero, card, background, custom
+homepageImage = "img/cccb-im-winter.jpg"  # used in: hero, and card
+showRecent = true
+showRecentItems = 9
+showMoreLink = true
+showMoreLinkDest = "/post/"
+cardView = true
+cardViewScreenWidth = false
+layoutBackgroundBlur = false  # only used when layout equals background
 
 [article]
-  showDate = true
-  showViews = false
-  showLikes = false
-  showDateOnlyInArticle = false
-  showDateUpdated = true
-  showAuthor = false
-  showAuthorBottom = true
-  showHero = true
-  heroStyle = "big" # valid options: basic, big, background, thumbAndBackground
-  layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
-  layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
-  showBreadcrumbs = true
-  showDraftLabel = true
-  showEdit = true
-  editURL = "https://git.berlin.ccc.de/cccb-website-team/www/src/branch/staging/content/"
-  editAppendPath = true
-  seriesOpened = false
-  showHeadingAnchors = true
-  showPagination = false
-  invertPagination = false
-  showReadingTime = true
-  showTableOfContents = true
-  # showRelatedContent = false
-  # relatedContentLimit = 3
-  showTaxonomies = true
-  showAuthorsBadges = false
-  showWordCount = true
-  # sharingLinks = [ "mastodon", "email" ]
-  showZenMode = false
+showDate = true
+showViews = false
+showLikes = false
+showDateOnlyInArticle = false
+showDateUpdated = true
+showAuthor = false
+showAuthorBottom = true
+showHero = true
+heroStyle = "big"  # valid options: basic, big, background, thumbAndBackground
+layoutBackgroundBlur = true  # only used when heroStyle equals background or thumbAndBackground
+layoutBackgroundHeaderSpace = true  # only used when heroStyle equals background
+showBreadcrumbs = true
+showDraftLabel = true
+showEdit = true
+editURL = "https://git.berlin.ccc.de/cccb-website-team/www/src/branch/staging/content/"
+editAppendPath = true
+seriesOpened = false
+showHeadingAnchors = true
+showPagination = false
+invertPagination = false
+showReadingTime = true
+showTableOfContents = true
+# showRelatedContent = false
+#  relatedContentLimit = 3
+showTaxonomies = true
+showAuthorsBadges = false
+showWordCount = true
+# sharingLinks = [ "mastodon", "email" ]
+showZenMode = false
 
 [list]
-  showHero = false
-  # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
-  layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
-  layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
-  showBreadcrumbs = false
-  showSummary = false
-  showViews = false
-  showLikes = false
-  showTableOfContents = false
-  showCards = false
-  orderByWeight = false
-  groupByYear = true
-  cardView = false
-  cardViewScreenWidth = false
-  constrainItemsWidth = false
+showHero = false
+# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
+layoutBackgroundBlur = true  # only used when heroStyle equals background or thumbAndBackground
+layoutBackgroundHeaderSpace = true  # only used when heroStyle equals background
+showBreadcrumbs = false
+showSummary = false
+showViews = false
+showLikes = false
+showTableOfContents = false
+showCards = false
+orderByWeight = false
+groupByYear = true
+cardView = false
+cardViewScreenWidth = false
+constrainItemsWidth = false
 
 [sitemap]
-  excludedKinds = ["taxonomy", "term"]
+excludedKinds = ["taxonomy", "term"]
 
 [taxonomy]
-  showTermCount = true
-  showHero = false
-  # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
-  showBreadcrumbs = false
-  showViews = false
-  showLikes = false
-  showTableOfContents = false
-  cardView = false
-  category = "categories"
-  series = "series"
-  tag = "tags"
-
+showTermCount = true
+showHero = false
+# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
+showBreadcrumbs = false
+showViews = false
+showLikes = false
+showTableOfContents = false
+cardView = false
+category = "categories"
+series = "series"
+tag = "tags"
 
 [term]
-  showHero = false
-  # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
-  showBreadcrumbs = false
-  showViews = false
-  showLikes = false
-  showTableOfContents = true
-  groupByYear = false
-  cardView = false
-  cardViewScreenWidth = false
+showHero = false
+# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
+showBreadcrumbs = false
+showViews = false
+showLikes = false
+showTableOfContents = true
+groupByYear = false
+cardView = false
+cardViewScreenWidth = false
 
 [verification]
-  fediverse = "@clubdiscordia@chaos.social"
+fediverse = "@clubdiscordia@chaos.social"
diff --git a/content/404.md b/content/404.md
new file mode 100644
index 0000000..d9fcfba
--- /dev/null
+++ b/content/404.md
@@ -0,0 +1 @@
+Leider existiert diese Seite nicht.
\ No newline at end of file
diff --git a/content/_index.md b/content/_index.md
index 872be10..6945629 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -1,6 +1,27 @@
 ---
 description: "Startseite CCCB mit Kurzkalender"
 ---
+/* this section will be enabled when the cccb spaceapi is public
+
+<div style="display: flex; justify-content: center;">
+  <div id="clubstatus-badge">spacestatus unknown</div>
+</div>
+
+<style>
+    #clubstatus-badge {
+        position: relative;
+        background-color: #2ecc71;
+        flex: initial;
+        color: white;
+        padding: 0.25em 0.6em;
+        font-size: 0.75rem;
+        border-radius: 1em;
+        box-shadow: 0 0 4px rgba(0, 0, 0, 0.3);
+        font-weight: bold;
+      }
+</style>
+
+*/
 
 ### Nächste Veranstaltungen:
 
diff --git a/layouts/datengarten/single.html b/layouts/datengarten/single.html
index aac49dc..6edd0d7 100644
--- a/layouts/datengarten/single.html
+++ b/layouts/datengarten/single.html
@@ -4,14 +4,12 @@
     <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
       <article role="main" class="blog-post">
         <article class="max-w-prose mx-auto">
-          <h1 class="text-2xl font-bold">{{ .Title }}</h1>
+          <h1 class="mt-5 text-4xl font-extrabold text-neutral-900 dark:text-neutral pb-4">{{ .Title }}</h1>
           {{ if .Params.subtitle }}
-          <h2 class="text-xl">{{ .Params.subtitle }}</h2>
+          <h2 class="text-xl opacity-70">{{ .Params.subtitle }}</h2>
           {{ end }}
           
-          <div class="mt-4 border p-4 bg-secondary-bg rounded">
-            {{ partial "talk-infobox" . }}
-          </div>
+          {{ partial "talk-infobox" . }}
           
           <div class="mt-4 content">
             {{ .Content }}
@@ -19,11 +17,18 @@
         </article>
 
         {{ if .Params.tags }}
-          <div class="blog-tags">
-            {{ range .Params.tags }}
-              <a href="{{ $.Site.LanguagePrefix | absURL }}/tags/{{ . | urlize }}/">{{ . }}</a>&nbsp;
-            {{ end }}
-          </div><!--/.blog-tags-->
+        <div class="blog-tags max-w-prose mx-auto mt-4 flex flex-wrap gap-4 border-2 p-5 pt-7 mt-6 rounded-lg opacity-75 drop-shadow-md">
+          <p class="opacity-50">Tags:</p>
+          <br>
+          {{ range .Params.tags }}  
+          <a 
+              href="{{ $.Site.LanguagePrefix | absURL }}/tags/{{ . | urlize }}/"
+              class="inline-block px-3 py-1 rounded-lg text-sm font-semibold border-2 dark:bg-neutral-700 border-dotted shadow-lg shadow-blue-500/50"
+            >
+              {{ . }}
+            </a>
+          {{ end }}
+        </div>
         {{ end }}
 
         {{ if .Site.Params.socialShare }}
@@ -37,18 +42,31 @@
       </article><!--/.blog-post-->
 
       {{ if ne .Type "page" }}
-        <ul class="pager blog-pager">
-          {{ if .PrevInSection }}
-            <li class="previous">
-              <a href="{{ .PrevInSection.Permalink }}" data-toggle="tooltip" data-placement="top" title="{{ .PrevInSection.Title }}">&larr; {{ i18n "previousPost" }}</a>
-            </li><!--/.previous-->
-          {{ end }}
-          {{ if .NextInSection }}
-            <li class="next">
-              <a href="{{ .NextInSection.Permalink }}" data-toggle="tooltip" data-placement="top" title="{{ .NextInSection.Title }}">{{ i18n "nextPost" }} &rarr;</a>
-            </li><!--/.next-->
-          {{ end }}
-        </ul><!--/.pager .blog-pager-->
+      <ul class="pager blog-pager flex justify-between items-center mt-6 list-none p-0">
+        {{ if .PrevInSection }}
+          <li class="previous">
+            <a 
+              href="{{ .PrevInSection.Permalink }}" 
+              class="inline-block px-4 py-2 text-lg font-semibold bg-neutral-200 dark:bg-neutral-700 rounded hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors"
+              title="{{ .PrevInSection.Title }}"
+            >
+              &larr; {{ i18n "previousPost" }}
+            </a>
+          </li>
+        {{ end }}
+      
+        {{ if .NextInSection }}
+          <li class="next">
+            <a 
+              href="{{ .NextInSection.Permalink }}" 
+              class="inline-block px-4 py-2 text-lg font-semibold bg-neutral-200 dark:bg-neutral-700 rounded hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors"
+              title="{{ .NextInSection.Title }}"
+            >
+              {{ i18n "nextPost" }} &rarr;
+            </a>
+          </li>
+        {{ end }}
+      </ul>
       {{ end }}
 
 
diff --git a/layouts/partials/clubstatus.html b/layouts/partials/clubstatus.html
new file mode 100644
index 0000000..8288367
--- /dev/null
+++ b/layouts/partials/clubstatus.html
@@ -0,0 +1,3 @@
+{{ $js := resources.Get "js/clubstatus.js" | resources.Minify | resources.Fingerprint }}
+<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}"></script>
+
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
new file mode 100644
index 0000000..12a2638
--- /dev/null
+++ b/layouts/partials/footer.html
@@ -0,0 +1,70 @@
+<footer id="site-footer" class="py-10 print:hidden">
+  {{/* Footer menu */}}
+  {{ if .Site.Params.footer.showMenu | default true }}
+    {{ if .Site.Menus.footer }}
+    <nav class="flex flex-row pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400">
+      <ul class="flex flex-col list-none sm:flex-row">
+        {{ range .Site.Menus.footer }}
+        <li class="flex mb-1 ltr:text-right rtl:text-left sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0">
+          <a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center" href="{{ .URL }}"
+            title="{{ .Title }}">
+            {{ if .Pre }}
+            <span {{ if and .Pre .Name}} class="mr-1" {{ end }}>
+                {{ partial "icon.html" .Pre }}
+            </span>
+            {{ end }}
+            {{ .Name | markdownify }}
+          </a>
+        </li>
+        {{ end }}
+      </ul>
+    </nav>
+    {{ end }}
+  {{ end }}
+  <div class="flex items-center justify-between">
+
+    {{/* Copyright */}}
+    {{ if .Site.Params.footer.showCopyright | default true }}
+    <p class="text-sm text-neutral-500 dark:text-neutral-400">
+      {{- with replace .Site.Params.copyright "{ year }" now.Year  }}
+      {{ . | markdownify }}
+      {{- else }}
+      &copy;
+      {{ now.Format "2006" }}
+      {{ .Site.Params.Author.name | markdownify }}
+      {{- end }}
+    </p>
+    {{ end }}
+
+    {{/* Theme attribution */}}
+    {{ if .Site.Params.footer.showThemeAttribution | default true }}
+    <p class="text-xs text-neutral-500 dark:text-neutral-400">
+      {{ $hugo := printf `<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
+        href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a>`
+      }}
+      {{ $blowfish := printf `<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
+        href="https://blowfish.page/" target="_blank" rel="noopener noreferrer">Blowfish</a>` }}
+      {{ i18n "footer.powered_by" (dict "Hugo" $hugo "Theme" $blowfish) | safeHTML }}
+      (<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
+      href="https://git.berlin.ccc.de/cccb-website-team/www">Git-Repo</a>)
+    </p>
+    {{ end }}
+
+  </div>
+  <script>
+    {{ if not .Site.Params.disableImageZoom | default true }}
+    mediumZoom(document.querySelectorAll("img:not(.nozoom)"), {
+      margin: 24,
+      background: 'rgba(0,0,0,0.5)',
+      scrollOffset: 0,
+    })
+    {{ end }}
+  </script>
+  {{ $jsProcess := resources.Get "js/process.js" }}
+  {{ $jsProcess = $jsProcess | resources.Minify | resources.Fingerprint "sha512" }}
+  <script type="text/javascript" src="{{ $jsProcess.RelPermalink }}" integrity="{{ $jsProcess.Data.Integrity }}"></script>
+  {{/* Extend footer - eg. for extra scripts, etc. */}}
+  {{ if templates.Exists "partials/extend-footer.html" }}
+  {{ partialCached "extend-footer.html" . }}
+  {{ end }}
+</footer>
diff --git a/layouts/partials/talk-infobox.html b/layouts/partials/talk-infobox.html
index ea71a4b..e479722 100644
--- a/layouts/partials/talk-infobox.html
+++ b/layouts/partials/talk-infobox.html
@@ -1,4 +1,4 @@
-<p>
+<p class="mt-4 gap-4 border-2 p-5 pt-7 mt-6 rounded-lg shadow-lg opacity-75 drop-shadow-md">
 {{ if isset .Page.Params "speaker_url" }}
 <strong><i class="far fa-user fa-fw"></i></strong> <a href="{{ .Page.Params.Speaker_url }}">{{ .Page.Params.Speaker }}</a><br/>
 {{ else }}
@@ -11,14 +11,14 @@
 {{ with (eq $.Page.Params.Language "en") }}
 <strong><i class="fa fa-language fa-fw"></i>🌐 Language:</strong> Englisch/English<br/>
 {{ end }}
-<strong><i class="fa fa-map-marker fa-fw"></i>📍 Location:</strong> {{ partial "location" .Page.Params.Location }}
-</p>
+<strong><i class="fa fa-map-marker fa-fw"></i>📍 Location:</strong> {{ partial "location" .Page.Params.Location }}<br/>
 {{ if isset .Page.Params "recording" }}
-  <p><strong><i class="fa fa-video fa-fw"></i>📹 Livestream: </strong> <a href="{{ .Page.Params.Recording }}">{{ .Page.Params.Recording }}</a></p>
+  <strong><i class="hover:underline hover:decoration-primary-400 hover:text-primary-500"></i>📹 Livestream: </strong> <a href="{{ .Page.Params.Recording }}">{{ .Page.Params.Recording }}</a></p>
 {{ else }}
   {{ if and (eq .Page.Params.Streaming true) (not (isset .Page.Params "recording" )) }}
-    <p><strong>Stream:</strong> <a href="https://streaming.media.ccc.de/datengarten">streaming.media.ccc.de/datengarten</a></p>
+    <p><strong>Stream:</strong> <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://streaming.media.ccc.de/datengarten">streaming.media.ccc.de/datengarten</a></p>
   {{ else }}
     <p><strong><i class="fa fa-exclamation-triangle fa-fw"></i></strong> Dieser Vortrag wird <strong>nicht</strong> gestreamed</a>! / This talk will <strong>not</strong> be streamed!</p>
   {{ end }}
-{{ end }}
\ No newline at end of file
+{{ end }}
+</p>
\ No newline at end of file