diff --git a/backend/migrations/20260722_add_member_user_link.sql b/backend/migrations/20260722_add_member_user_link.sql
index d814ab34..9e27e28d 100644
--- a/backend/migrations/20260722_add_member_user_link.sql
+++ b/backend/migrations/20260722_add_member_user_link.sql
@@ -1,4 +1,4 @@
-ALTER TABLE member
- ADD COLUMN user_id INT NULL,
- ADD UNIQUE KEY member_user_id_unique (user_id),
- ADD CONSTRAINT member_user_id_fk FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE SET NULL;
+ALTER TABLE `member`
+ ADD COLUMN `user_id` INT NULL,
+ ADD UNIQUE KEY `member_user_id_unique` (`user_id`),
+ ADD CONSTRAINT `member_user_id_fk` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE SET NULL;
diff --git a/backend/migrations/20260724_align_calendar_events_schema.sql b/backend/migrations/20260724_align_calendar_events_schema.sql
new file mode 100644
index 00000000..b7e9232a
--- /dev/null
+++ b/backend/migrations/20260724_align_calendar_events_schema.sql
@@ -0,0 +1,11 @@
+-- Ergänzt eine bereits vorhandene ältere calendar_events-Tabelle um die
+-- Felder des aktuellen Kalender-Modells. Bestehende Termine bleiben erhalten.
+ALTER TABLE `calendar_events`
+ ADD COLUMN IF NOT EXISTS `event_type` VARCHAR(32) NOT NULL DEFAULT 'club_event' AFTER `club_id`,
+ ADD COLUMN IF NOT EXISTS `status` VARCHAR(32) NOT NULL DEFAULT 'planning' AFTER `event_type`,
+ ADD COLUMN IF NOT EXISTS `description` TEXT NULL AFTER `title`,
+ ADD COLUMN IF NOT EXISTS `location` VARCHAR(255) NULL AFTER `description`,
+ ADD COLUMN IF NOT EXISTS `registration_deadline` DATE NULL AFTER `end_date`,
+ ADD COLUMN IF NOT EXISTS `organizer_user_id` INT NULL AFTER `registration_deadline`,
+ ADD COLUMN IF NOT EXISTS `category` VARCHAR(64) NULL AFTER `organizer_user_id`,
+ ADD COLUMN IF NOT EXISTS `notes` TEXT NULL AFTER `category`;
diff --git a/docs/manual_sql_migrations.md b/docs/manual_sql_migrations.md
index 88b80dc9..78657794 100755
--- a/docs/manual_sql_migrations.md
+++ b/docs/manual_sql_migrations.md
@@ -24,10 +24,10 @@ Sichere optionale Zuordnung eines Login-Kontos zu einem Vereinsmitglied für
persönliche Mitgliederfunktionen:
```sql
-ALTER TABLE member
- ADD COLUMN user_id INT NULL,
- ADD UNIQUE KEY member_user_id_unique (user_id),
- ADD CONSTRAINT member_user_id_fk FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE SET NULL;
+ALTER TABLE `member`
+ ADD COLUMN `user_id` INT NULL,
+ ADD UNIQUE KEY `member_user_id_unique` (`user_id`),
+ ADD CONSTRAINT `member_user_id_fk` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE SET NULL;
```
Bestehende Mitglieder bleiben zunächst unverknüpft. Die Zuordnung erfolgt
@@ -98,6 +98,24 @@ ALTER TABLE club_communication_recipients
ADD INDEX club_communication_recipients_member_read (club_id, member_id, read_at);
```
+### Bestehende `calendar_events`-Tabelle an das aktuelle Modell anpassen
+
+Wenn die Tabelle vor der Kalendererweiterung angelegt wurde, fehlen die neuen
+Metadaten-Spalten. Die Migration ist additiv und lässt bestehende Termine
+unverändert:
+
+```sql
+ALTER TABLE `calendar_events`
+ ADD COLUMN IF NOT EXISTS `event_type` VARCHAR(32) NOT NULL DEFAULT 'club_event' AFTER `club_id`,
+ ADD COLUMN IF NOT EXISTS `status` VARCHAR(32) NOT NULL DEFAULT 'planning' AFTER `event_type`,
+ ADD COLUMN IF NOT EXISTS `description` TEXT NULL AFTER `title`,
+ ADD COLUMN IF NOT EXISTS `location` VARCHAR(255) NULL AFTER `description`,
+ ADD COLUMN IF NOT EXISTS `registration_deadline` DATE NULL AFTER `end_date`,
+ ADD COLUMN IF NOT EXISTS `organizer_user_id` INT NULL AFTER `registration_deadline`,
+ ADD COLUMN IF NOT EXISTS `category` VARCHAR(64) NULL AFTER `organizer_user_id`,
+ ADD COLUMN IF NOT EXISTS `notes` TEXT NULL AFTER `category`;
+```
+
## 2026-03-17
### `predefined_activities.exclude_from_stats`
diff --git a/frontend/src/components/schedule/ScheduleLayoutShell.vue b/frontend/src/components/schedule/ScheduleLayoutShell.vue
index 38b27ff3..4978f8fa 100755
--- a/frontend/src/components/schedule/ScheduleLayoutShell.vue
+++ b/frontend/src/components/schedule/ScheduleLayoutShell.vue
@@ -41,15 +41,15 @@