feat: round user tracker + fix INVITED status not updating on login
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled

- Replace Semi-Finalist Tracker with Round User Tracker on dashboard
- New getRoundUserStats query: round-aware account activation stats
- Round selector dropdown to view any round's passed projects
- sendAccountReminders now accepts optional roundId for scoped reminders
- Fix: signIn callback now sets status=ACTIVE for INVITED users on login
- DB fix: 5 users who logged in via magic link but stayed INVITED → ACTIVE

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 14:00:19 +01:00
parent ee8e90132e
commit 8cdcc85555
4 changed files with 335 additions and 21 deletions

View File

@@ -35,7 +35,7 @@ import { ActivityFeed } from '@/components/dashboard/activity-feed'
import { CategoryBreakdown } from '@/components/dashboard/category-breakdown'
import { DashboardSkeleton } from '@/components/dashboard/dashboard-skeleton'
import { RecentEvaluations } from '@/components/dashboard/recent-evaluations'
import { SemiFinalistTracker } from '@/components/dashboard/semi-finalist-tracker'
import { RoundUserTracker } from '@/components/dashboard/round-user-tracker'
type DashboardContentProps = {
editionId: string
@@ -126,11 +126,7 @@ export function DashboardContent({ editionId, sessionName }: DashboardContentPro
{ limit: 8 },
{ enabled: !!editionId, refetchInterval: 30_000 }
)
const { data: semiFinalistStats } = trpc.dashboard.getSemiFinalistStats.useQuery(
{ editionId },
{ enabled: !!editionId, refetchInterval: 120_000 }
)
const { data: featureFlags } = trpc.settings.getFeatureFlags.useQuery()
// Round User Tracker is self-contained — it fetches its own data
if (isLoading) {
return <DashboardSkeleton />
@@ -277,17 +273,9 @@ export function DashboardContent({ editionId, sessionName }: DashboardContentPro
<SmartActions actions={nextActions} />
</AnimatedCard>
{semiFinalistStats && semiFinalistStats.byCategory.length > 0 && (
<AnimatedCard index={6}>
<SemiFinalistTracker
byCategory={semiFinalistStats.byCategory}
byAward={semiFinalistStats.byAward}
unactivatedProjects={semiFinalistStats.unactivatedProjects}
editionId={editionId}
reminderThresholdDays={featureFlags?.accountReminderDays}
/>
</AnimatedCard>
)}
<AnimatedCard index={6}>
<RoundUserTracker editionId={editionId} />
</AnimatedCard>
<AnimatedCard index={7}>
<ActivityFeed activity={liveActivity ?? recentActivity} />