fix(applicant-feedback): correct scales, hide jury-internal criteria, declutter UI
All checks were successful
Build and Push Docker Image / build (push) Successful in 8m11s

- globalScore is /10 (was hardcoded /100); use real round.name (was 'Round N')
- Render criteria by type: numeric uses parsed scale (1-10/0-10/1-5),
  text shows as quoted block, boolean/advance hidden as jury-internal
- Drop redundant cross-round stat strip and per-round Score Comparison
- Plain language: 'Lowest/Highest' instead of 'Range', 'reviews' not 'evaluations'
- Settings toggles update optimistically (was waiting for refresh)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matt
2026-05-07 12:21:52 +02:00
parent 55e6abc161
commit b7a4eac2b1
3 changed files with 179 additions and 239 deletions

View File

@@ -1949,7 +1949,7 @@ export const applicantRouter = router({
results.push({
roundId: round.id,
roundName: `Evaluation Round ${i + 1}`,
roundName: round.name,
roundType: 'EVALUATION',
evaluationCount: evaluations.length,
evaluations: evaluations.map((ev) => ({
@@ -1997,13 +1997,8 @@ export const applicantRouter = router({
orderBy: { sortOrder: 'asc' },
})
let evalCounter = 0
let liveFinalCounter = 0
let deliberationCounter = 0
for (const round of rounds) {
if (round.roundType === 'EVALUATION') {
evalCounter++
const evaluations = await ctx.prisma.evaluation.findMany({
where: {
assignment: { projectId: project.id, roundId: round.id },
@@ -2023,7 +2018,7 @@ export const applicantRouter = router({
results.push({
roundId: round.id,
roundName: `Evaluation Round ${evalCounter}`,
roundName: round.name,
roundType: 'EVALUATION',
evaluationCount: evaluations.length,
evaluations: evaluations.map((ev) => ({
@@ -2036,7 +2031,6 @@ export const applicantRouter = router({
})),
})
} else if (round.roundType === 'LIVE_FINAL') {
liveFinalCounter++
// LiveVote scores — anonymized
// Only show jury votes, not audience votes
const votes = await ctx.prisma.liveVote.findMany({
@@ -2056,7 +2050,7 @@ export const applicantRouter = router({
results.push({
roundId: round.id,
roundName: `Live Final ${liveFinalCounter}`,
roundName: round.name,
roundType: 'LIVE_FINAL',
evaluationCount: votes.length,
evaluations: votes.map((v) => ({
@@ -2069,7 +2063,6 @@ export const applicantRouter = router({
})),
})
} else if (round.roundType === 'DELIBERATION') {
deliberationCounter++
// DeliberationVote — per-juror votes for this project
const votes = await ctx.prisma.deliberationVote.findMany({
where: {
@@ -2089,7 +2082,7 @@ export const applicantRouter = router({
results.push({
roundId: round.id,
roundName: `Deliberation ${deliberationCounter}`,
roundName: round.name,
roundType: 'DELIBERATION',
evaluationCount: votes.length,
evaluations: votes.map((v) => ({