13 KiB
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
-
Platform Super Admin
- Full system configuration, security policies, integrations, user/role management, data export, audit access.
-
Program Admin (MOPC Admin)
- Manages cycles/rounds, projects, jury members, assignments, voting windows, criteria forms, dashboards, exports.
-
Jury Member
- Can access only assigned projects for active rounds; submit evaluations; view own submitted evaluations; optionally view aggregated results only if permitted.
-
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)
- Need clarity
- Solution relevance
- Gap analysis (market/competitors)
- Target customers clarity
- 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 <N evaluations
-
Progress: submission rates by juror
-
Aggregates per project:
- Average per criterion
- Average global score
- Distribution (min/max, std dev optional)
- Count of “Yes” votes
- Qualitative comments list (with juror identity visible only to admins, configurable)
-
Shortlisting tools:
- Filter/sort by aggregate score, yes-vote ratio, tag, missing reviews
- Export shortlist (e.g., top 60 / top 6) with manual override controls
-
-
Exports (Phase 1):
-
CSV/Excel export for:
- Evaluations (row per evaluation)
- Aggregates (row per project)
- Assignment matrix
-
PDF export (optional) for meeting packs
-
4) Admin console requirements (robust)
4.1 Governance & configuration
-
Create/manage Programs and Rounds
-
Set:
- Required reviews per project (N)
- Voting windows (start/end) + grace rules
- Evaluation form version
- Visibility rules (whether jurors can see aggregates, whether jurors can see their past submissions after close)
-
Manage tags:
- Tag taxonomy, synonyms/merging, locked tags
4.2 User management & security controls
-
Bulk invite/import
-
Role assignment & revocation
-
Force password reset / disable account
-
View user activity logs
-
Configure:
- Allowed email domains (optional)
- MFA requirement (optional)
- Session lifetime (optional)
4.3 Assignment controls
-
Manual assignment UI (single + bulk)
-
Auto-assignment wizard:
- select round
- choose balancing strategy (e.g., “maximize tag match”, “balance load first”)
- preview results
- apply
-
Conflict of interest handling:
- Admin can mark conflicts (juror ↔ project)
- Auto-assign must respect conflicts
4.4 Data integrity controls
- Vote invalidation (requires reason)
- Reopen evaluation (admin-only, logged)
- Freeze round (hard lock)
- Immutable audit log export
4.5 Integrations management
- Connectors toggles (Typeform/Notion/email provider/WhatsApp) with credentials stored securely
- MinIO bucket configuration + retention policies
- Webhook management (optional)
5) Non-functional requirements (Phase 1)
Security
-
TLS everywhere
-
RBAC + project-level access control
-
Secure file access (pre-signed URLs with short TTL; no public buckets)
-
Audit logging for admin actions + exports
-
Basic anti-abuse:
- rate limiting login endpoints
- brute-force protection if password auth used
Reliability & performance
-
Support:
- Round 1: 15 jurors, 130 projects, min 390 evaluations
- Round 2: ~30 jurors, 60 projects
-
Fast page load for dashboards and project pages
-
File streaming for PDFs/videos (avoid timeouts)
Compliance & privacy (baseline)
- Store only necessary personal data for jurors/candidates
- Retention policies configurable (especially for candidate files)
- Access logs available for security review
6) File storage requirements (MinIO S3)
Storage design (requirements-level)
-
Use MinIO as S3-compatible object store for:
- project documents (exec summary, deck)
- video files
- optional assets (logos, exports packs)
-
Buckets:
- Separate buckets or prefixes by Program/Round to simplify retention + permissions
-
Access pattern:
- Upload: direct-to-S3 (preferred) or via backend proxy
- Download/view: pre-signed URLs generated by backend per authorized user
-
Optional features:
- Object versioning enabled
- Antivirus scanning hook (Phase 2)
- Lifecycle rules (auto-expire after X months)
7) “Current process” integration mapping (future-proof)
Existing flow
- Typeform application → confirmation email → Tally upload → Notion tracking → Google Drive manual upload
Platform integration targets
Phase 1 (minimal):
- Allow admin to ingest projects and upload assets (replace Drive for jury-facing access)
Phase 2 options:
- Typeform: pull submissions via API/webhooks
- Tally: capture uploads directly to MinIO (or via platform upload portal)
- Notion: sync project status + metadata (one-way or two-way)
- Email automation: reminder workflows for incomplete applications
8) Additional ideas as “technical backlog candidates”
Automated follow-ups for incomplete applications (Phase 2)
-
State machine for applications: registered → awaiting docs → complete → expired
-
Scheduler:
- send reminders at configurable intervals (e.g., +2d, +5d, +7d)
- stop on completion
-
Channels:
- Email must-have
- WhatsApp optional (requires compliance + provider; store consent + opt-out)
Learning hub access (semi-finalists only)
- Resource library stored in MinIO + metadata in DB
- Access controlled by cohort + passwordless login or access tokens
- Expiring invite links
Website integration
- Shared identity/back office (SSO-ready) OR separate admin domains
- Public-facing site remains content-only; platform is operational hub
- Requirement: clear separation between “public content” and “private jury/applicant data”
9) Acceptance criteria checklist (Phase 1)
- Admin can create a round, set voting window (start/end), and activate it.
- Admin can import projects + upload/attach required files to MinIO.
- Admin can import jurors, invite them, and jurors can log in securely.
- Admin can assign projects (manual + bulk). Auto-assign is optional but if included must guarantee ≥3 reviews/project.
- Juror sees only assigned projects, can view files, and submit evaluation form.
- System blocks submissions outside the voting window (unless admin-granted exception).
- Admin dashboard shows progress + aggregates per project; admin can export results.
- All critical admin actions are audit-logged.
- File access is protected (no public links; pre-signed URLs with TTL).
If you want, I can turn this into:
- a clean PRD-style document (Dev-ready) plus
- a ticket breakdown (Epics → user stories → acceptance tests) for Phase 1 delivery.