Below is a “technical requirements” rendering (not an architecture diagram), structured so you can hand it to a dev team and derive system architecture + backlog from it. Phase 1 is the only critical deliverable; Phase 2+ are explicitly extendable. --- ## 0) Product scope and phasing ### Phase 1 (critical, delivery in ~2 weeks) **Secure Jury Online Voting Module** to run two selection rounds: * Round 1: ~130 projects → ~60 semi-finalists (Feb 18–23 voting window) * Round 2: ~60 projects → 6 finalists (~April 13 week voting window) * Voting is asynchronous, online, with assigned project access, scoring + feedback capture, and reporting dashboards. ### Phase 2+ (mid-term) Centralized MOPC platform: * Applications/projects database * Document management (MinIO S3) * Jury spaces (history, comments, scoring) * Learning hub / resources * Communication workflows (email + possibly WhatsApp) * Partner/sponsor visibility modules * Potential website integration / shared back office --- ## 1) Users, roles, permissions (RBAC) ### Core roles 1. **Platform Super Admin** * Full system configuration, security policies, integrations, user/role management, data export, audit access. 2. **Program Admin (MOPC Admin)** * Manages cycles/rounds, projects, jury members, assignments, voting windows, criteria forms, dashboards, exports. 3. **Jury Member** * Can access only assigned projects for active rounds; submit evaluations; view own submitted evaluations; optionally view aggregated results only if permitted. 4. **Read-only Observer (optional)** * Internal meeting viewer: can see dashboards/aggregates but cannot edit votes. ### Permission model requirements * **Least privilege by default** * **Round-scoped permissions**: access can be constrained per selection round/cycle. * **Project-scoped access control**: jury sees only assigned projects (unless admin toggles “all projects visible”). * **Admin override controls**: reassign projects, revoke access, reopen/lock evaluations, extend voting windows, invalidate votes with reason logging. --- ## 2) Core domain objects (data model concepts) ### Entities * **Program** (e.g., “MOPC 2026”) * **Selection Cycle / Round** * Attributes: name, start/end of voting window, status (draft/active/closed/archived), required reviews per project (default ≥3), scoring form version, jury cohort. * **Project** * Attributes: title, team name, description, tags, status (submitted/eligible/assigned/semi-finalist/finalist/etc.), submission metadata, external IDs (Typeform/Notion), files (exec summary, PDF deck, intro video). * **File Asset** * Stored in MinIO (S3-compatible): object key, bucket, version/etag, mime type, size, upload timestamp, retention policy, access policy. * **Jury Member** * Profile: name, email, organization (optional), role, expertise tags, status (invited/active/suspended). * **Expertise Tag** * Managed vocabulary or free-form with admin approval. * **Assignment** * Connects Jury Member ↔ Project ↔ Round * Attributes: assignment method (manual/auto), created by, created timestamp, required review flag, completion status. * **Evaluation (Vote)** * Per assignment: criterion scores + global score + binary decision + qualitative feedback * Metadata: submitted_at, last_edited_at, finalization flag, versioning, IP/user-agent logging (optional), conflict handling. * **Audit Log** * Immutable events: login, permission changes, voting window changes, assignments, overrides, exports, vote invalidations. --- ## 3) Phase 1 functional requirements ### 3.1 Jury authentication & access * Invite flow: * Admin imports jury list (CSV) or adds manually. * System sends invitation email with secure link + account activation. * Authentication options (choose one for Phase 1, keep others pluggable): * Email magic link (recommended for speed) * Password + MFA optional * Session requirements: * Configurable session duration * Forced logout on role revocation * Access gating: * Jury can only view projects for **active** rounds and only those assigned. ### 3.2 Project ingestion & management Phase 1 can support either: * **Option A (fastest): Manual import** * Admin uploads CSV with project metadata + file links or uploads. * **Option B (semi-integrated): Sync from Notion/Typeform** * Read projects from existing Notion DB and/or Typeform export. Minimum capabilities: * Admin CRUD on projects (create/update/archive) * Project tagging (from “Which issue does your project address?” + additional admin tags) * Attach required assets: * Executive summary (PDF/doc) * PDF presentation * 30s intro video (mp4) * File storage via MinIO (see Section 6) ### 3.3 Assignment system (≥3 reviews/project) Admin can: * Manually assign projects to jury members (bulk assign supported) * Auto-assign (optional but strongly recommended): * Input: jury expertise tags + project tags + constraints * Constraints: * Each project assigned to at least N jurors (N configurable; default 3) * Load balancing across jurors (minimize variance) * Avoid conflicts (optional): disallow assignment if juror marked conflict with project * Output: assignment set + summary metrics (coverage, per-juror load, unmatched tags) * Reassignment rules: * Admin can reassign at any time * If an evaluation exists, admin can: * keep existing evaluation tied to original juror * or invalidate/lock it (requires reason + audit event) ### 3.4 Evaluation form & scoring logic Per project evaluation must capture: * **Criterion scores** (scale-based, define exact scale as configurable; e.g., 1–5 or 1–10) 1. Need clarity 2. Solution relevance 3. Gap analysis (market/competitors) 4. Target customers clarity 5. Ocean impact * **Global score**: 1–10 * **Binary decision**: “Select as semi-finalist?” (Yes/No) * **Qualitative feedback**: long text Form requirements: * Admin-configurable criteria text, ordering, scales, and whether fields are mandatory * Autosave drafts * Final submit locks evaluation by default (admin can allow edits until window closes) * Support multiple rounds with potentially different forms (versioned forms per round) ### 3.5 Voting windows and enforcement (must-have) Admins must be able to configure and enforce: * Voting window start/end **per round** (date-time, timezone-aware) * States: * Draft (admins only) * Active (jury can submit) * Closed (jury read-only) * Archived (admin/export only) * Enforcement rules: * Jury cannot submit outside the active window * Admin “grace period” toggle to accept late submissions for specific jurors/projects * Admin can extend the window (global or subset) with audit logging * Dashboard countdown + clear messaging for jurors ### 3.6 Dashboards & outputs Must produce: * **Jury member view** * Assigned projects list, completion status, quick access to files, evaluation status (not started/draft/submitted) * **Admin dashboards** * Coverage: projects with