# Pyramid — Feature-Checklist & Implementierungsstand

> Stand: Mai 2026  
> Legende: ✅ Fertig | ⚠️ Teilweise / Bug | ❌ Fehlt | 🔧 In Arbeit

---

## Inhaltsverzeichnis
- [Authentifizierung](#authentifizierung)
- [Raumliste](#raumliste)
- [Chat / Timeline](#chat--timeline)
- [Nachrichtentypen](#nachrichtentypen)
- [Nachrichtenfunktionen](#nachrichtenfunktionen)
- [Direct Messages](#direct-messages)
- [E2EE Verschlüsselung](#e2ee-verschlüsselung)
- [Push Notifications](#push-notifications)
- [VoIP & Calls](#voip--calls)
- [Settings / Einstellungen](#settings--einstellungen)
- [Benutzerprofil](#benutzerprofil)
- [Raum-Einstellungen](#raum-einstellungen)
- [Suche](#suche)
- [Medien](#medien)
- [Read Receipts & Typing](#read-receipts--typing)
- [Spaces](#spaces)
- [Windows / Desktop](#windows--desktop)
- [Sonstige Features](#sonstige-features)
- [Dokumentations-Vollständigkeit](#dokumentations-vollständigkeit)

---

## Authentifizierung
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Login mit Passwort | ✅ | `login_page.dart`, `login_notifier.dart` |
| Homeserver-Auswahl | ✅ | `server_page.dart` — HTTPS-Prefix fix, .well-known Autodiscovery |
| Session wiederherstellen (init) | ✅ | `matrix_client.dart` — `client.init()` beim App-Start |
| Logout | ✅ | Via Matrix SDK `client.logout()` |
| Login-Redirect nach Init | ✅ | `router.dart` — StreamProvider-basierter Guard |
| SSO / OAuth | ❌ | Nicht implementiert |
| Registrierung / Account erstellen | ❌ | Keine UI |
| Login mit Token | ❌ | Nur Passwort-Login |
| Multi-Account | ❌ | Nur ein Account gleichzeitig |
| UIAA Re-Auth (Passwort ändern) | ❌ | Kein UI |

---

## Raumliste
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Raumliste anzeigen | ✅ | `rooms_page.dart`, `room_list_item.dart` |
| Sortierung nach letzter Aktivität | ✅ | In `rooms_provider.dart` |
| Avatar-Anzeige (MXC) | ✅ | `mxc_image.dart` |
| Vorschautext (letztes Event) | ✅ | `room_list_item.dart` |
| Ungelesen-Badge | ✅ | `notificationCount` |
| Ungelesen-Punkt (kein Count) | ✅ | Bei `notificationCount == 0` aber ungelesen |
| Zeitstempel-Formatierung | ✅ | Heute: HH:MM, andere: DD.MM |
| DM-Erkennung (`isDirectChat`) | ✅ | Typ-Differenzierung in Liste |
| Space-Filterung | ✅ | `SpacesRail` filtert nach aktiver Space |
| Einladungen anzeigen | ⚠️ | Membership.invite vorhanden, gesonderte Ansicht fehlt |
| Raum suchen / filtern | ✅ | Via `search_modal.dart` |
| Archivierte Räume | ❌ | Kein UI für left-rooms |
| Raum erstellen (Knopf) | ✅ | `create_join_dialog.dart` |
| Raum beitreten (Alias) | ✅ | `create_join_dialog.dart` |

---

## Chat / Timeline
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Nachrichten anzeigen | ✅ | `message_bubble.dart`, `message_group.dart` |
| Gruppen-Bubbles (gleicher Sender) | ✅ | Continuation-Nachrichten (eingerückt, kein Avatar) |
| Datums-Trenner | ✅ | Tagstrennlinie |
| Ungelesen-Trenner ("Neue Nachrichten") | ✅ | `fullyRead`-Position |
| Scroll-to-Unread beim Öffnen | ✅ | `chat_view.dart` |
| History-Nachladen beim Scrollen | ✅ | `_onScroll()` → `requestHistory(60)` |
| Optimistische Nachrichtenanzeige | ✅ | SDK fügt Event mit Status `sending` ein |
| Nachrichtenstatus (senden/sent) | ✅ | Uhren-Icons |
| Timeline-Cleanup (`cancelSubscriptions`) | ✅ | In `dispose()` |
| Sprung zu bestimmtem Event | ⚠️ | Infrastruktur vorhanden, kein UI |
| Event-Suche in Timeline | ❌ | Nur globale Suche |

---

## Nachrichtentypen
| Typ | Status | Details |
|-----|--------|---------|
| Text (`m.text`) | ✅ | Vollständig |
| Bild (`m.image`) | ✅ | Thumbnail + Vollansicht mit Zoom |
| Video (`m.video`) | ✅ | Playback via `media_kit` |
| Audio (`m.audio`) | ✅ | Player mit Progress/Dauer |
| Datei (`m.file`) | ✅ | Download mit MIME-Icon |
| Sticker (`m.sticker`) | ✅ | Anzeige und Senden (Sticker-Picker) |
| Sprachnachricht (MSC3245) | ⚠️ | Audio-Aufnahme fehlt, Abspielen funktioniert |
| Standort (`m.location`) | ❌ | Nicht implementiert |
| Emote (`m.emote`) | ❌ | Kein gesondertes Rendering |
| Poll (MSC3381) | ❌ | Nicht implementiert |
| Verschlüsselte Nachrichten | ✅ | Automatisch via SDK, Fehler-UI vorhanden |
| Redacted-Events | ⚠️ | Wird angezeigt, kein "Nachricht gelöscht"-Platzhalter |

---

## Nachrichtenfunktionen
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Antworten (Reply) | ✅ | Swipe-Geste + Quote-Anzeige |
| Reaktionen (Emojis) | ✅ | Quick-Picker + vollständiger Emoji-Picker |
| Reaktionen entfernen | ⚠️ | UI zum Entfernen fehlt |
| Nachrichten bearbeiten (Edit) | ⚠️ | `getDisplayEvent()` vorhanden, Senden nicht im UI |
| Nachricht löschen (Redact) | ❌ | Kein Button / Dialog |
| Threads | ❌ | Nicht implementiert |
| Polls | ❌ | Nicht implementiert |
| Weitersenden (Forward) | ❌ | Nicht implementiert |
| Kopieren (Text) | ⚠️ | Nicht explizit sichtbar |
| Long-Press Auswahl-Modus | ✅ | `message_bubble.dart` — Long-Press aktiviert Selection |
| Bulk-Aktionen (Auswahl) | ⚠️ | Modus vorhanden, Aktionen begrenzt |
| Pinned Messages Panel | ✅ | `pinned_messages_panel.dart` |
| Pins setzen (UI-Aktion) | ❌ | Kein Pin-Button in Nachricht |
| Linkvorschau | ❌ | Keine URL-Preview |
| Mention-Links klickbar | ✅ | `@user`-Links via `url_launcher` |

---

## Direct Messages
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Neuen DM starten | ✅ | `new_dm_dialog.dart` → `startDirectChat()` |
| User-Verzeichnis-Suche | ✅ | `searchUserDirectory()` |
| DM-Erkennung in Raumliste | ✅ | `room.isDirectChat` |
| Partner-Avatar/Name | ✅ | `directChatMatrixID` → Profil laden |
| DM-Verschlüsselung | ✅ | Standard E2EE bei DM-Erstellung |
| Gruppen-DM | ⚠️ | Erstellbar, kein gesondertes UI |
| DM vergessen / verlassen | ⚠️ | Kein UI-Button |
| DM-spezifische Notification-Sounds | ❌ | Nicht implementiert |

---

## E2EE Verschlüsselung
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Vodozemac Rust-Crypto | ✅ | `flutter_vodozemac` initialisiert in `matrix_client.dart` |
| E2EE in verschlüsselten Räumen | ✅ | Automatisch via SDK |
| Bootstrap-Flow (SSSS + Cross-Signing) | ✅ | `bootstrap_dialog.dart` — vollständige State-Machine |
| Cross-Signing Setup | ✅ | Master-, Self- und User-Signing-Key Erstellung |
| Key Backup (online) | ✅ | SSSS-gesichertes Backup |
| Schlüssel-Verifikation (SAS/Emoji) | ✅ | Via Bootstrap-Flow |
| QR-Code-Verifikation | ⚠️ | SDK-Support vorhanden, kein UI |
| Device-Liste anzeigen | ❌ | Kein UI |
| Gerät sperren/blockieren | ❌ | Kein UI |
| Fehlende Schlüssel anfordern | ✅ | `requestMissingSessionKeys()` bei Bad-Encrypted |
| Entschlüsselungs-Fehler-UI | ✅ | "Nachricht konnte nicht entschlüsselt werden" + Schlüssel-Button |
| Schlüssel importieren/exportieren | ❌ | Kein UI (Infrastruktur vorhanden) |

---

## Push Notifications
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| FCM Token Registrierung | ✅ | `fcm_push_service.dart` |
| Pusher auf Homeserver | ✅ | `postPusher()` mit Sygnal-Gateway |
| Token-Refresh Handling | ✅ | `onTokenRefresh.listen()` |
| PushService.kt (native FCM) | ✅ | Läuft auch bei geschlossener App |
| Benachrichtigung bei geschlossener App | 🔧 | APK neu gebaut, noch nicht getestet |
| Absender-Name in Notification | ✅ | HTTP-Fetch von Matrix API in PushService.kt |
| Verschlüsselte Nachricht entschlüsseln | ⚠️ | "Neue Nachricht" bei geschlossener App; `decryptAndUpdateNotification` bei Hintergrund-App |
| Inline Reply in Notification | 🔧 | ReplyReceiver auf getActivity umgestellt — APK gebaut, ungetestet |
| Antwort wirklich abschicken | 🔧 | `replyFromNotification` MethodChannel — APK gebaut, ungetestet |
| Gelesen-Button in Notification | ✅ | `ACTION_DISMISS` über `ReplyReceiver.kt` |
| Notification bei Hintergrund-App | ✅ | Heartbeat-Check verhindert Duplikate |
| Notification-Kanal Android | ✅ | `pyramid_messages`, HIGH Importance |
| Stabile Notification-ID | ✅ | `stableId(roomId)` — gleicher Algo in Kotlin + Dart |
| Windows Notification | ✅ | `local_notifier` (Windows Toast) |
| Windows Taskbar Flash | ✅ | `WindowsTaskbar.setProgressMode()` |
| Ausstehende Reply beim App-Öffnen senden | ✅ | `_sendPendingReply()` bei Resume + Sync |
| Push Rules konfigurieren | ❌ | Kein UI |
| Raum stumm schalten | ❌ | Kein UI |
| Nur-Erwähnung-Modus | ✅ | `notifMentionOnlyDmProvider` — Preferences |
| iOS Push | ❌ | Kein iOS-Build |
| Web Push | ❌ | Kein Web-Build |

---

## VoIP & Calls
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Matrix WebRTC Legacy-Calls | ✅ | `voip_manager.dart` — CallSession |
| LiveKit SFU-Calls | ✅ | `livekit_call_manager.dart` |
| Unified Call-UI | ✅ | `voice_channel.dart` |
| Audio-Call | ✅ | Mikrofon + Speaker |
| Video-Call | ✅ | Kamera + Remote-Video |
| Screen-Sharing | ✅ | `screen_share_picker.dart` |
| Video-Qualitätsstufen | ✅ | SD/HD/FHD/4K Presets |
| Mute-Toggle | ✅ | `setMicrophoneEnabled()` |
| Deafen-Toggle | ✅ | Audio komplett stumm |
| Kamera-Toggle | ✅ | `setCameraEnabled()` |
| Kamera-Wechsel (Front/Rück) | ⚠️ | SDK-Support vorhanden |
| Teilnehmer-Grid | ✅ | Mehrere Participants anzeigen |
| Lokale Video-Vorschau | ✅ | Overlay-Widget |
| Klingel-System (to-device) | ⚠️ | Infrastruktur vorhanden, Klingelton fehlt |
| Incoming-Call-UI | ⚠️ | Kein dediziertes Klingel-Screen |
| Call-History | ❌ | Nicht implementiert |
| TURN-Server via Matrix | ⚠️ | `getTurnServer()` — ob konfiguriert unklar |
| Hintergrund-Foreground-Service | ✅ | `FlutterForegroundService` via webrtc |
| MatrixRTC Membership-Events | ✅ | `io.pyramid.voice.presence` State-Events |
| LiveKit-Token-Exchange | ✅ | `livekit_token.dart` |

---

## Settings / Einstellungen
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Settings-Seite (Hauptseite) | ⚠️ | `settings_page.dart` — NUR PLATZHALTER |
| Settings Modal | ✅ | `settings_modal.dart` — vollständiger Modal |
| Dark/Light Mode | ✅ | `themeModeProvider` + Toggle |
| Akzentfarbe (5 Presets) | ✅ | Amber/Coral/Mint/Violet/Cobalt/Lime |
| Eckenradius Slider | ✅ | `radiusProvider` |
| UI-Motion Toggle | ✅ | `motionProvider` |
| UI-Density Toggle | ✅ | `densityProvider` |
| Desktop Notifications | ✅ | `notifDesktopProvider` |
| Notification Sound | ✅ | `notifSoundProvider` |
| Nachrichtenvorschau | ✅ | `notifPreviewProvider` |
| Nur-Erwähnung-Modus | ✅ | `notifMentionOnlyDmProvider` |
| Presence anzeigen (Online) | ✅ | `privacyPresenceProvider` |
| Read Receipts senden | ✅ | `privacyReadReceiptsProvider` |
| Typing-Indikator senden | ✅ | `privacyTypingProvider` |
| Profil bearbeiten (Name/Avatar) | ❌ | Kein UI |
| Geräte-Verwaltung | ❌ | Kein UI |
| Session-Liste | ❌ | Kein UI |
| Passwort ändern | ❌ | Kein UI |
| Account löschen | ❌ | Kein UI |
| Raumspezifische Benachrichtigungen | ❌ | Kein UI |
| Sprache / Lokalisierung | ❌ | Nur Systemsprache |
| Barrierefreiheit | ❌ | Keine Einstellungen |

---

## Benutzerprofil
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Avatar anzeigen (MXC) | ✅ | `mxc_image.dart` überall |
| Displayname auflösen | ✅ | Fallback auf `@username` |
| Online-Präsenz senden | ✅ | `setPresence(online)` alle 10s in `app_shell.dart` |
| Präsenz-Anzeige anderer User | ⚠️ | Infrastruktur, kein UI |
| Profil-Popover (Hover-Karte) | ✅ | `profile_popover.dart` |
| Eigenes Profil bearbeiten | ❌ | Kein UI |
| Avatar hochladen | ❌ | Kein UI |
| Status-Nachricht | ❌ | Nicht implementiert |
| User ignorieren / blockieren | ❌ | Kein UI |
| User melden | ❌ | Kein UI |

---

## Raum-Einstellungen
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Space-Admin Panel (Name/Avatar/Banner) | ✅ | `space_admin_dialog.dart` — Overview-Tab |
| Power-Level-Editor (Mitglieder) | ✅ | `space_admin_dialog.dart` — Members-Tab |
| Permissions-Tab (Raum-PLs) | ✅ | `space_admin_dialog.dart` — Permissions-Tab |
| Kind-Räume verwalten | ✅ | `space_admin_dialog.dart` — Channels-Tab |
| Raum-Name ändern (normaler Raum) | ❌ | Kein UI |
| Raum-Thema ändern | ❌ | Kein UI |
| Raum-Avatar ändern | ❌ | Kein UI |
| Join-Rules ändern | ❌ | Kein UI |
| History-Visibility ändern | ❌ | Kein UI |
| E2EE aktivieren | ❌ | Kein UI |
| Raum-Alias verwalten | ❌ | Kein UI |
| Raum verlassen (Button) | ❌ | Kein UI |
| Raum vergessen (forget) | ❌ | Kein UI |
| User einladen (aus Chat) | ❌ | Kein UI |
| Kick / Ban (Moderation) | ❌ | Kein UI |

---

## Suche
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Server-seitige Nachrichtensuche | ✅ | `search_modal.dart` → `/search` API |
| Lokale Raum-/DM-Suche | ✅ | Filter auf `client.rooms` |
| Personen-Suche | ✅ | Lokale DM-Partner-Suche |
| Medien-Filter (Bilder/Videos/Audio) | ✅ | `search_modal.dart` |
| Paginierung (nextBatch) | ✅ | Infinite scroll |
| Suchergebnis-Highlighting | ✅ | Suchbegriff hervorheben |
| Debounced Query (400ms) | ✅ | `debounce` in Suchfeld |
| Öffentliches Raumverzeichnis | ❌ | Kein UI zum Entdecken |
| User-Verzeichnis-Suche (global) | ✅ | In `new_dm_dialog.dart` |

---

## Medien
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Bild senden | ✅ | `MatrixImageFile` + Upload |
| Bild anzeigen (Thumbnail + Vollbild) | ✅ | `MediaViewer` mit Zoom/Pan |
| Video senden | ✅ | |
| Video abspielen | ✅ | `media_kit` |
| Audio senden | ✅ | |
| Audio abspielen | ✅ | Player mit Progress |
| Datei senden | ✅ | `MatrixFile` |
| Datei herunterladen | ✅ | MIME-Icon + Browser-Öffner |
| Clipboard-Bild einfügen (Windows) | ✅ | FFI + `clipboard_image.dart` |
| Drag & Drop Upload (Desktop) | ✅ | `desktop_drop` |
| GIF-Picker (Giphy) | ✅ | Trending + Suche + Favoriten |
| Sticker-Picker | ✅ | Pack-Browser |
| Bild-Komprimierung | ✅ | `shrinkImageMaxDimension` |
| Verschlüsselte Medien | ✅ | Automatisch bei E2EE-Räumen |
| Sprachnachricht aufnehmen | ❌ | Kein Recorder |
| Kamera direkt (in App) | ❌ | Nur Gallery-Picker |
| Dokument-Vorschau | ❌ | Kein PDF-Viewer |
| Media-Galerie (Raum-Mediathek) | ❌ | Kein UI |

---

## Read Receipts & Typing
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Read Receipts senden | ✅ | `setReadMarker()` (privacy-gesteuert) |
| Eigene ✓✓ Bestätigung | ✅ | Anzeige auf eigenen Nachrichten |
| Read-Marker anderer anzeigen | ⚠️ | Position-Marker vorhanden, kein Avatar-Stack |
| Typing-Indikator senden | ✅ | 7s Auto-Timeout |
| Typing-Indikator empfangen | ✅ | Anzeige-Platzhalter |
| Typing-User-Namen anzeigen | ⚠️ | Platzhalter, keine Namen |

---

## Spaces
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Space-Erkennung (`isSpace`) | ✅ | |
| Spaces-Rail (Sidebar) | ✅ | `spaces_rail.dart` |
| Space-Filterung der Raumliste | ✅ | Nur Räume der aktiven Space |
| Space-Admin Panel | ✅ | `space_admin_dialog.dart` |
| Space erstellen | ✅ | `create_join_dialog.dart` |
| Kind-Räume hinzufügen | ✅ | In Space-Admin |
| Kind-Räume entfernen | ✅ | In Space-Admin |
| Voice-Präsenz in Space | ✅ | `io.pyramid.voice.presence` Events |
| Space-Banner | ✅ | Mit Crop-Dialog |
| Verschachtelte Spaces | ⚠️ | Anzeige, kein eigener Sub-Space-Rail |
| Space beitreten (öffentlich) | ⚠️ | Technisch möglich, kein Discovery-UI |

---

## Windows / Desktop
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Windows Build | ✅ | CMake + MSIX |
| Windows Notifications | ✅ | `local_notifier` |
| Taskbar Flash | ✅ | `WindowsTaskbar` |
| Update-Checker (Gitea API) | ✅ | `update_checker.dart` — 4h Intervall |
| Update-Banner | ✅ | `update_banner.dart` |
| Update-Download | ✅ | `update_download_dialog.dart` |
| APK Auto-Install (Android) | ✅ | Kotlin MethodChannel + FileProvider |
| PC Update (exe/msix) Download | ⚠️ | Release-Script pusht .zip statt .exe → öffnet Git-Seite |
| Drag & Drop | ✅ | `desktop_drop` |
| Clipboard Paste (Bild) | ✅ | FFI Windows API |
| Resizable Sidebar | ✅ | `panel_layout.dart` — Drag-Divider |
| Keyboard Shortcuts | ⚠️ | Enter zum Senden, Ctrl+V — kein vollständiges System |
| System Tray | ❌ | Nicht implementiert |
| Fenster-Badge (ungelesen) | ⚠️ | Nur Taskbar-Flash, kein Zähler |
| macOS / Linux | ❌ | Nicht gebaut/getestet |

---

## Sonstige Features
| Feature | Status | Details / Datei |
|---------|--------|-----------------|
| Emoji-Picker | ✅ | Kategorisiert + Suche |
| Quick-Reaktionen (6 Emojis) | ✅ | Hover-Aktionsleiste |
| Mitglieder-Panel (Raum) | ✅ | `members/` — Teilnehmerliste |
| Profil-Popover (Hover) | ✅ | `profile_popover.dart` |
| Neuer-DM Dialog | ✅ | `new_dm_dialog.dart` |
| Raum-erstellen Dialog | ✅ | `create_join_dialog.dart` |
| Nachricht-Auswahl-Modus | ✅ | Long-Press |
| Reply-Swipe-Geste | ✅ | Rechts-wischen zum Antworten |
| Immersive-Mode (Android) | ✅ | Status-Bar ausgeblendet |
| PyramidLoader (Ladeanimation) | ✅ | `pyramid_loader.dart` |
| Rich-Text-Editor | ❌ | Kein Markdown/Formatting-UI |
| HTML-Nachrichtenrendering | ❌ | Kein `flutter_html` |
| Message Forwarding | ❌ | |
| Nachrichtenübersetzung | ❌ | |
| Bot-Kommandos (`/`) | ❌ | |
| Matrix-URI Handler | ❌ | Kein Deep-Link-Handler |
| Barcode/QR-Scanner | ⚠️ | Nur in Verifikation |

---

## Dokumentations-Vollständigkeit

| Doku-Abschnitt | Vollständig | Anmerkungen |
|----------------|-------------|-------------|
| 01 Auth | ✅ | SSO, UIAA, alle Login-Flows |
| 02 Räume | ✅ | Create, Join, Spaces, Power Levels |
| 03 Nachrichten | ✅ | Text, Replies, Edits, Threads, Polls |
| 04 DMs | ✅ | Alle DM-Flows |
| 05 Medien | ✅ | Upload, Download, alle Dateitypen |
| 06 E2EE | ✅ | Setup, SAS, Cross-Signing, Key Backup |
| 07 Push | ✅ | FCM, Push Rules, Pyramid-Architektur |
| 08 VoIP | ✅ | Legacy m.call, MatrixRTC |
| 08b LiveKit | ✅ | **KOMPLETT** — Server-Setup bis Flutter-UI |
| 09 Profil | ✅ | Presence, Account-Data, Tags |
| 10 Room-Admin | ✅ | Power Levels, Moderation, ACL, Synapse Admin |
| 11 Suche | ✅ | Event-Suche, User-Suche, Raumverzeichnis |
| 12 Schnellreferenz | ✅ | Alle Enums, Widget-Patterns, Fehlerhandling |

---

## Prioritäts-Roadmap

### 🔴 Kritisch (bald testen/fixen)
1. **Notification-Reply testen** — Neue APK (getActivity-Fix) installieren und Reply-Flow verifizieren
2. **Benachrichtigung bei geschlossener App** — Mit neuer APK testen (PushService.kt Ansatz)
3. **PC Update-Script** — `.zip` durch `.exe`-Installer ersetzen in `scripts/release.ps1`

### 🟠 Wichtig (nächste Features)
4. **Nachricht löschen (Redact)** — Long-Press-Menü → `event.redactEvent()`
5. **Nachricht bearbeiten** — Edit-Modus im Composer → `sendTextEvent(editEventId:...)`
6. **Raum-Einstellungen** — Name/Thema/Avatar für normale Räume (`room.setName()` etc.)
7. **Profil bearbeiten** — Displayname + Avatar in Settings
8. **Registrierung** — Account-Erstellung im Onboarding

### 🟡 Sinnvoll (mittelfristig)
9. **Einladungen-Screen** — Pending invites sichtbar darstellen
10. **Kick/Ban UI** — Moderation aus der Mitgliederliste
11. **Device-Verwaltung** — Eigene Sessions anzeigen + löschen
12. **Rich-Text-Editor** — Markdown/Formatierung in Nachrichten
13. **Klingelton bei eingehendem Call** — Audio + dedizierter Klingel-Screen
14. **Lautlos/Stumm per Raum** — Push-Rules im UI

### 🟢 Nice-to-have
15. Sprachnachrichten aufnehmen
16. HTML-Nachrichtenrendering (`flutter_html`)
17. Matrix-URI Deep-Links
18. Media-Galerie pro Raum
19. System Tray (Windows)
20. Polls / Abstimmungen
