- Replaced standard input fields with DiscordChannelSelect and DiscordRoleSelect components in the BirthdaysForm, FeedsManager, GiveawaysManager, LevelingForm, LoggingForm, SchedulerManager, SelfRolesManager, StatsForm, SuggestionsConfigForm, TagsManager, TempVoiceForm, TicketConfigForm, and StarboardForm for improved user experience and consistency. - Updated state management to accommodate new component structures, enhancing data handling for channel and role selections across the application.
132 lines
5.6 KiB
Markdown
132 lines
5.6 KiB
Markdown
## 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
|
||
|
||
## Nächster geplanter Schritt
|
||
|
||
- Deploy auf Traefik-Server manuell verifizieren; danach ggf. `deploy` → `main` mergen (nur auf Freigabe).
|