Files
Nexumi/docs/PHASE-TRACKING.md
TheOnlyMace 95eed45ec4 Refactor embed handling and enhance user experience across components
- Integrated the new `buildEmbedFromPayload` function in Scheduler, Tags, and Welcome components to streamline embed creation and management.
- Updated validation schemas to require embed content checks, ensuring robust data integrity for embeds.
- Enhanced localization files to include new placeholder descriptions and improve user guidance for embed fields.
- Refactored embed parsing logic to utilize the `WelcomeEmbedSchema`, improving consistency and validation across the application.
2026-07-22 22:30:46 +02:00

7.5 KiB
Raw Blame History

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, Entrypoint websecure, certresolver=letsencrypt
  • Host-Port 3000 entfernt; 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; /login leitet 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 (Netz traefik-network muss existieren)
  • TLS-Zertifikat (Resolver-Name ggf. an Traefik anpassen)
  • Login / → Dashboard; Session-Cookie Secure

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 Job retention/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
  • /privacy und /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 inkl. Live-Vorschau
  • Basis: Titel, Beschreibung, Farbe
  • Erweitert: Author (Name/Icon/URL), Thumbnail, großes Bild, Footer (Text/Icon), Titel-URL, Timestamp
  • Welcome/Leave, Tags (EMBED) und Scheduler nutzen denselben Builder + buildEmbedFromPayload
  • Platzhalter in Text-/URL-Feldern inkl. {user.avatar} / {server.icon} (Welcome/Tags)

Manuell testen

  • Welcome/Leave-Embed mit Author, Thumbnail, Banner und Footer speichern und in Discord prüfen
  • Tag mit Antworttyp Embed (auch nur Bild/Author ohne Titel) erstellen/bearbeiten
  • Geplante Nachricht mit erweitertem Embed anlegen
  • Einfaches Embed (nur Titel/Beschreibung/Farbe) funktioniert weiter wie zuvor

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. deploymain mergen (nur auf Freigabe).