diff --git a/README.md b/README.md
index dd862b9..8c8a65f 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ up but links break if the file is missing or malformed.
| --- | --- |
| `jitsiLauncher` | Domain of this Jitsi launcher. Used for the meeting URLs created by the meeting creator (Nextcloud, adhoc link). |
| `jitsiHost` | Jitsi domain. Used for the browser fallback URL, the desktop protocol URL and the UID of generated ICS files. |
-| `nextcloudBase` | Nextcloud instance used by the "Create in Nextcloud" button (calendar event creation). |
+| `nextcloudBase` | Nextcloud instance for calendar event creation. The "Create in Nextcloud Calendar" button is only shown if this is set. |
| `launchTimeout` | Timeout in ms before the browser fallback is shown after trying to start the jitsi-meet-electron client. |
| `backgroundImage` | Path to the page background image. Empty: no background. |
| `logo` | Path to the logo shown in the logo bar. Empty: logo bar stays hidden. |
diff --git a/assets/launch.js b/assets/launch.js
index 16eba86..c02a055 100644
--- a/assets/launch.js
+++ b/assets/launch.js
@@ -296,6 +296,23 @@ function applyLogo() {
logoBar.classList.remove("hidden");
}
+/* ============================================================
+ * NEXTCLOUD BUTTON
+ * ============================================================
+ */
+
+/*
+ * Nur anzeigen, wenn eine Nextcloud-Instanz konfiguriert
+ * ist (CONFIG.nextcloudBase in assets/config.json).
+ */
+function applyNextcloudButton() {
+ if (!CONFIG.nextcloudBase || !createNextcloudButton) {
+ return;
+ }
+
+ createNextcloudButton.classList.remove("hidden");
+}
+
/* ============================================================
* DOM elements
* ============================================================
@@ -1449,6 +1466,7 @@ async function start() {
applyBackgroundImage();
applyLogo();
+ applyNextcloudButton();
await loadTranslations();
diff --git a/launch.html b/launch.html
index b747325..9e6c2dd 100644
--- a/launch.html
+++ b/launch.html
@@ -289,7 +289,7 @@
-