- Integrated PlaceholderHelp component into multiple forms including WelcomeForm, TagsManager, and StatsForm to provide contextual hints for available placeholders. - Updated DiscordEmbedBuilder to support placeholder presets, improving user experience when creating embeds. - Enhanced localization files to include new placeholder descriptions, ensuring clarity in both English and German. - Refactored related components to maintain consistency in placeholder handling across the application.
7.3 KiB
7.3 KiB
Phase 6 – WebUI-Fundament (Status: abgeschlossen, manuell bestätigt)
- OAuth/Sessions, Settings-Framework, Layout, Modul-Toggles, Access-Rules
- Login manuell bestätigt
Phase 7 – WebUI Modul-Seiten + Owner-Panel (Status: abgeschlossen, manuell bestätigt)
Abgeschlossen
- Alle Modul-Dashboard-Seiten, Commands-Seite, Overview-Aktivität
- Owner-Panel (
/owner: Übersicht, Guilds, Users, Flags, Presence, Team, Jobs, Changelog, Audit) - Prisma
20260722190000_phase7_owner, Shared Zod (dashboard.ts,owner.ts) - BullMQ WebUI↔Bot, Presence-/Wartungsmodus-Anbindung
- Manuell bestätigt (User-Freigabe)
Phase 8 – Landing, Status, Rechtsseiten (Status: abgeschlossen, manuell bestätigt)
Abgeschlossen
- Landing
/, Status/status, Rechtsseiten, Public APIs, Core-Commands,docs/verification.md - Manuell bestätigt (User-Freigabe)
Deploy-Branch (deploy) – Traefik + Dashboard-Domain
Abgeschlossen (Code auf Branch deploy; main unverändert)
- Traefik-Vollstack: Compose-Netz
traefik-network(external) +internal - WebUI hinter Traefik: Host
dashboard.nexumi.de, Entrypointwebsecure,certresolver=letsencrypt - Host-Port
3000entfernt; nur Traefik exponiert die WebUI WEBUI_URL=https://dashboard.nexumi.de(OAuth-Callback:/api/auth/callback)- Marketing-Landing archiviert unter
apps/webui/src/archived/landing-page.tsx /zeigt Login;/loginleitet auf/weiter (Query erhalten)- SPEC-Abweichung (bewusst): öffentliche Landing später extern auf
nexumi.de; Dashboard unter Subdomain - Rechtsseiten vollständig (Impressum/Datenschutz/ToS) DE+EN; Locale per Accept-Language (Cookie hat Vorrang)
- Plesk-Landing unter
landingpage/mit lokalen Rechtsseiten (impressum.php,datenschutz.php,nutzungsbedingungen.php)
Manuell testen (Deploy)
- DNS
dashboard.nexumi.de→ Traefik-Host - Discord OAuth Redirect:
https://dashboard.nexumi.de/api/auth/callback docker compose up -d --build(Netztraefik-networkmuss existieren)- TLS-Zertifikat (Resolver-Name ggf. an Traefik anpassen)
- Login
/→ Dashboard; Session-CookieSecure
Post-Phase – Premium + DSGVO (Status: implementiert, manuelle Tests offen)
Abgeschlossen (Code)
- Premium:
PremiumTierConfig, Guild-/User-Zuweisung, Owner-UI/owner/premium - Limits enforced (Tags/Feeds/Backups) in Bot + WebUI
- DSGVO:
/privacy,/gdpr delete confirm:true(Löschung/Anonymisierung +GdprDeletionLog) - Log-Retention:
LoggingConfig.retentionDays+ täglicher Jobretention/purgeExpiredLogs - Snipe standardmäßig aus (
GuildSettings.snipeEnabled, Toggle in Allgemeine Einstellungen) - Migration
20260722200000_premium_gdpr
Manuell testen
- Owner
/owner/premium: Limits speichern, Guild PREMIUM zuweisen - Free-Limit: mehr Tags/Feeds/Backups als Free-Cap → Fehler
/privacyund/gdpr delete confirm:true- Logging-Retention im Dashboard setzen
- Snipe: default aus; nach Aktivierung in Einstellungen nutzbar
Bewusst offen
- Musik- und KI-Modul (nur auf Zuruf)
- Premium-Zahlungsanbindung
- Externe Marketing-Landing auf
nexumi.de
Post-Phase – Dashboard-UI + Command-Palette + Landing-Polish (Status: implementiert)
Abgeschlossen (Code)
- Guild-/Owner-Shell: Branding, Sticky-Header, mobile Sidebar-Sheet, Overview-Polish
- Globale Cmd/Ctrl+K-Suche: Seiten, Slash-Commands, Einstellungsfelder (Deep-Links)
- Settings-Feld-Registry + Form-Anchors; Commands-Seite liest
?q= - Plesk-Landing: Inter, Hero-Hierarchie, dezente Motion, Designsprache an WebUI
Manuell testen
- Dashboard: Cmd/Ctrl+K → Seite, Command und Option navigieren (Hash-Scroll)
- Mobile: Sidebar-Sheet + Such-Trigger
- Overview und Owner-Panel Layout
- Landing Light/Dark (
prefers-color-scheme) + CTAs
Bewusst offen
- Musik- und KI-Modul (nur auf Zuruf)
- Premium-Zahlungsanbindung
Post-Phase – Channel-Picker überall (Status: implementiert)
Abgeschlossen (Code)
DiscordChannelSelect/DiscordChannelMultiSelect+useGuildChannels- Alle Modul-Forms: Kanal-ID-Texteingaben durch durchsuchbare Channel-Auswahl ersetzt
- Voice-/Category-Filter für TempVoice/Stats/Tickets
Post-Phase – Role-Picker überall (Status: implementiert)
Abgeschlossen (Code)
DiscordRoleSelect/DiscordRoleMultiSelect+useGuildRoles- Modul-Forms/Manager: Rollen-ID-Texteingaben durch durchsuchbare Role-Auswahl ersetzt (Welcome, Verification, Leveling, Logging, Birthdays, Giveaways, Tags, Tickets, Access Rules, Feeds, Scheduler, Commands)
- Selfroles-Textarea (
roleId | label | emoji) bewusst unverändert
Manuell testen
- Rollen in den Modul-Settings per Dropdown setzen und speichern
- Multi-Select (Autoroles, No-XP-Roles, Support-Roles, …) speichert string[] korrekt
- Access-Rules: Rolle wählen und Module zuweisen
Post-Phase – Command-Global-Rules + Channel-Picker (Status: implementiert)
Abgeschlossen (Code)
- Globale Command Channel-Whitelist/-Blacklist in
GuildSettings+ Commands-UI - Searchable Multi-Select für Kanäle/Rollen (statt Raw-IDs) auf der Commands-Seite
- APIs:
/commands/globals,/channels,/roles - Bot erzwingt globale + per-Command Channel/Role/Cooldown-Regeln in
routeCommand - Migration
20260722210000_command_global_channels
Manuell testen
- Commands: globale Whitelist/Blacklist speichern, in Discord prüfen
- Per-Command Channel/Rollen per Dropdown setzen
- Deaktivierter Command / Cooldown antwortet ephemeral
Post-Phase – Discord Embed-Builder (Status: implementiert)
Abgeschlossen (Code)
- Wiederverwendbare
DiscordEmbedBuilder-Komponente (Titel, Beschreibung, Farbe) inkl. Live-Vorschau - Welcome/Leave: JSON-Textareas durch Embed-Builder ersetzt
- Tags: Embed-Felder bei Antworttyp EMBED (Schema + Persistenz)
- Scheduler: optionales Embed beim Erstellen (Schema + Persistenz)
Manuell testen
- Welcome/Leave-Embed speichern und in Discord prüfen
- Tag mit Antworttyp Embed erstellen/bearbeiten
- Geplante Nachricht mit Embed (optional mit Text) anlegen
Post-Phase – Logging Multi-Event pro Kanal (Status: implementiert)
Abgeschlossen (Code)
- Logging-UI: pro Log-Kanal mehrere Event-Typen per Multi-Select
- Bestehende 1:1-Mappings werden beim Laden nach Kanal gruppiert; Speichern expandiert wieder auf
LogChannel-Zeilen - Event-Typen sind exklusiv (DB
@@unique([guildId, eventType])) – Auswahl in einer Zeile entfernt sie aus anderen
Manuell testen
- Mehrere Events einem Kanal zuweisen und speichern
- Event von Kanal A nach Kanal B umhängen (verschwindet bei A)
- Bot schreibt Logs der gewählten Events in den richtigen Kanal
Post-Phase – Platzhalter-Hilfe (Status: implementiert)
Abgeschlossen (Code)
- Aufklappbare
PlaceholderHelp-Komponente mit Kopieren pro Token - Kontextspezifische Presets (Welcome, Tags, Birthdays, Leveling, TempVoice, Stats, Feeds, Scheduler)
- Welcome-DM nutzt jetzt dieselben Platzhalter wie Welcome-Text (nicht nur
{user})
Manuell testen
- Welcome: Liste aufklappen, Platzhalter kopieren, in Embed/Text einfügen
- Tags/Birthdays/Leveling/Stats/Feeds/Scheduler: nur die jeweiligen Tokens sichtbar
Nächster geplanter Schritt
- Deploy auf Traefik-Server manuell verifizieren; danach ggf.
deploy→mainmergen (nur auf Freigabe).