Modul, Routen und Public-Domain heißen jetzt einheitlich "feedback": - App-Registry: id 'community' → 'feedback', name 'Community' → 'Feedback', Icon Megaphone → HeartHalf (passt zum bereits-globalen heart-half-Icon am Module-Header und im PillNav-Usermenü) - Modul-Config: communityModuleConfig → feedbackModuleConfig - Routen-Refs: alle href/goto-Aufrufe in Modul-Views, MyWishesView, Onboarding-Wish, Profile-MyWishes auf /feedback umgestellt - /feedback/+layout: Brand "Mana Community" → "Mana Feedback", Megaphone → HeartHalf, "In Mana öffnen"-CTA zeigt jetzt auf /?app=feedback - Public-Mirror Domain: community.mana.how → feedback.mana.how (cloudflared-config.yml + docker-compose.macmini.yml CORS_ORIGINS + PUBLIC_MANA_ANALYTICS_URL_CLIENT). DNS muss separat angelegt werden. - Settings-Section: Hilfe-Text nennt jetzt feedback.mana.how Internal: community_show_real_name + community_karma DB-Spalten bleiben (Migration nicht im Scope dieses Renames). Settings-Search-Index-Kategorie 'community' bleibt ebenfalls — sie spiegelt das DB-Schema, nicht den User-Begriff. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
12 KiB
| status | owner | created | parent |
|---|---|---|---|
| living | till | 2026-04-27 | docs/plans/feedback-rewards-and-identity.md |
Feedback-Hub — Manual Test-Checklist
Was du im Browser durchklicken solltest, um Phase 3.A–3.F live verifiziert zu haben. Was hier nicht steht, ist durch automatisierte Tests abgedeckt (siehe
services/mana-analytics/CLAUDE.md§Tests).Format: jede Zeile ist eine Action + Expected Outcome. Hak ab im commit-message wenn du's durchgespielt hast — z.B.
chore(testing): manual checklist run-through 2026-04-28.
0. Setup — was du brauchst
| Account | Zweck | Wo |
|---|---|---|
Founder (du) — tills95@gmail.com |
Admin-Triage, Status-Setzen | mana.how Login |
| Test-A — neuer Account | Wish posten + Credits empfangen (Founder-Whitelist greift bei dir) | mana.how/register |
| Test-B — neuer Account | Auf Wishes reagieren, Reactioner-Bonus testen | mana.how/register |
Schnell-Login zwischen Accounts: Inkognito-Tab oder zweiter Browser. JWT lebt im Cookie + im SessionStorage; Inkognito-Sessions sind unabhängig.
Vor dem Test prüfen — Lokale Entwicklung (mana.how lokal auf :5173):
Die Web-App schickt Feedback-Calls an localhost:3064 (mana-analytics).
Wenn der Service nicht läuft, siehst du im Browser-Console
ERR_CONNECTION_REFUSED auf /api/v1/feedback/....
# In separatem Terminal vor dem Web-Dev-Server:
pnpm dev:analytics # → http://localhost:3064 (auto-watch)
Plus Auth + Credits, falls noch nicht laufend:
pnpm dev:auth # 3001
pnpm dev:credits # 3002
Vor dem Test prüfen — Production (mana.how):
ssh mana-server 'export DOCKER_HOST=unix:///Users/mana/.colima/default/docker.sock && /usr/local/bin/docker ps --filter "name=mana-analytics" --filter "name=mana-credits" --filter "name=mana-app-web" --filter "name=mana-auth" --format "{{.Names}}: {{.Status}}"'
Alle 4 sollten (healthy) sein. Wenn nicht: bash scripts/mac-mini/build-app.sh mana-web --force-free bzw. docker compose up -d <service>.
1. Onboarding-Wish (Phase 1, mit Phase 3.A Reward-Chip)
Account: Test-A (frisch registriert)
- Frisch einloggen → Onboarding-Flow startet (
/onboarding/name…/onboarding/wish) - Step 4 (Wish): Textarea + "Öffentlich teilen / Nur für Admins"-Toggle sichtbar
- Toggle auf "Öffentlich" lassen, ≥20 Zeichen tippen, "Fertig"
- Expect: Confirm zeigt
Sichtbar als Wachsame Eule #XXXX+ animierten Reward-Chip+5 Mana Credits - Auf
mana.how/credits(oder Workbench → Credits) sichtbar: Balance ist 5
Edge:
- Onboarding-Wish leer abschicken → Reward-Chip erscheint NICHT, kein Credit
- Toggle auf "Nur für Admins" → Wish kommt nicht im Public-Feed
2. Inline FeedbackHook + Modal (Phase 2)
Account: Test-A
- Workbench öffnen (
mana.how), eine Modul-Card (z.B. Todo) anklicken - Im ModuleShell-Header rechts ein 💡-Lightbulb-Icon sichtbar
- Klick → Modal öffnet sich, "Modul: todo"-Badge oben
- Category-Dropdown wählbar (feature/improvement/bug/praise/question)
- Senden → Confirm zeigt Eulen-Pseudonym +
+5 Mana Credits-Chip - Expect: Wenn du noch kein Modul-Wish hattest, Balance um +5 hoch
Globale Pille:
- Auf
/settingsoder/profile(kein Modul-Shell) → "Idee?"-Pille rechts unten erscheint - Pille klicken → Modal öffnet sich (gleiche Funktion)
- Expect auf
/onboarding,/feedback,/community: Pille nicht sichtbar
3. Public-Community-Feed (Phase 2 + 3.C Avatare)
Eingeloggt (Test-A) auf mana.how/community:
- Feed zeigt Test-A's Onboarding-Wish + Test-A's Modul-Wish
- Jeder Post hat: Pixel-Identicon-Avatar (32×32, deterministisch farbig) + Pseudonym
- Author-Klick → navigiert zu
/community/eule/<hash> - Reaction-Bar (👍❤️🚀🤔🎉) klickbar
- Filter: Category-Dropdown + Modul-Input
Anonymous (Inkognito) auf mana.how/community UND feedback.mana.how:
- Feed lädt ohne Login
- Pseudonym + Avatar sichtbar — NIE Klarname (auch wenn Test-A opted-in wäre)
- Reaction-Buttons read-only mit Tooltip "Login zum Reagieren"
- Expect: keine
myReactions-Highlighting auf den Pills
4. Reactions + Karma (Phase 2 + 3.C)
Account: Test-B (zweiter Account)
- Auf Test-A's Wish 👍 reagieren
- Expect sofort: Pill zeigt
1Counter, mit aktiv-Highlight - Expect in DB: Test-A's
community_karmaist 1 (über/community/eule/<test-a-hash>sichtbar als "1 Karma" / "Bronze-Eule" Badge)
Account-Wechsel zu Test-A:
/community/eule/<test-a-hash>öffnen- Expect: Hero zeigt Pixel-Avatar 96×96, Bronze-Eule-Badge, "1 Karma", Post-Count
- Eigene Posts sichtbar
Karma-Edge:
- Test-A reagiert auf eigenen Post 👍 → Karma bleibt unverändert (Self-React-Schutz)
- Test-B unreact (👍 nochmal klicken) → Test-A's Karma fällt zurück auf 0
5. Status-Flow + Loop-Closure (Phase 3.B)
Account: Founder (du, als Admin)
mana.how/community/adminöffnen- Test-A's Wish in der Liste
- Status auf
plannedändern → speichert sofort
Account: Test-A (Tab-Switch / nach Login):
- Expect: Toast erscheint beim nächsten App-Open:
Geplant: ›X‹ /profile/my-wishesöffnen → Tab "Inbox" zeigt 1 unread Notification mit Status-Pill- Tab "Eigene" zeigt Wish mit Status-Badge "Geplant" (lila)
Account: Founder, Status auf in_progress:
- Test-A: Toast
Wir bauen ›X‹ gerade - Inbox: 2 unread
- Tab "Eigene": Status "In Arbeit" (orange)
Account: Founder, Status auf completed:
- Test-A: Toast
Dein Wunsch ist live: ›X‹ · +500 Mana(success-style) - Test-A's Balance: +500 Credits sichtbar
- Test-B (der reagiert hat): Toast
Dein Like ist gelandet · +25 Mana - Test-B's Balance: +25 Credits
Idempotency:
- Founder ändert Status auf
in_progress, dann zurück aufcompleted - Test-A bekommt keine weiteren +500
- Test-A's Balance unverändert
6. AdminResponse + Notification (Phase 3.B)
Account: Founder, auf einem Test-A-Wish:
- In
/community/adminAdminResponse setzen (z.B. "Schauen wir uns an")
Account: Test-A:
- Toast:
Antwort vom Team: ›X‹(info-style, kein Credit) /profile/my-wishesTab "Inbox": admin-response-Notification/community/<id>(Detail-Page): Admin-Response-Block sichtbar/profile/my-wishesTab "Eigene": "Antwort vom Team"-Block neben dem Wish
7. Klarname-Toggle (Phase 3.C)
Account: Test-A
/settings→ "Community"-Tab anklicken- Expect: Avatar-Preview, "Wachsame Eule #XXXX" + Bronze-Eule-Badge + 0 Karma
- Toggle "Klarnamen neben Pseudonym zeigen" einschalten
- Expect: Switch animiert zu rechts (primary-color), Eulen-Display zeigt jetzt "… · Test-A's Klarname"
Eingeloggt (Test-A oder Test-B) auf mana.how/community:
- Test-A's Posts zeigen
Wachsame Eule #XXXX · Test-Aneben dem Avatar
Inkognito auf mana.how/community:
- Test-A's Posts zeigen NUR
Wachsame Eule #XXXX— kein Klarname, auch nicht im HTML-Source (View-Source prüfen)
Toggle aus:
- Switch wieder ausschalten → eingeloggte Sicht zeigt nur Pseudonym
- Expect: Optimistic-Update + Rollback bei Fehler funktioniert (kann man im Network-Panel sehen)
8. Eulen-Profil (Phase 3.C)
Eingeloggt auf /community, Klick auf einen Pseudonym-Link:
- Browse zu
/community/eule/<hash> - Hero: 96×96 Avatar, Pseudonym, Tier-Pill (Bronze/Silver/Gold/Platin), Karma-Count, Post-Count
- Liste aller public Posts dieser Eule
- "← Zurück zum Feed"-Link funktioniert
Inkognito (kein Login):
feedback.mana.how/community/eule/<hash>(oder mana.how/community/eule/) lädt SSR-rendered- Expect: Anzeige identisch — Avatar, Tier-Badge, Karma, Posts; KEIN Klarname
- HTML-Source: enthält
<meta name="description"...>mit Pseudonym + Karma + Post-Count
Edge:
/community/eule/abc(zu kurzer Hash) → 404 "Eulen-Profil nicht gefunden"/community/eule/<64-hex-noch-nie-genutzt>→ leere Liste, Karma 0, "Diese Eule hat noch nichts gepostet"
9. Threading / Replies
Account: Test-A öffnet einen seiner Wishes über /community/<id>:
- Detail-View zeigt Original-Wish + Reactions-Bar
- "X Antworten"-Sektion unten
- Eingeloggte Reply-Box am Ende mit Textarea + Antworten-Button
Account: Test-B reply-postet:
- Reply erscheint sofort in der Liste
- Expect: KEIN +5-Credit für Replies (nur top-level zählt — siehe Plan)
10. Phase 3.F — Legacy ist weg (Verifikation)
mana.how/feedback→ 404 (alte Route gelöscht)- App-Switcher / Workbench: kein "Feedback"-Modul mehr in der App-Liste
- Browser-Console im Submit-Flow: kein Aufruf an
/feedback/:id/vote(alte Vote-Endpoints sind raus)
11. Founder-Whitelist (du selbst kannst NICHT farmen)
Account: Founder (du):
-
Selbst einen Wish über Lightbulb posten
-
Expect: Confirm zeigt KEINEN +5-Reward-Chip (Whitelist greift)
-
Credits-Balance unverändert
-
Wish kommt im Feed an (nur kein Bonus)
-
Founder selbst auf eigenen Wish-Status
completedsetzen -
Expect: KEIN +500 ausgezahlt (founder-author skip)
-
Credits unverändert
12. Rate-Limit (10 Submits / 24h)
Account: Test-A (oder ein 3. Test-Account, weil Test-A schon Credits hat)
- 11 Wishes innerhalb weniger Minuten posten (jeweils ≥20 chars)
- Expect: 1.–10. Submit zeigt Reward-Chip, +5/Submit
- Expect: 11. Submit landet im Feed, aber Confirm zeigt keinen Reward-Chip
- Balance: +50 (nicht +55)
13. Voting-Score (für Sortierung)
Drei Wishes von Test-A vorbereiten, Test-B reagiert verschieden:
| Wish | Reactions von Test-B | Score |
|---|---|---|
| W1 | 👍 (weight 1) | 1 |
| W2 | 🚀 (weight 2) | 2 |
| W3 | 🤔 (weight 0) | 0 |
/communityFeed-Reihenfolge: W2 oben, W1 mitte, W3 unten / oder gleichberechtigt- Test-A's Karma: 2 (W3's 🤔 zählt nicht für score, aber zählt für Karma als 1; W1=1, W2=1, W3=1 → Karma=3)
- Hinweis: Karma += 1 pro Reaction (egal welches Emoji), nur Score-Weight unterscheidet
14. Mobile-Responsiveness (Quick-Check)
Alles oben in Mobile-Viewport (DevTools → 375×667 iPhone) durchgehen:
- Onboarding-Wish + Reward-Chip
- Lightbulb-Modal
- Floating "Idee?"-Pille (sollte sich auf "💡" verkürzen)
- /community Feed
- /community/eule/ Hero-Layout
- /profile/my-wishes Tabs
- /settings Community-Section
15. Quick-DB-Sanity (optional)
Auf Mac Mini psql mit mana_platform öffnen:
-- Wer hat wieviel Karma?
SELECT id, name, community_karma, community_show_real_name
FROM auth.users WHERE community_karma > 0 ORDER BY community_karma DESC LIMIT 10;
-- Letzte 10 Notifications
SELECT user_id, kind, title, credits_awarded, read_at, created_at
FROM feedback.feedback_notifications ORDER BY created_at DESC LIMIT 10;
-- Letzte 10 Credit-Grants (über mana-credits)
SELECT user_id, amount, balance_after, metadata->>'reason' AS reason, created_at
FROM credits.transactions WHERE type = 'grant' ORDER BY created_at DESC LIMIT 10;
-- Reaction-Counter pro Wish
SELECT id, title, reactions, score
FROM feedback.user_feedback WHERE is_public = true ORDER BY score DESC LIMIT 5;
Bekannte Lücken (nicht Test-blocker, aber gut zu wissen)
- Auto-Test-Zugriff:
pnpm test:integrationläuft gegenmana_platformdirekt — Test-User-Rows werden mittest--Prefix angelegt + cleanen sich auf. Kein Test-Pollution-Risiko. - Email-Notifications: Stand jetzt nur In-App-Toast/Inbox, keine Email. Phase 3.B.3 (Monthly-Digest) ist im Plan, nicht gebaut.
- Voice-Submit: Phase 3.E offen — Mic-Button im FeedbackQuickModal noch nicht da.
- Trending / Match-Existing: Phase 3.D offen.
- Karma-Decay: Alte Posts akkumulieren immer mehr Karma. Phase 3 backlog.
Wenn was kaputt ist
- Container-Logs:
ssh mana-server 'docker logs mana-analytics --tail 50'(analog auth/credits/web) - DB-Konsistenz: Sanity-SQLs oben
- Eintragsspur:
feedback.user_feedback.id→feedback.feedback_notifications.feedback_id→auth.users.id - Plan-Doc Phase 3 (
feedback-rewards-and-identity.md) für Architektur-Kontext