7.7 KiB
7.7 KiB
01. Current Platform Architecture Audit
1) Technology Baseline
- Frontend: Next.js App Router, role-based route groups
- API: tRPC router composition (
src/server/routers/_app.ts) - ORM/DB: Prisma + PostgreSQL (
prisma/schema.prisma) - Auth: NextAuth + invitation token + onboarding + password setup flows
- Storage: MinIO/S3-like presigned URLs for project files
- Notifications: email + in-app notifications + reminder logs
- AI: OpenAI-backed assignment/filtering/award eligibility/summary/mentor matching with fallback logic
2) Core Current Domain Model (As Implemented)
2.1 Stage Engine Backbone
Current schema already includes the core stage engine building blocks:
Pipeline(program-level orchestration container)Track(main/award/showcase branches)Stage(typed lifecycle node)StageTransition(graph edges with optional guards)ProjectStageState(project position/state inside stage)Cohort+CohortProject(grouping for live/selection windows)LiveProgressCursor(live presentation pointer)OverrideAction+DecisionAuditLog(decision/override evidence)
2.2 Evaluation / Assignment / Filtering / Awards / Mentorship
The platform also has substantial supporting models:
- Assignment & judging:
Assignment,Evaluation,EvaluationForm,ConflictOfInterest,GracePeriod - Filtering:
FilteringRule,FilteringResult,FilteringJob - Awards:
SpecialAward,AwardEligibility,AwardJuror,AwardVote - Mentorship:
MentorAssignment,MentorMessage,MentorNote,MentorMilestone,MentorMilestoneCompletion - Documents:
FileRequirement,ProjectFile - Live voting:
LiveVotingSession,LiveVote,AudienceVoter
2.3 User/Invite/Team Model
- Users:
Userwith roles, invite token, onboarding state, workload fields - Team:
TeamMemberlinks project/user and role (LEAD,MEMBER,ADVISOR) - Invitation tokens are user-level (
inviteToken,inviteTokenExpiresAt), reused across admin and team invite flows
3) Current Services (Behavior Layer)
3.1 Stage Lifecycle Services
stage-engine.ts: transition validation + execution + guard evaluationstage-filtering.ts: stage-scoped deterministic + AI banding filtering with manual queue conceptstage-assignment.ts: stage-scoped assignment preview/rebalance/coverage, workload/tag balancinglive-control.ts: live session control (cursor, queue reorder, pause/resume, cohort windows)stage-notifications.ts: event emission + notification policy checks
3.2 AI and Automation Services
ai-assignment.ts,smart-assignment.tsai-filtering.tsaward-eligibility-job.ts,ai-award-eligibility.tsmentor-matching.tsai-evaluation-summary.ts
3.3 Deadline/Reminder Services
evaluation-reminders.tsfor stage deadline reminder windows and deduplicated reminder logs
4) Current API Surface (tRPC Router Map)
Major routers currently include:
- Competition architecture:
pipeline,stage,stageFiltering,stageAssignment,cohort,live,decision,award,specialAward - Judging ops:
assignment,evaluation,gracePeriod,filtering - Project/applicant/docs:
project,application,applicant,file,project-pool - Mentorship:
mentor - Identity/admin ops:
user,program,settings,notification,audit,dashboard - Platform modules:
message,webhook,learningResource,partner,tag, imports, analytics, export
5) Current UI Surface (By Role)
5.1 Admin Surface
- Program settings, apply settings, pipeline wizard/advanced editors
- Project pool and project management
- Members + invitation workflow (
/admin/members/invite) - Mentors and mentorship settings
- Awards and live/reporting pages
5.2 Applicant Surface
- Applicant dashboard, pipeline status, stage documents, team management, mentoring page
- Team invite/remove functionality in applicant team pages
5.3 Jury Surface
- Stage lists, assignment lists, project review/evaluation pages, comparison, live stage pages, awards
5.4 Mentor Surface
- Mentor dashboard, project workspaces, notes, milestones, messaging
5.5 Public/Auth Surface
- Public application pages
- Accept invite page, onboarding page, set password flow
- Public live score and audience vote pages
6) Current Strengths
- Strong foundational stage/pipeline schema already exists.
- Manual override and audit models already present.
- AI-assisted modules are implemented with fallback paths.
- Live voting/session primitives already exist.
- File requirements + per-stage file visibility logic already exist.
- Team invitation and onboarding flows are functioning and integrated with email + status.
7) Current Mismatch Areas Against Monaco Flow
7.1 Stage Purpose Ambiguity
StageTypeis generic (INTAKE/FILTER/EVALUATION/...) but does not encode explicit Monaco semantics (Jury 1 vs Jury 2 vs Jury 3, Submission Round 1 vs Round 2, Final Confirmation).- Behavior depends heavily on
configJsonconventions and page-level interpretation.
7.2 Jury Entity Is Implicit, Not First-Class
- Jury membership is mostly inferred from
User.role+ stage assignments. - The Monaco requirement for explicit overlapping juries (
Jury 1/2/3, award juries) is not modeled as first-class reusable entities.
7.3 Assignment Policy Is Incomplete For Required Cap Semantics
- Current assignment supports limits and balancing, but lacks formal per-judge hard/soft cap contracts with explicit buffer and exhaustion handling.
- Category mix logic exists but not in the exact required startup/concept ratio semantics per judge + override flow.
7.4 Document Lifecycle Is Partially Structured
- Stage-level requirements are present; previous-stage visibility exists.
- But “submission bundles per round” and official round-level locking semantics are not consistently first-class.
7.5 Mentoring Collaboration Layer Is Not Complete
- Messaging/notes/milestones exist.
- Missing required private mentor-team file workspace with threaded comments + official submission promotion provenance.
7.6 Finals Confirmation Workflow Not Fully Typed
- Live voting and cursor controls exist.
- No dedicated final confirmation entity enforcing “all jury agree + one admin approval + result freeze lock”.
7.7 Award Mode Semantics Need Hardening
- Awards are powerful but routing mode behavior (
pull-outvsdual participation) is not represented as explicit governance policy with strict validation.
7.8 Cross-Platform Consistency Gaps
- Critical workflows (member invite, team invite, onboarding, pre-assignment, stage visibility) are implemented across multiple modules with some duplicated logic and role assumptions.
- This increases drift risk when competition architecture changes.
8) Complexity/Vagueness Sources
- Over-reliance on freeform
configJsonfor core behavior. - Multiple overlapping assignment/filtering router/service pathways.
- Legacy “round” nomenclature still appears in fields and comments while pipeline model is active.
- Invite/onboarding/team and assignment logic are integrated but not governed by a single “competition operating model” contract.
- Some stage-specific behavior depends on UI assumptions rather than centralized policy evaluation.
9) Conclusion (Current-State Summary)
The platform is not a blank slate. It is a capable stage-engine system with substantial functionality already built. The redesign should be an evolutionary hardening and simplification effort:
- Keep what is structurally strong (pipeline/stage backbone, audit, live primitives)
- Introduce explicit entities/policies where Monaco flow requires precision
- Reduce ambiguity by making flow-critical contracts typed and validated
- Unify all user-facing functions under the same stage/jury/document/decision model