feat(Moderation): implement moderation reports feature
All checks were successful
Deploy to production / deploy (push) Successful in 2m1s

- Added moderationRouter to handle moderation-related API routes.
- Introduced new methods in AdminController for fetching all regions, region types, and creating regions.
- Enhanced adminRouter with routes for moderation reports and status updates.
- Updated navigationController to include moderation reports in the admin menu.
- Implemented frontend components for reporting messages in the forum and managing moderation reports.
- Added internationalization support for moderation-related texts in multiple languages.
This commit is contained in:
Torsten Schulz (local)
2026-04-27 14:52:19 +02:00
parent 7fc9b55b59
commit a02fe1f008
36 changed files with 1162 additions and 17 deletions

View File

@@ -0,0 +1,30 @@
# AdSense Pre-Apply Review (ohne Live-Verifizierung)
Datum: 2026-04-27
## Gepruefte Seiten (Content/SEO/Policy)
1. `/`
2. `/blogs`
3. `/blogs/:slug` (Route vorhanden, contentbasiert)
4. `/vokabeltrainer`
5. `/bisaya-lernen`
6. `/deutsch-fuer-bisaya`
7. `/falukant`
8. `/minigames`
9. Footer-Dialogpfade: Impressum
10. Footer-Dialogpfade: Datenschutz
11. Footer-Dialogpfade: Kontakt
12. Header-Ad-Placement in App-Layout
## Ergebnis
- Header-Ad ist technisch korrekt eingebunden und route-gesteuert.
- `ads.txt` ist im Build-Input vorhanden.
- Pflichtlinks (Impressum/Datenschutz/Kontakt) sind global im Footer erreichbar.
- SEO-Basis (Sitemap, Canonical, Meta-Title/Description) ist fuer Kernseiten vorhanden.
- Moderations-/Adminpfade fuer UGC sind vorhanden und dokumentiert (`docs/ADSENSE_UGC_MODERATION.md`).
## Ausdruecklich ausgenommen
- Live-Verifizierung auf produktiver Domain (`https://www.your-part.de/ads.txt`) wurde bewusst nicht ausgefuehrt.

89
docs/ADSENSE_READINESS.md Normal file
View File

@@ -0,0 +1,89 @@
# AdSense Readiness Checkliste
Diese Checkliste hilft, YourPart vor und nach der AdSense-Anmeldung policy-sicher zu betreiben.
## 1) Pflichtseiten und Vertrauen
- [x] `Impressum` ist von jeder Seite aus erreichbar (Footer oder Header).
- [x] `Datenschutzerklaerung` ist von jeder Seite aus erreichbar.
- [x] `Kontakt` ist klar sichtbar (Formular oder E-Mail).
- [x] Seiten sind nicht im "Baustellen"-Status (keine "coming soon"-Texte auf Hauptseiten).
- [x] Navigation ist konsistent und fuehrt auf reale Inhalte.
## 2) Content-Mindestqualitaet
- [x] Es gibt ausreichend indexierbare Inhalte mit Substanz (Blog, Forum, Lerninhalte, Falukant-Texte).
- [x] Landing-Pages enthalten mehr als nur kurze Marketingtexte.
- [x] Keine duennen Seiten mit nur 1-2 Zeilen Text.
- [x] Keine automatisch erzeugten, redundanten oder fast identischen Seiten.
- [x] Sprachversionen sind gepflegt (keine groesseren Mischungen aus Fallback-Texten).
## 3) Ad-Platzierung und UX
- [x] Anzeigen stoeren nicht zentrale Navigation/Funktionen.
- [x] Im Header bleibt genug Abstand zu interaktiven Elementen (z. B. Sprachwahl).
- [x] Auf kleinen Screens bleibt die Anzeige responsive ohne Layout-Bruch.
- [x] Keine irrefuehrenden Labels wie "Download", "Start", "Weiter" direkt neben Ads.
- [x] Keine Anzeige auf Seiten mit sehr wenig Content.
## 4) Technische Anforderungen
- [x] AdSense Script einmalig im `head` eingebunden (`frontend/public/index.html`).
- [ ] `ads.txt` unter `https://www.your-part.de/ads.txt` erreichbar.
- [x] AdSlot-ID ist gesetzt (`VITE_ADSENSE_HEADER_SLOT`).
- [x] In Produktion wird nur mit echter Slot-ID ausgeliefert.
- [x] Keine JS-Fehler durch wiederholtes `adsbygoogle.push`.
## 5) Policy-Risiko und Moderation
- [x] UGC-Bereiche (Forum, Kommentare, Chat) haben Moderation/Reporting.
- [x] Erotik-/18+-Bereiche sind klar getrennt und nicht AdSense-besetzt.
- [x] Keine Anzeigen auf Seiten mit potentiell problematischem Inhalt.
- [x] Keine gekauften Klicks/Traffic-Anreize auf Anzeigen.
- [x] Kein "Klick auf Werbung, um zu unterstuetzen"-Wording.
## 6) SEO und Crawling-Basis
- [x] `robots.txt` blockiert nicht versehentlich wichtige Content-Seiten.
- [x] `sitemap.xml` ist aktuell und liefert relevante URLs.
- [x] Canonical-Tags sind auf Kernseiten korrekt gesetzt.
- [x] Titles/Descriptions sind sinnvoll und nicht generisch leer.
## 7) Vor Antrag (finaler Durchlauf)
- [x] Mindestens 10-20 qualitativ starke, oeffentliche Inhaltsseiten pruefen.
- [x] Manuell Mobile + Desktop testen (Header-Ad sichtbar, aber nicht stoerend).
- [x] Kein sichtbarer Platzhaltertext in Kernbereichen.
- [x] Impressum/Datenschutz/Kontakt von Startseite in max. 1 Klick erreichbar.
- [ ] `ads.txt` im Browser geoeffnet und korrekt.
## 8) Nach Freischaltung (Betrieb)
- [ ] Einnahmen + RPM beobachten, aber UX nicht verschlechtern.
- [ ] Ads nur auf Seiten mit ausreichend Inhalt ausrollen.
- [ ] Regelmaessig Policy Center in AdSense pruefen.
- [ ] Bei neuen Features vor Livegang kurz gegen diese Liste testen.
---
## Projekt-Hinweise fuer aktuellen Stand
- Header-Slot ist bereits eingebaut in `frontend/src/components/AppHeader.vue`.
- Script ist in `frontend/public/index.html` eingebunden.
- `ads.txt` liegt unter `frontend/public/ads.txt`.
- Der Header-Slot wird aktuell nur auf inhaltlich staerkeren Routen angezeigt und benoetigt `VITE_ADSENSE_HEADER_SLOT`.
## Ergebnis dieser Pruefung (heute)
### Erfuellt
- Footer verlinkt `Impressum`, `Datenschutz`, `Kontakt` global (`frontend/src/components/AppFooter.vue`).
- AdSense Script ist im Head eingebunden (`frontend/public/index.html`).
- `ads.txt` ist im Repo vorhanden (`frontend/public/ads.txt`).
- Header-Ad ist zwischen Logo und Sprachwahl und route-gebunden eingebaut (`frontend/src/components/AppHeader.vue`).
- Slot-Init ist gegen mehrfaches Push abgesichert (`adInitialized`-Guard).
### Offen vor Antrag
- Deployment-Check: `https://www.your-part.de/ads.txt` oeffnen und Inhalt verifizieren.
- Deployment-Check der produktiven ENV-Variablen nach Rollout.

View File

@@ -0,0 +1,51 @@
# UGC Moderation & AdSense Safety
Stand: 2026-04-27
## Ziel
Sicherstellen, dass nutzergenerierte Inhalte (UGC) fuer AdSense policy-konform betrieben werden:
- keine Monetarisierung direkt auf problematischen Inhalten
- nachvollziehbare Moderations- und Eskalationspfade
- klare Trennung zwischen oeffentlichen Landing-Inhalten und geschuetzten Community-Bereichen
## Geltungsbereich
- Forum / Themen
- Chat-Raeume
- Kontaktanfragen / Support-Kommunikation
- Erotik-Bereiche (mit separater Moderation)
## Bereits vorhandene Moderations-Werkzeuge im Projekt
- Admin-Forumverwaltung (`frontend/src/dialogues/admin/ForumAdminView.vue`)
- Loesch- und Verwaltungsaktionen fuer Foreninhalte.
- Admin-Chatraumverwaltung (`frontend/src/views/admin/ChatRoomsView.vue`, `frontend/src/views/admin/RoomsView.vue`)
- Loeschen und Verwalten von Raeumen.
- Kontaktanfragen-Backoffice (`frontend/src/views/admin/ContactsView.vue`)
- Moderierbare/anwaltbare Kontaktprozesse.
- Erotik-Moderationsbereich in Navigation (`navigation.*.admin.eroticmoderation`).
## AdSense-Betriebsregeln (verbindlich)
1. Anzeigen nur auf inhaltlich starken, stabilen Seiten schalten.
2. Keine Anzeigen in UGC-Bereichen mit erhoehtem Risiko ohne aktive Moderation.
3. Keine Anzeigen in/nahe 18+-Bereichen.
4. Keine CTA-Texte, die Klicks auf Anzeigen nahelegen.
5. Bei Policy-Hinweisen aus AdSense sofort Placement temporär reduzieren.
## Operativer Ablauf
1. Neue Community-Funktion vor Livegang auf UGC-Risiko pruefen.
2. Entscheiden, ob Ads dort zugelassen werden oder nicht.
3. Moderationsweg dokumentieren (zustandiges Admin-Panel).
4. Nach Go-Live kurzfristig Inhalte/Reports beobachten.
## Nachweis fuer AdSense-Readiness
Diese Datei dient als interne, revisionsfaehige Dokumentation, dass:
- Moderationsoberflaechen vorhanden sind,
- Risikozonen erkannt sind,
- und Anzeigenplatzierung bewusst eingeschraenkt wird.