- Dashboard "Jetzt tippen" opens TipModal directly instead of
navigating to /spiele (no more dead-end spielplan)
- After tipping, dashboard updates to show "Dein Tipp: X:Y ✓"
- Spielplan auto-opens all sections when only 1-2 exist
(no more collapsed "Demnächst" as only section)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previous pipeline built images locally via Portainer Docker API,
but Docker layer caching produced identical images. Now:
- Build with nocache=1
- Push to Gitea registry (git.home.rm-warpstation.de)
- Compose uses image: from registry instead of build:
- Redeploy with pullImage: true forces fresh container
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- StatsRing: compute all without || 1 fallback, guard segments/legend behind hasData, use seg.count in legend to avoid NaN
- useRankChange: skip toast if already shown this session via sessionStorage
- Toast: use ref for onDismiss to prevent timer reset on every render
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Apply global .card class to Dashboard, Profile, ConfettiReveal, and
Toast components for consistent glossy card appearance.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Donut chart showing exact/tendency/wrong distribution.
Scrollable tip history with point badges.
Fun stats: favorite tip, home win percentage.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Toast notification on rank change (up/down).
Streak display with milestones: 🔥 at 3, 🔥🔥 at 10, ⚡ at 20.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Shows animated reveal overlay for unseen match results.
Exact match (3pts) triggers confetti explosion.
Each reveal shown only once (localStorage tracking).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Success overlay with animated checkmark and 'Dein Tipp ist drin! 🎯'
message. Haptic vibration on mobile. Auto-closes after 1.2s.
- Add showSuccess state to TipModal
- Trigger vibration feedback on successful submit
- Display success overlay with popIn animation for checkmark
- Auto-close modal after success animation completes
- Add CSS animations (fadeIn, popIn) to TipModal.module.css
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each card state has distinct visual treatment:
- Open: standard with countdown timer when <1h
- Tipped: green accent with tip display
- Live: pulsing red dot
- Finished: points badge (gold/green/gray)
- Missed: grayed out
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Returns next tippable match (hero), user rank/points from leaderboard,
consecutive-tip streak, and up to 3 contextual nudges in one request.
Mounts at /api/dashboard; adds getDashboard() + DashboardData type to
the frontend API client.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixed bottom nav with Home/Spiele/Rangliste/Profil tabs.
Desktop keeps header nav. Admin hidden behind gear icon.
Main content padded to avoid overlap with bottom nav.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Strips all insight/agent state, fetchInsight() SSE function, audio playback
logic, and the insightWrapper JSX block that called /api/agent/* routes.
Also removes the matchHeader/groupBadge and kickoffBlock from the modal
(info already visible on the match card). Cleans all corresponding CSS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Im Dev-Modus wurde der devUser Query-Parameter aus der Browser-URL
nicht an die Backend-API-Calls weitergegeben. Dadurch liefen alle
Requests immer als devUser=1 (Ronny), unabhängig vom gewählten User.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Glanz-Overlay auf 55% angehoben, inset-Highlight und Border ergänzt
für MatchCard flagBox, TipModal flagLarge und pickerBtn.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Helmet CSP: upgrade-insecure-requests und HSTS für HTTP-Deployments deaktiviert
(war die Ursache der leeren Seite - Browser versuchte JS über HTTPS zu laden)
- Backend: statische Dateien werden jetzt in allen NODE_ENV-Modi serviert
- Frontend: IS_DEV erkennt auch VITE_TEST_MODE=true (Build-Zeit Variable)
- Dockerfile: VITE_TEST_MODE=true beim Vite-Build, NODE_ENV=development
- docker-compose.yml: NODE_ENV=development, CORS_ORIGIN=*
- Gitea Workflow: Auth-Token für git clone, Build via Portainer API statt lokaler Docker CLI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove node_modules/, .DS_Store, .vscode/ and build output from
git tracking. Adds .gitignore to prevent future accidental commits
of dependencies and generated files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>