2026-01-30 13:41:32 +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",
|
|
|
|
|
"@radix-ui/react-tooltip": "^1.1.6",
|
|
|
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
|
|
|
"@tanstack/react-query": "^5.62.0",
|
|
|
|
|
"@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",
|
Round system redesign: Phases 1-7 complete
Full pipeline/track/stage architecture replacing the legacy round system.
Schema: 11 new models (Pipeline, Track, Stage, StageTransition,
ProjectStageState, RoutingRule, Cohort, CohortProject, LiveProgressCursor,
OverrideAction, AudienceVoter) + 8 new enums.
Backend: 9 new routers (pipeline, stage, routing, stageFiltering,
stageAssignment, cohort, live, decision, award) + 6 new services
(stage-engine, routing-engine, stage-filtering, stage-assignment,
stage-notifications, live-control).
Frontend: Pipeline wizard (17 components), jury stage pages (7),
applicant pipeline pages (3), public stage pages (2), admin pipeline
pages (5), shared stage components (3), SSE route, live hook.
Phase 6 refit: 23 routers/services migrated from roundId to stageId,
all frontend components refitted. Deleted round.ts (985 lines),
roundTemplate.ts, round-helpers.ts, round-settings.ts, round-type-settings.tsx,
10 legacy admin pages, 7 legacy jury pages, 3 legacy dialogs.
Phase 7 validation: 36 tests (10 unit + 8 integration files) all passing,
TypeScript 0 errors, Next.js build succeeds, 13 integrity checks,
legacy symbol sweep clean, auto-seed on first Docker startup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 13:57:09 +01:00
|
|
|
"csv-parse": "^6.1.0",
|
2026-01-30 13:41:32 +01:00
|
|
|
"date-fns": "^4.1.0",
|
2026-02-10 23:08:00 +01:00
|
|
|
"html2canvas": "^1.4.1",
|
|
|
|
|
"jspdf": "^4.1.0",
|
|
|
|
|
"jspdf-autotable": "^5.0.7",
|
2026-01-30 13:41:32 +01:00
|
|
|
"leaflet": "^1.9.4",
|
|
|
|
|
"lucide-react": "^0.563.0",
|
|
|
|
|
"minio": "^8.0.2",
|
|
|
|
|
"motion": "^11.15.0",
|
|
|
|
|
"next": "^15.1.0",
|
|
|
|
|
"next-auth": "^5.0.0-beta.25",
|
2026-02-08 14:37:32 +01:00
|
|
|
"next-themes": "^0.4.6",
|
2026-01-30 13:41:32 +01:00
|
|
|
"nodemailer": "^7.0.7",
|
|
|
|
|
"openai": "^6.16.0",
|
|
|
|
|
"papaparse": "^5.4.1",
|
|
|
|
|
"react": "^19.0.0",
|
2026-02-03 19:48:41 +01:00
|
|
|
"react-day-picker": "^9.13.0",
|
2026-01-30 13:41:32 +01:00
|
|
|
"react-dom": "^19.0.0",
|
2026-02-02 13:19:28 +01:00
|
|
|
"react-easy-crop": "^5.5.6",
|
2026-01-30 13:41:32 +01:00
|
|
|
"react-hook-form": "^7.54.2",
|
|
|
|
|
"react-leaflet": "^5.0.0",
|
|
|
|
|
"react-phone-number-input": "^3.4.14",
|
|
|
|
|
"recharts": "^3.7.0",
|
|
|
|
|
"sonner": "^2.0.7",
|
|
|
|
|
"superjson": "^2.2.2",
|
|
|
|
|
"tailwind-merge": "^3.4.0",
|
|
|
|
|
"use-debounce": "^10.0.4",
|
|
|
|
|
"zod": "^3.24.1"
|
|
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
|
|
|
|
"@playwright/test": "^1.49.1",
|
|
|
|
|
"@types/bcryptjs": "^2.4.6",
|
2026-02-05 20:31:08 +01:00
|
|
|
"@types/leaflet": "^1.9.21",
|
2026-01-30 13:41:32 +01:00
|
|
|
"@types/node": "^25.0.10",
|
|
|
|
|
"@types/nodemailer": "^7.0.9",
|
|
|
|
|
"@types/papaparse": "^5.3.15",
|
|
|
|
|
"@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"
|
|
|
|
|
}
|
|
|
|
|
}
|