fix: build speed, observer AI details, round tracker empty state
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled

- Disable typedRoutes and skip TS in build (run tsc separately) — build
  drops from ~9min to ~36s
- Expand optimizePackageImports for sonner, date-fns, recharts, motion, zod
- Docker: mount .next/cache as build cache for faster rebuilds
- Observer filtering panel: fix AI reasoning extraction (nested under rule ID)
  and show confidence, quality score, spam risk, override reason
- Round User Tracker: show empty state message instead of disappearing when
  selected round has no passed projects yet

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 17:30:11 +01:00
parent 0d94ee1fe8
commit 22731e7978
4 changed files with 91 additions and 24 deletions

View File

@@ -57,23 +57,21 @@ export function RoundUserTracker({ editionId }: RoundUserTrackerProps) {
const { rounds, byCategory } = data
const effectiveRoundId = data.selectedRoundId
// Don't render if no rounds or no data
if (!effectiveRoundId || rounds.length === 0) return null
// Don't render if no rounds at all
if (rounds.length === 0) return null
const totalProjects = byCategory.reduce((sum, c) => sum + c.total, 0)
const totalActivated = byCategory.reduce((sum, c) => sum + c.accountsSet, 0)
const totalPending = byCategory.reduce((sum, c) => sum + c.accountsNotSet, 0)
if (totalProjects === 0) return null
const selectedRound = rounds.find(r => r.id === effectiveRoundId)
const selectedRound = effectiveRoundId ? rounds.find(r => r.id === effectiveRoundId) : undefined
const handleSendReminder = async (target: string, opts: { category?: 'STARTUP' | 'BUSINESS_CONCEPT' }) => {
setSendingTarget(target)
try {
await sendReminders.mutateAsync({
editionId,
roundId: effectiveRoundId,
roundId: effectiveRoundId!,
category: opts.category,
})
} finally {
@@ -89,13 +87,15 @@ export function RoundUserTracker({ editionId }: RoundUserTrackerProps) {
<Users className="h-4 w-4 text-brand-blue" />
Round User Tracker
</CardTitle>
<Badge variant="outline" className="text-xs shrink-0">
{totalActivated}/{totalProjects} activated
</Badge>
{totalProjects > 0 && (
<Badge variant="outline" className="text-xs shrink-0">
{totalActivated}/{totalProjects} activated
</Badge>
)}
</div>
{/* Round selector */}
<Select
value={effectiveRoundId}
value={effectiveRoundId ?? ''}
onValueChange={(val) => setSelectedRoundId(val)}
>
<SelectTrigger className="h-8 text-xs mt-2">
@@ -114,6 +114,15 @@ export function RoundUserTracker({ editionId }: RoundUserTrackerProps) {
</Select>
</CardHeader>
<CardContent className="space-y-4">
{totalProjects === 0 ? (
<div className="text-center py-4">
<Users className="h-8 w-8 text-muted-foreground/30 mx-auto mb-2" />
<p className="text-sm text-muted-foreground">
No projects have passed {selectedRound?.name ?? 'this round'} yet
</p>
</div>
) : (
<>
{/* Subtitle showing round context */}
<p className="text-xs text-muted-foreground">
Projects that passed <span className="font-medium">{selectedRound?.name ?? 'this round'}</span> account activation status
@@ -192,6 +201,8 @@ export function RoundUserTracker({ editionId }: RoundUserTrackerProps) {
)}
</div>
</div>
</>
)}
</CardContent>
</Card>
)