feat: rank change arrow (↑/↓) in dashboard stats tile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ronny
2026-04-12 15:56:59 +02:00
parent 9c19188a7e
commit 1999ef8a21
2 changed files with 38 additions and 1 deletions
@@ -308,6 +308,20 @@
color: var(--gold);
}
.rankUp {
font-size: 0.7rem;
color: var(--success);
margin-left: 4px;
font-weight: 700;
}
.rankDown {
font-size: 0.7rem;
color: var(--error);
margin-left: 4px;
font-weight: 700;
}
.statLabel {
display: block;
font-size: 0.65rem;
@@ -360,6 +374,10 @@
line-height: 1.4;
}
.nudgeStreak {
border-left: 3px solid var(--error) !important;
}
/* ═══════════════════════════════════════
STATES
═══════════════════════════════════════ */
+20 -1
View File
@@ -49,6 +49,21 @@ export default function DashboardPage(_props: Props) {
const { hero, stats, nudges } = data;
const lastRank = parseInt(localStorage.getItem('tippspiel_last_rank') || '0');
const rankDiff = lastRank > 0 && stats.rank !== null ? lastRank - stats.rank : 0;
// Streak break detection via localStorage
const STREAK_KEY = 'tippspiel_last_streak';
const lastStreak = parseInt(localStorage.getItem(STREAK_KEY) || '0');
const streakBroken = lastStreak >= 3 && stats.streak === 0;
// Keep stored streak up to date when active
useEffect(() => {
if (stats.streak > 0) {
localStorage.setItem(STREAK_KEY, String(stats.streak));
}
}, [stats.streak]);
return (
<div className={styles.dashboard}>
{/* Hero Card */}
@@ -140,7 +155,11 @@ export default function DashboardPage(_props: Props) {
{/* Stats Row */}
<div className={styles.statsRow}>
<div className={`card ${styles.statTile}`}>
<span className={styles.statValue}>{stats.rank !== null ? stats.rank : '—'}</span>
<span className={styles.statValue}>
{stats.rank !== null ? stats.rank : '—'}
{rankDiff > 0 && <span className={styles.rankUp}>{rankDiff}</span>}
{rankDiff < 0 && <span className={styles.rankDown}>{Math.abs(rankDiff)}</span>}
</span>
<span className={styles.statLabel}>Dein Rang</span>
</div>
<div className={`card ${styles.statTile}`}>