2026-02-14 15:26:42 +01:00
|
|
|
{
|
|
|
|
|
"name": "mopc-platform",
|
|
|
|
|
"version": "0.1.0",
|
|
|
|
|
"private": true,
|
|
|
|
|
"type": "module",
|
|
|
|
|
"scripts": {
|
|
|
|
|
"dev": "next dev --turbopack",
|
|
|
|
|
"build": "next build",
|
|
|
|
|
"start": "next start",
|
|
|
|
|
"lint": "next lint",
|
|
|
|
|
"format": "prettier --write .",
|
|
|
|
|
"typecheck": "tsc --noEmit",
|
|
|
|
|
"db:generate": "prisma generate",
|
|
|
|
|
"db:push": "prisma db push",
|
|
|
|
|
"db:migrate": "prisma migrate dev",
|
|
|
|
|
"db:migrate:deploy": "prisma migrate deploy",
|
|
|
|
|
"db:studio": "prisma studio",
|
|
|
|
|
"db:seed": "tsx prisma/seed.ts",
|
|
|
|
|
"db:seed:candidatures": "tsx prisma/seed-candidatures.ts",
|
|
|
|
|
"test": "vitest",
|
|
|
|
|
"test:e2e": "playwright test"
|
|
|
|
|
},
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"@auth/prisma-adapter": "^2.7.4",
|
|
|
|
|
"@blocknote/core": "^0.46.2",
|
|
|
|
|
"@blocknote/mantine": "^0.46.2",
|
|
|
|
|
"@blocknote/react": "^0.46.2",
|
|
|
|
|
"@dnd-kit/core": "^6.3.1",
|
|
|
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
|
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
|
|
|
"@hookform/resolvers": "^3.9.1",
|
|
|
|
|
"@mantine/core": "^8.3.13",
|
|
|
|
|
"@mantine/hooks": "^8.3.13",
|
|
|
|
|
"@notionhq/client": "^2.3.0",
|
|
|
|
|
"@prisma/client": "^6.19.2",
|
|
|
|
|
"@radix-ui/react-alert-dialog": "^1.1.4",
|
|
|
|
|
"@radix-ui/react-avatar": "^1.1.2",
|
|
|
|
|
"@radix-ui/react-checkbox": "^1.1.3",
|
|
|
|
|
"@radix-ui/react-collapsible": "^1.1.2",
|
|
|
|
|
"@radix-ui/react-dialog": "^1.1.4",
|
|
|
|
|
"@radix-ui/react-dropdown-menu": "^2.1.4",
|
|
|
|
|
"@radix-ui/react-label": "^2.1.1",
|
|
|
|
|
"@radix-ui/react-popover": "^1.1.4",
|
|
|
|
|
"@radix-ui/react-progress": "^1.1.1",
|
|
|
|
|
"@radix-ui/react-radio-group": "^1.2.2",
|
|
|
|
|
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
|
|
|
"@radix-ui/react-select": "^2.1.4",
|
|
|
|
|
"@radix-ui/react-separator": "^1.1.1",
|
|
|
|
|
"@radix-ui/react-slider": "^1.2.2",
|
|
|
|
|
"@radix-ui/react-slot": "^1.1.1",
|
|
|
|
|
"@radix-ui/react-switch": "^1.1.2",
|
|
|
|
|
"@radix-ui/react-tabs": "^1.1.2",
|
Observer platform overhaul: Nivo charts, round-type stats, UX improvements
Phase 1: Fix 6 backend data bugs in analytics.ts (roundName filtering,
unscored projects, criteria scores, activeRoundCount scoping, email
privacy leaks in juror consistency + workload)
Phase 2-3: Migrate all 9 chart components from Recharts to Nivo
(@nivo/bar, @nivo/line, @nivo/pie, @nivo/scatterplot) with shared brand
theme, scoreGradient colors, and STATUS_COLORS map. Fixes scatter plot
outlier coloring and pie chart label visibility bugs.
Phase 4: Add round-type-aware stats (getRoundTypeStats backend +
RoundTypeStatsCards component) showing appropriate metrics per round
type (intake/filtering/evaluation/submission/mentoring/live/deliberation).
Phase 5: UX improvements — Stage→Round terminology, clickable dashboard
round links, URL-based round selection (?round=), round type indicators
in selectors, accessible Toggle-based cross-round comparison, sortable
project table columns (title/score/evaluations), brand score colors on
dashboard bar chart with aria labels.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 21:44:38 +01:00
|
|
|
"@radix-ui/react-toggle": "^1.1.10",
|
2026-02-14 15:26:42 +01:00
|
|
|
"@radix-ui/react-tooltip": "^1.1.6",
|
|
|
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
|
|
|
"@tanstack/react-query": "^5.62.0",
|
Observer platform redesign Phase 4: migrate charts to Tremor, redesign all pages
- Migrate 9 chart components from Nivo to @tremor/react (BarChart, AreaChart, DonutChart, ScatterChart)
- Remove @nivo/*, @react-spring/web dependencies (45 packages removed)
- Redesign dashboard: 6 stat tiles, competition pipeline, score distribution, juror workload, activity feed
- Add new /observer/projects page with search, filters, sorting, pagination, CSV export
- Restructure reports page from 5 tabs to 3 (Progress, Jurors, Scores & Analytics) with per-tab CSV export
- Redesign project detail: breadcrumb nav, score card header, 3-tab layout (Overview/Evaluations/Files)
- Update loading skeletons to match new layouts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 21:45:01 +01:00
|
|
|
"@tremor/react": "^3.18.7",
|
2026-02-14 15:26:42 +01:00
|
|
|
"@trpc/client": "^11.0.0-rc.678",
|
|
|
|
|
"@trpc/react-query": "^11.0.0-rc.678",
|
|
|
|
|
"@trpc/server": "^11.0.0-rc.678",
|
|
|
|
|
"bcryptjs": "^3.0.3",
|
|
|
|
|
"class-variance-authority": "^0.7.1",
|
|
|
|
|
"clsx": "^2.1.1",
|
|
|
|
|
"cmdk": "^1.0.4",
|
|
|
|
|
"csv-parse": "^6.1.0",
|
|
|
|
|
"date-fns": "^4.1.0",
|
2026-02-17 10:08:04 +01:00
|
|
|
"franc": "^6.2.0",
|
2026-02-14 15:26:42 +01:00
|
|
|
"html2canvas": "^1.4.1",
|
|
|
|
|
"jspdf": "^4.1.0",
|
|
|
|
|
"jspdf-autotable": "^5.0.7",
|
|
|
|
|
"leaflet": "^1.9.4",
|
|
|
|
|
"lucide-react": "^0.563.0",
|
2026-02-17 10:27:36 +01:00
|
|
|
"mammoth": "^1.11.0",
|
2026-02-14 15:26:42 +01:00
|
|
|
"minio": "^8.0.2",
|
|
|
|
|
"motion": "^11.15.0",
|
|
|
|
|
"next": "^15.1.0",
|
|
|
|
|
"next-auth": "^5.0.0-beta.25",
|
|
|
|
|
"next-themes": "^0.4.6",
|
|
|
|
|
"nodemailer": "^7.0.7",
|
|
|
|
|
"openai": "^6.16.0",
|
|
|
|
|
"papaparse": "^5.4.1",
|
AI category-aware evaluation: per-round config, file parsing, shortlist, advance flow
- Per-juror cap mode (HARD/SOFT/NONE) in add-member dialog and members table
- Jury invite flow: create user + add to group + send invitation from dialog
- Per-round config: notifyOnAdvance, aiParseFiles, startupAdvanceCount, conceptAdvanceCount
- Moved notify-on-advance from competition-level to per-round setting
- AI filtering: round-tagged files with newest-first sorting, optional file content extraction
- File content extractor service (pdf-parse for PDF, utf-8 for text files)
- AI shortlist runs independently per category (STARTUP / BUSINESS_CONCEPT)
- generateAIRecommendations tRPC endpoint with per-round config integration
- AI recommendations UI: trigger button, confirmation dialog, per-category results display
- Category-aware advance dialog: select/deselect projects by category with target caps
- STAGE_ACTIVE bug fix in assignment router
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 10:09:52 +01:00
|
|
|
"pdf-parse": "^2.4.5",
|
2026-02-14 15:26:42 +01:00
|
|
|
"react": "^19.0.0",
|
|
|
|
|
"react-day-picker": "^9.13.0",
|
|
|
|
|
"react-dom": "^19.0.0",
|
|
|
|
|
"react-easy-crop": "^5.5.6",
|
|
|
|
|
"react-hook-form": "^7.54.2",
|
|
|
|
|
"react-leaflet": "^5.0.0",
|
|
|
|
|
"react-phone-number-input": "^3.4.14",
|
|
|
|
|
"sonner": "^2.0.7",
|
|
|
|
|
"superjson": "^2.2.2",
|
|
|
|
|
"tailwind-merge": "^3.4.0",
|
2026-02-17 10:27:36 +01:00
|
|
|
"unpdf": "^1.4.0",
|
2026-02-14 15:26:42 +01:00
|
|
|
"use-debounce": "^10.0.4",
|
|
|
|
|
"zod": "^3.24.1"
|
|
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
|
|
|
|
"@playwright/test": "^1.49.1",
|
|
|
|
|
"@types/bcryptjs": "^2.4.6",
|
|
|
|
|
"@types/leaflet": "^1.9.21",
|
|
|
|
|
"@types/node": "^25.0.10",
|
|
|
|
|
"@types/nodemailer": "^7.0.9",
|
|
|
|
|
"@types/papaparse": "^5.3.15",
|
AI category-aware evaluation: per-round config, file parsing, shortlist, advance flow
- Per-juror cap mode (HARD/SOFT/NONE) in add-member dialog and members table
- Jury invite flow: create user + add to group + send invitation from dialog
- Per-round config: notifyOnAdvance, aiParseFiles, startupAdvanceCount, conceptAdvanceCount
- Moved notify-on-advance from competition-level to per-round setting
- AI filtering: round-tagged files with newest-first sorting, optional file content extraction
- File content extractor service (pdf-parse for PDF, utf-8 for text files)
- AI shortlist runs independently per category (STARTUP / BUSINESS_CONCEPT)
- generateAIRecommendations tRPC endpoint with per-round config integration
- AI recommendations UI: trigger button, confirmation dialog, per-category results display
- Category-aware advance dialog: select/deselect projects by category with target caps
- STAGE_ACTIVE bug fix in assignment router
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 10:09:52 +01:00
|
|
|
"@types/pdf-parse": "^1.1.5",
|
2026-02-14 15:26:42 +01:00
|
|
|
"@types/react": "^19.0.2",
|
|
|
|
|
"@types/react-dom": "^19.0.2",
|
|
|
|
|
"eslint": "^9.17.0",
|
|
|
|
|
"eslint-config-next": "^15.1.0",
|
|
|
|
|
"postcss": "^8.4.49",
|
|
|
|
|
"prettier": "^3.4.2",
|
|
|
|
|
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
|
|
|
"prisma": "^6.19.2",
|
|
|
|
|
"tailwindcss": "^4.1.18",
|
|
|
|
|
"tailwindcss-animate": "^1.0.7",
|
|
|
|
|
"tsx": "^4.19.2",
|
|
|
|
|
"typescript": "^5.7.2",
|
|
|
|
|
"vitest": "^4.0.18"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=20.0.0"
|
|
|
|
|
},
|
|
|
|
|
"prisma": {
|
|
|
|
|
"seed": "tsx prisma/seed.ts"
|
|
|
|
|
}
|
|
|
|
|
}
|