UAIX / AI Memory / Handoff
2ix Volunteer Matching and Project Memory System Design
Report summary
This report treats 2ix.org as a greenfield product specification , not as an audit of an existing working site. During research on May 19, 2026 , the 2ix.org homepage could not be reliably fetched by the web tool and returned timeouts on repeated attempts, so I do not assume any current production b
Key topics
- UAIX / AI Memory / Handoff
- UAIX
- AI Memory
- Handoff
- TypeScript
- Privacy
- Research Archive
- Audit
- Architecture
Research provenance
For citation, use the report title and canonical URL. Archival presence does not establish authorship or promote report statements into portfolio evidence.
Source availability: 33 citation markers in the source export have no recoverable source links. Those markers are omitted from this reader; any supplied bibliography and ordinary links remain. Check the original sources before relying on the cited claims.
This page renders the archived Markdown as safe, formatted HTML. It is background research and does not become a portfolio claim without evidence review.
Full report
On this page
Executive summary
This report treats 2ix.org as a greenfield product specification, not as an audit of an existing working site. During research on May 19, 2026, the 2ix.org homepage could not be reliably fetched by the web tool and returned timeouts on repeated attempts, so I do not assume any current production behavior beyond the domain name.
The strongest product direction is to build 2ix as a hybrid volunteer marketplace plus a durable project-memory layer. It should not be only a listing board, and it should not be only a wiki. Volunteer platforms such as Idealist/VolunteerMatch emphasize searchable opportunities by keyword, skill, cause area, and work format; Catchafire emphasizes pre-scoped projects with clear outcomes, timelines, and explicit prerequisites; GitHub and Google Summer of Code show that successful open-source onboarding depends on clear contribution guidelines, beginner-friendly issue labeling, maintainer review, structured work tracking, and fast human response. Those patterns point to a system where every opportunity is structured, every match is explainable, every contribution leaves a durable handoff trail, and every project can link outward to the real systems of record such as code, issues, and docs.
The most important product decisions are summarized below.
| Design question | Recommended answer for 2ix | Why this is the right default |
|---|---|---|
| What is 2ix? | A hybrid matching system for volunteers and organizations, plus a canonical memory layer for project work | Volunteer platforms need discovery and matching; open-source work needs durable state, review, and handoff memory |
| How are opportunities created? | As structured opportunities with typed metadata, scope, prerequisites, deliverables, acceptance criteria, and links | Clear outcomes and structured intake reduce ambiguity and improve matching quality |
| How should matching work? | Pull-first, push-assisted, hybrid: volunteers browse/apply; maintainers can invite; the system recommends both directions | This combines the openness of issue browsing with the efficiency of skills-based invitations |
| How should project memory work? | A hybrid federated model: 2ix stores canonical task state, handoff notes, artifacts, and snapshots, while linking to code/issues/docs in external tools | GitHub-style work already lives across repositories, issues, PRs, and discussions; 2ix should unify that without copy-pasting entire ecosystems |
| How should roles work? | Four product roles: volunteer, organization, project maintainer, reviewer, with a separate admin/moderator function | This mirrors contributor/mentor/admin separation in successful open-source programs and preserves clear accountability |
| How should trust work? | Verified organizations, structured reviews, project health checks, moderation tools, audit logs, and reputation that helps but does not lock out newcomers | Fast, fair moderation and newcomer-friendly contribution paths are central to healthy communities |
| What should the technical shape be? | REST-first API, webhook connectors, relational core, event log, object storage, search index, and background workers | This is implementable without betting on a narrow stack and supports later federation and analytics |
A good first release of 2ix should therefore do seven things well: publish structured opportunities, calculate explainable matches, onboard volunteers into live projects, track assignment and review lifecycle, preserve handoff memory, integrate with external tools, and maintain community trust and safety. Those are the load-bearing capabilities for a system intended to serve both volunteer matching and project continuity.
Research basis and design stance
The external patterns that matter most for 2ix are remarkably consistent. Idealist exposes volunteering as a filterable search experience: keyword, skill, interest, radius, location type, cause area, and “done in a day” style constraints. Idealist also presents volunteering as a large multi-organization marketplace rather than a single-org dashboard.
Catchafire adds the most useful operational discipline for 2ix. Its official documentation says projects are pre-scoped to create structure, timelines, and clear outcomes; volunteer selection uses algorithms factoring in skills, recent activity, similar completed projects, and ratings; organizations still vet candidates through application review and, when needed, interviews; and effective collaboration begins with a kickoff call, standing check-ins, and shared documents. Catchafire also distinguishes small advisory calls from larger fully scoped projects and, in newer flows, supports two-way matching where volunteers can originate proposals that organizations browse. These are exactly the right building blocks for a modern volunteer contribution system.
GitHub and Open Source Guides fill in the project-collaboration side. GitHub documents beginner-friendly discovery via good first issue and help wanted, structured issue forms with validations, CONTRIBUTING.md, community health files, code ownership and required reviews, Projects with custom fields and automation, Discussions for community conversations, and linked issues/PRs to show work in progress and automatically close issues on merge. Open Source Guides also stress that contributions are not only code: documentation, design, user support, and organizing are all valid contribution types. In other words, the best open-source systems lower the barrier to entry and keep a strong audit trail.
Google Summer of Code contributes the best role and onboarding patterns. Its contributor/mentor/org-admin split makes responsibilities legible: contributors communicate progress and blockers, mentors guide and review regularly, and org admins define expectations, acceptance criteria, coverage, escalation paths, and integration into the community. The GSoC “community bonding period” is especially relevant for 2ix: onboarding works better when a contributor is introduced to the project, gets the development environment set up, reads the documentation, refines the plan, and starts on small preliminary tasks before being judged on large deliverables.
Taken together, these sources imply a very clear design stance for 2ix:
First, 2ix should prefer scoped work over vague calls for help. Catchafire’s explicit structuring of outcomes and timelines is the right model; free-text asks should be converted into typed opportunities before publication.
Second, 2ix should treat project readiness as a prerequisite for volunteer matching. GitHub’s nonprofit “For Good First Issue” guidance expects active maintenance, a README, contribution guidelines, and beginner-friendly labels. A project without those basics is not yet ready to recruit volunteers effectively.
Third, 2ix should support more than code. Documentation, design, research, translation, outreach, community moderation, and reviewing should all be first-class opportunity types, because that is how real open-source and civic work happens.
Fourth, 2ix should separate “discussion” from “opportunity.” Early-stage ideas belong in discussion threads; once scope is clear, they should convert into structured work items. That mirrors GitHub Discussions and keeps the opportunity queue clean.
User roles and opportunity schema
The core role split should be simple, but strict.
| Role | Primary responsibility | Can create | Can approve | Can review | Can moderate | Required account state |
|---|---|---|---|---|---|---|
| Volunteer | Offer time and skills to complete scoped work | Profile, applications, progress updates, artifacts, handoff drafts | No final project approvals | Peer comments only unless separately granted reviewer role | Report abuse only | Profile complete; prerequisites satisfied for each opportunity |
| Organization | Own the mission context, legal context, and project sponsorship | Organization profile, projects, policy defaults, maintainer/reviewer assignments | Project publication, volunteer selection policy, IP settings | Optional | No, unless also admin | Verified organization identity |
| Project Maintainer | Scope work, manage queue, guide volunteers, keep project moving | Opportunities, work items, labels, onboarding checklist, memory records | Applicant selection, assignment start, state transitions, handoff acceptance | Yes, if also reviewer | Limited moderation inside project spaces if granted | Maintainer training complete; MFA required |
| Reviewer | Evaluate deliverables against acceptance criteria and record structured feedback | Review records, approval/rejection notes, scorecards | Deliverable acceptance only | Yes | No, unless also moderator | Verified reviewer status; MFA required |
This role model is a practical translation of the contributor/mentor/admin structure documented by GSoC and the contributor/reviewer/code-owner patterns documented by GitHub. Contributors need clear expectations, maintainers need to guide and triage, reviewers need explicit approval authority, and the sponsoring organization must define policy and escalation.
A key implementation rule is that reviewer is a distinct permission, even when a maintainer and reviewer are the same person on small projects. Keeping it separate in the data model is what lets 2ix later require independent approval on sensitive opportunities, just as GitHub supports required reviews and code-owner review requests.
The opportunity object should be fully structured. The schema below is the minimum viable shape.
| Field | Type | Required | Exact use |
|---|---|---|---|
id | UUID | Yes | Stable primary key |
organization_id | UUID | Yes | Sponsoring organization |
project_id | UUID | Yes | Parent project/workstream |
title | string | Yes | One-sentence task name |
summary | string | Yes | Card-level description, 160–280 chars |
description_md | markdown | Yes | Full scope and context |
opportunity_type | enum | Yes | advisory_call, microtask, compact_task, project, team_project |
visibility | enum | Yes | public, organization_only, invite_only, private_draft |
status | enum | Yes | draft, review, published, paused, matched, active, completed, handoff, archived, canceled |
cause_areas | array<string> | Yes | Mission taxonomy: e.g. civic-tech, education, accessibility |
work_types | array<string> | Yes | code, docs, design, research, data, community, translation, review |
skills_required | array<object> | Yes | Each object: {skill_key, level, weight} |
skills_desired | array<object> | No | Useful but non-blocking skills |
languages | array<string> | No | Human-language requirements |
location_mode | enum | Yes | remote, hybrid, onsite |
time_zone_overlap_hours | integer | No | Minimum synchronous overlap if needed |
estimated_total_hours | integer | Yes | Expected total effort |
estimated_hours_per_week | integer | Yes | Expected weekly commitment |
duration_weeks | integer | Yes | Expected elapsed duration |
start_window_open | datetime | Yes | Earliest start |
start_window_close | datetime | No | Latest acceptable start |
target_due_at | datetime | No | Preferred finish date |
team_size | integer | Yes | Default 1; larger for team projects |
beginner_friendly | boolean | Yes | Equivalent to good first issue intent |
prerequisites | array<object> | Yes | {type, text, hard_filter} e.g. background knowledge, access, training, legal |
access_requirements | array<string> | No | GitHub org, Slack, docs, VPN, etc. |
deliverables | array<object> | Yes | Named outputs with format and owner |
acceptance_criteria | array<string> | Yes | Definition of done |
review_mode | enum | Yes | none, maintainer_approval, reviewer_approval, dual_approval |
maintainer_id | UUID | Yes | Primary maintainer |
reviewer_ids | array<UUID> | No | Assigned reviewers |
starter_context_md | markdown | Yes | What the volunteer needs before applying |
external_links | array<object> | Yes | Repo/issues/docs/discussions/design links |
artifact_expectations | array<string> | No | Files or links expected at completion |
ip_mode | enum | Yes | project_license, work_for_hire, cc_by, custom |
response_sla_hours | integer | Yes | Maintainer response expectation |
check_in_cadence_days | integer | Yes | Expected update interval |
matching_preferences | object | No | Preferred experience level, async vs sync, cause alignment, etc. |
risk_level | enum | Yes | low, moderate, high |
safety_flags | array<string> | No | Sensitive data, minors, legal review, security-sensitive |
This schema is directly motivated by Idealist’s searchable filters, Catchafire’s pre-scoped projects with prerequisites, samples, and outcomes, and GitHub’s structured issue forms and custom project metadata. The most important product decision here is not the field list itself, but that these are typed fields rather than prose fragments.
The scope taxonomy should stay intentionally small.
| Scope | Default use case | Effort band | Interview default |
|---|---|---|---|
| Advisory call | Brainstorming, triage, consultation | 1–2 hours | Not required |
| Microtask | Small doc fix, tagging, issue triage, asset cleanup | 1–8 hours | Not required |
| Compact task | A bounded deliverable such as a setup guide, page redesign, bug fix | 1–2 weeks | Optional |
| Project | Multi-step deliverable with asynchronous work | 2–6 weeks | Usually required |
| Team project | Work needing several volunteers or mixed skills | Variable | Required |
That distinction follows Catchafire’s official split between 1-hour calls and larger scoped projects, while preserving GitHub-style “good first issue” work as the natural entry point for newcomers.
Tagging should also be normalized. Every opportunity should support machine-readable tags in five families: skill, work type, mission/cause, logistics, and difficulty/governance. Example tags: frontend-react, docs-writing, translation, civic-tech, education, remote, async-friendly, us-timezones, good-first-task, urgent, security-sensitive, review-needed. This allows both faceted search and explainable recommendations. Idealist’s visible filters and GitHub’s label-driven discovery show why this matters.
Matching mechanics and workflows
The right matching model for 2ix is hybrid, but with a clear bias: pull-first, push-assisted. In practice, volunteers should be able to browse and apply freely, while maintainers can invite likely fits and the system can suggest candidates on both sides. This combines the openness of GitHub issue discovery with the efficiency of skills-based matchmaking, and it matches Catchafire’s official combination of open marketplace behavior, organization-side volunteer requests, and newer two-way matching.
| Matching design | Strengths | Weaknesses | Best use | Recommendation |
|---|---|---|---|---|
| Push-only | Fast staffing for urgent roles; orgs control funnel | Feels closed; weak for newcomers; less serendipity | Sensitive or high-risk tasks | Support, but only as an override mode |
| Pull-only | Open and transparent; great for self-directed contributors | Maintainers must sift through more noise; weak for passive but relevant candidates | Open-source style contribution discovery | Make this the default browsing model |
| Hybrid | Highest total liquidity; supports both browsing and invitations; preserves openness while improving fill rate | More complex ranking and notification policy | Skills-based volunteer work and open-source contribution systems | Recommended default for 2ix |
The actual matching engine should run in two stages.
Stage one: eligibility filtering. This is hard yes/no gating. The volunteer must pass visibility rules, prerequisite rules, risk rules, required language/location rules, and any repository or safety access requirements. If a project is marked security-sensitive or high, the platform can require interview, MFA, past proven work, or manual approval. Catchafire’s application review flow and prerequisites screen are the right precedent here.
Stage two: weighted ranking. The ranking score should be transparent and stored alongside the recommendation.
score_base =
0.40 * skill_fit
+ 0.20 * availability_fit
+ 0.15 * contribution_similarity
+ 0.10 * explicit_preference_fit
+ 0.10 * reliability_score
+ 0.05 * recent_activity_score
adjustments =
+ newcomer_boost
- risk_penalty
- response_penalty
Use the following exact mechanics:
| Signal | Exact implementation |
|---|---|
skill_fit | Weighted match of required and desired skills. Required skills count more than desired. Skill levels should be ordinal: familiar, working, strong, expert. |
availability_fit | Compare estimated_hours_per_week, duration_weeks, start window, and timezone-overlap requirement against volunteer availability. |
contribution_similarity | Use prior completed work, attached portfolio links, repository history, or review history to estimate similarity to scope and deliverables. |
explicit_preference_fit | Compare volunteer preferences on cause areas, work types, remote/on-site, sync/async, and languages to opportunity metadata. |
reliability_score | Bayesian average of completion rate, reviewer ratings, check-in compliance, and no-show history. Start every new user at neutral, not low. |
recent_activity_score | Reward current engagement lightly so dormant profiles do not dominate. |
newcomer_boost | Add a small positive adjustment only on opportunities marked beginner_friendly, provided hard prerequisites are met. |
risk_penalty | Penalize unresolved moderation flags, repeated unresponsiveness, or safety noncompliance. |
response_penalty | Penalize maintainers or volunteers who regularly ignore applications or invitations, to improve marketplace hygiene. |
Two fairness rules should be hard-coded. First, reputation must never be the main gate for beginner-friendly work; otherwise the platform becomes a closed loop where incumbents get all the opportunities. GitHub’s good first issue pattern and CHAOSS’s newcomer-experience framing both argue for deliberate newcomer access. Second, maintainers must be shown a match explanation, not a black-box score, so they can override recommendations responsibly.
A good first-response policy is also essential. CHAOSS explicitly treats time to first response as a key signal of community health and newcomer retention, and Catchafire recommends organizations respond within two business days. For 2ix, I would make the product target median first human response under 24 hours, P90 under 48 hours, excluding bot responses from the metric.
The matching and onboarding flow should look like this:
sequenceDiagram
participant V as Volunteer
participant T as 2ix
participant M as Maintainer
participant R as Reviewer
participant X as External Tools
V->>T: Create profile, skills, availability, preferences
T->>T: Check profile completeness and eligibility
T->>V: Recommended opportunities with match reasons
V->>T: Apply to opportunity
T->>M: Notify application + ranked fit explanation
M->>T: Review prerequisites, work samples, answers
alt Interview required
M->>V: Invite to interview
V->>M: Attend interview / clarify scope
else Low-risk scoped work
M->>T: Start project directly
end
M->>T: Accept volunteer
T->>X: Create/associate issue, task, discussion links
T->>V: Onboarding checklist + kickoff agenda
V->>M: Kickoff meeting
T->>T: Create baseline task snapshot and check-in schedule
V->>T: Progress updates + artifacts
R->>T: Review deliverable
T->>V: Approval, revisions, or handoff request
The onboarding content itself should be structured, not improvised. The GSoC bonding model is a strong template: read the README and contribution guide, join the communication channel, gain repository/tool access, set up the environment, understand the work plan, and start with small preliminary tasks. GitHub’s community health files and contribution guidelines reinforce this. Therefore every new 2ix assignment should automatically generate an onboarding checklist with six required items: project overview read, code of conduct acknowledged, access granted, environment/setup completed, kickoff held, first progress update submitted.
Durable project memory, data model, and APIs
The central product insight is that matching without memory creates volunteer churn, and memory without structured work creates stale documentation. So 2ix should implement durable project memory as a hybrid canonical ledger: the platform stores canonical states, handoff notes, review records, artifact manifests, and snapshots of linked work, while still treating repositories, issue trackers, docs, and design tools as authoritative external evidence. GitHub Projects, linked issues/PRs, and discussions all point in this direction: real work spans multiple repositories and tools, but still benefits from a single cross-project planning surface with custom fields and automation.
| Memory design | Benefits | Failure mode | Recommendation |
|---|---|---|---|
| Centralized copy-all memory | Simple reading experience inside 2ix; easy search | Diverges from source systems; high sync and privacy burden | Avoid as the default |
| Federated link-only memory | Lowest duplication; respects existing tools | Loses continuity when links rot or context moves; weak search | Better than copy-all, but incomplete |
| Hybrid canonical ledger plus linked artifacts | Keeps task continuity, review history, and handoff durability while preserving external systems of record | Slightly more modeling effort | Recommended |
The core model should distinguish five concepts:
| Entity | Meaning | Why it exists |
|---|---|---|
project | Long-lived mission/workstream | Parent container for many opportunities and assignments |
opportunity | Recruitable unit of work | What people browse, apply to, or are invited into |
assignment | Binding between volunteer and opportunity | Tracks who is doing what and under what terms |
work_item | Canonical tracked contribution unit | Holds status, versions, links, and state transitions |
handoff_packet | Required continuity document | Prevents knowledge loss when work changes hands |
To make memory durable, work_item should use versioned state plus append-only events.
| Table | Minimum columns |
|---|---|
work_items | id, project_id, opportunity_id, current_state, current_version, current_assignee_id, maintainer_id, reviewer_id, risk_level, last_snapshot_at |
work_item_versions | work_item_id, version_no, state, summary_md, blockers_md, next_steps_md, acceptance_state, created_by, created_at |
work_item_events | id, work_item_id, event_type, payload_json, actor_id, created_at |
handoff_packets | id, work_item_id, from_user_id, to_user_id, state_version, status, urgency, confidence, created_at, accepted_at |
handoff_packet_versions | handoff_packet_id, version_no, context_md, what_changed_md, open_questions_md, blockers_md, recommended_next_actions_md, artifact_manifest_json |
external_links | id, work_item_id, provider, kind, url, external_id, snapshot_title, snapshot_status, last_synced_at, content_hash |
artifacts | id, work_item_id, kind, storage_key, mime_type, sha256, visibility, uploaded_by, created_at |
reviews | id, assignment_id, reviewer_id, decision, criteria_scores_json, feedback_md, created_at |
reputation_ledger | id, user_id, source_type, source_id, delta_json, created_at |
moderation_cases | id, subject_user_id, reporter_id, context_type, status, decision, created_at, closed_at |
audit_logs | id, actor_id, entity_type, entity_id, action, before_json, after_json, created_at |
The relationship between versions and events matters. Events answer “what changed and when”; versions answer “what was the canonical state at a specific point”; and handoff packets answer “what does the next person need to know right now.” This is the minimum memory model that can survive volunteer turnover.
A handoff packet should be mandatory for any assignment that is completed, paused, abandoned, or reassigned. The structured handoff flow should be this:
sequenceDiagram
participant V as Outgoing Volunteer
participant T as 2ix
participant M as Maintainer
participant N as Incoming Volunteer
participant R as Reviewer
V->>T: Start handoff / completion
T->>V: Require structured handoff template
V->>T: Submit blockers, state, links, artifacts, next steps
T->>M: Review handoff completeness
M->>T: Accept or request clarification
alt Successor assigned
T->>N: Notify incoming volunteer
N->>T: Acknowledge handoff
T->>R: Optional reviewer confirmation for sensitive work
T->>M: Mark work_item reassigned / resumed
else No successor yet
T->>M: Mark work_item paused with searchable handoff packet
end
Every handoff packet should require these exact fields: state summary, completed work, unfinished work, blockers, risks, next three actions, linked artifacts, linked code/issues/docs, people to ask, confidence level, and last verified date. Catchafire’s emphasis on regular check-ins, shared folders, and actionable feedback provides the practical collaboration precedent here, while GitHub’s issue/PR linking and Projects custom fields provide the external-system linkage pattern.
The API should be REST-first, because the write patterns are transactional and role-sensitive. A read-optimized GraphQL layer can come later, but the operational core should be explicit and boring.
| Endpoint | Method | Purpose |
|---|---|---|
/v1/auth/oauth/{provider}/start | POST | Start GitHub/GitLab/Google auth |
/v1/auth/oauth/{provider}/callback | POST | Complete OAuth |
/v1/me | GET/PATCH | Read or update own profile |
/v1/me/skills | PUT | Replace normalized skill profile |
/v1/me/availability | PUT | Replace availability model |
/v1/organizations | POST | Create organization |
/v1/organizations/{id} | GET/PATCH | Read or update organization |
/v1/organizations/{id}/verify-domain | POST | Begin org verification |
/v1/projects | POST | Create project |
/v1/projects/{id} | GET/PATCH | Read or update project |
/v1/projects/{id}/readiness | GET | Compute readiness score from docs/labels/activity |
/v1/projects/{id}/sync | POST | Pull latest external state |
/v1/opportunities | POST | Create opportunity |
/v1/opportunities | GET | Search opportunities with filters |
/v1/opportunities/{id} | GET/PATCH | Read or edit opportunity |
/v1/opportunities/{id}/publish | POST | Move from draft to published |
/v1/opportunities/{id}/apply | POST | Volunteer application |
/v1/opportunities/{id}/invite | POST | Maintainer invite |
/v1/opportunities/{id}/candidates | GET | Ranked candidate list with explainability |
/v1/applications/{id}/decision | POST | Accept, pass, waitlist, interview |
/v1/assignments | POST | Create assignment after match |
/v1/assignments/{id} | GET | Get assignment |
/v1/assignments/{id}/updates | POST | Add progress update |
/v1/assignments/{id}/complete | POST | Mark ready for review |
/v1/work-items/{id} | GET | Current canonical work-item state |
/v1/work-items/{id}/versions | GET | Version history |
/v1/work-items/{id}/events | POST | Append event |
/v1/work-items/{id}/state | PUT | Update canonical version with optimistic locking |
/v1/work-items/{id}/links | POST | Attach repo/issue/doc/discussion link |
/v1/work-items/{id}/timeline | GET | Unified activity feed |
/v1/handoffs | POST | Create handoff packet |
/v1/handoffs/{id} | GET/PATCH | Read or edit handoff |
/v1/handoffs/{id}/accept | POST | Accept handoff |
/v1/reviews | POST | Create structured review |
/v1/search | GET | Cross-entity search over opportunities, projects, handoffs, artifacts |
/v1/recommendations/me | GET | Personalized recommendations |
/v1/reports | POST | Report abuse or misrepresentation |
/v1/moderation/cases | GET | Moderator queue |
/v1/webhooks/github | POST | GitHub connector inbound |
/v1/webhooks/gitlab | POST | GitLab connector inbound |
/v1/webhooks/jira | POST | Jira connector inbound |
Two implementation rules are non-negotiable. Every state-changing write should require optimistic version checks so one maintainer cannot silently overwrite another’s update, and every external link should store a small snapshot such as title, status, assignee, and last synchronized timestamp so search still works even if the external service is temporarily unavailable. GitHub’s linked-issue model and Project synchronization make this hybrid snapshot pattern especially compelling.
UI and UX flows
The product experience should feel closer to GitHub Issues + Projects + a skills marketplace than to a generic volunteer signup form. The interface should make three things obvious at all times: what the work is, why this match exists, and what happens next. That is important because successful open-source and volunteer systems do not merely surface opportunities; they reduce uncertainty around norms, scope, and follow-through. GitHub’s contribution guidance, issue labels, community health files, and Discussions model all point in this direction.
The following screens are the key UX surfaces.
Volunteer home and match inbox
+--------------------------------------------------------------------------------+
| 2ix | Search | My Matches | Active Work | Messages | Profile | Help |
+--------------------------------------------------------------------------------+
| Filters | Recommended for you |
| - Cause areas | ---------------------------------------------- |
| - Work type | [84%] Improve onboarding docs |
| - Skill level | civic-tech • docs • remote • 4h/week |
| - Availability | Why matched: doc-writing, async, beginner-fit |
| - Remote / onsite | Deliverables: setup guide + issue cleanup |
| - Duration | Actions: View | Save | Ask question | Apply |
| - Beginner-friendly | ---------------------------------------------- |
| - Verified org only | [79%] Triage accessibility issues |
| | ... |
|--------------------------------+-----------------------------------------------|
| Onboarding checklist | Active assignments |
| - Complete profile | - Docs guide revamp |
| - Add portfolio links | - Volunteer FAQ cleanup |
| - Set weekly availability | |
+--------------------------------------------------------------------------------+
This screen should expose why matched on every recommendation card. That explainability is not cosmetic; it gives volunteers confidence and tells them how to improve their profile. Idealist’s search-by-skill/cause/location pattern supports the filter model, and Catchafire’s qualifications/work-sample flow supports the visible readiness checklist.
Opportunity detail page
+--------------------------------------------------------------------------------+
| Title: Improve onboarding docs for new contributors [84%] |
| civic-tech | docs | remote | beginner-friendly | 1-2 weeks |
+--------------------------------------------------------------------------------+
| Summary |
| Single-sentence value statement about why this work matters |
| |
| Deliverables |
| - Updated getting-started page |
| - Linked screenshots or GIFs |
| - Final PR or doc link |
| |
| Prerequisites | Maintainer |
| - Familiar with Markdown | Name, org, response SLA, timezone |
| - Can attend 30 min kickoff | Reviewer |
| | Name(s), review mode |
| Acceptance criteria | Project context |
| - All steps verified | README | CONTRIBUTING | Code of Conduct |
| - Reviewer approves | Repo | Issues | Docs | Discussion |
| | |
| Questions / discussion | Actions |
| Threaded Q&A before applying | Apply | Save | Request invite | Report |
+--------------------------------------------------------------------------------+
The right rail matters. It should show maintainer identity, reviewer identity, trust badges, and required context links. GitHub makes contributing guidelines and code-of-conduct links prominently discoverable for a reason, and 2ix should do the same by pulling those signals into the opportunity surface.
Maintainer workspace
+--------------------------------------------------------------------------------+
| Project: Civic Tech Docs |
| Tabs: Overview | Opportunities | Applicants | Work Board | Memory | Reviews |
+--------------------------------------------------------------------------------+
| Left: Opportunity pipeline | Center: Board |
| - Draft | Backlog | Ready | Matched | Active | Review |
| - Ready for review | card: title, assignee, due, risk, last note |
| - Published | |
| - Paused | |
|---------------------------------+----------------------------------------------|
| Applicants panel | Memory panel |
| ranked list + reasons | latest handoff, artifacts, external links |
| [accept] [interview] [pass] | blockers, stale items, missing handoffs |
+--------------------------------------------------------------------------------+
This workspace should always combine queue management and memory visibility. A maintainer should not have to switch to a different subsystem to understand what a volunteer has done, what is stuck, or whether a handoff is missing.
Reviewer workbench
+--------------------------------------------------------------------------------+
| Review queue |
+--------------------------------------------------------------------------------+
| Work item | Volunteer | Deliverables | Criteria status | Due | Action |
|-----------+-----------+--------------+-----------------+-----+-----------------|
| Onboarding guide PR | Alice | 3/3 attached | 4/5 passed | Today |
| Accessibility audit | Ben | 2/2 attached | pending | Review |
+--------------------------------------------------------------------------------+
| Structured review form |
| - Acceptance criteria checklist |
| - Comments / requested changes |
| - Approve / reject / approve with follow-up |
+--------------------------------------------------------------------------------+
This is the screen that operationalizes the distinct reviewer role. It should allow structured scoring against the opportunity’s acceptance criteria, not just free-form comments.
Handoff composer
+--------------------------------------------------------------------------------+
| Handoff packet for: Improve onboarding docs |
+--------------------------------------------------------------------------------+
| Current state summary |
| What changed during this assignment |
| Open blockers and risks |
| Recommended next three actions |
| Artifacts checklist |
| Linked repo / issue / doc / design references |
| Confidence level: Low / Medium / High |
| Urgency: Normal / High / Critical |
| [Save draft] [Submit handoff] |
+--------------------------------------------------------------------------------+
This screen must refuse submission until all required handoff fields are complete. If the product is serious about being “project memory,” this is one of the few places where extra friction is absolutely justified.
Trust, privacy, moderation, metrics, and deployment
Privacy and security should be designed in from the beginning because 2ix will handle user identities, potentially sensitive volunteer history, private project conversations, and links into external work systems. OWASP is explicit that systems handling identities and private information need strong cryptography in transit and at rest, and that authentication and authorization must be treated as distinct problems. NIST SP 800-63B provides practical password guidance, and W3C recommends WCAG 2.2 as the current accessibility target for web applications. If 2ix will serve EU users, GDPR obligations are live; if it knowingly collects data about children under 13, COPPA may be implicated, so the simplest product policy is to set a clear minimum age or require special consent flows.
The exact control set should be this:
| Control area | Exact requirement for 2ix |
|---|---|
| Authentication | OAuth with GitHub/GitLab/Google; passkeys supported; MFA required for organization owners, maintainers, reviewers, moderators |
| Password policy | If passwords are supported, minimum 8 characters, long passwords allowed, breached-password blocklist, no arbitrary composition rules |
| Authorization | RBAC plus project-scoped permissions and row-level access rules; public browse separated from private workspaces |
| Encryption | TLS everywhere; object storage and PII columns encrypted at rest; signed URLs for artifacts |
| Data minimization | Do not require home address, legal name, or phone unless the specific opportunity requires it; default to coarse location and hidden email |
| Auditability | Append-only audit log for role changes, match decisions, review decisions, moderation actions, and external sync changes |
| File safety | Virus scanning, content-type validation, size limits, and secret scanning on uploads where possible |
| Accessibility | WCAG 2.2 AA target, keyboard-first navigation, visible focus states, clear error handling, accessible authentication flows |
| Retention and deletion | User export, account deletion, selective artifact retention policies, organization-level retention defaults |
| Regional compliance | GDPR support for export/delete/consent logging; SCC-capable vendor posture if EU data crosses borders |
| Sensitive work | Higher controls for security-sensitive or legal-sensitive opportunities; dual approval and private visibility available |
GitHub’s community-management guidance is equally important on the trust side: fast, fair moderation builds trust and makes contributors feel safe and welcome. Discussions can be locked, edited, or converted; moderators can be delegated; and reported content should flow to maintainers or organizational moderators. Catchafire’s official help content also shows two crucial marketplace lessons: organizations should still vet volunteers rather than blindly trusting algorithmic selection, and applications containing inaccurate, defamatory, or abusive language should be investigated.
For 2ix, that should become a concrete trust system:
| Trust object | Exact mechanism |
|---|---|
| Verified organization | Domain verification, human review, policy acceptance, visible badge |
| Healthy project | Readiness score based on README, CONTRIBUTING, code of conduct, active maintenance, reviewer assigned, response SLA, beginner-friendly labels where applicable |
| Trusted maintainer | Completed maintainer training, MFA, acceptable response metrics, no unresolved moderation cases |
| Reviewer trust | Structured review history, calibration against other reviewers, optional domain expertise tags |
| Volunteer reliability | Neutral starting baseline, then Bayesian score from completion rate, communication consistency, and review outcomes |
| Safety escalation | One-click reporting from profiles, applications, discussions, messages, reviews, and handoffs |
| Enforcement ladder | Warning → temporary limitation → suspension → organization-level restriction → permanent ban, with logged rationale and appeal path |
The trust system should be assistive, not exclusionary. In practical terms, that means a volunteer with no history can still be matched to low-risk beginner-friendly work, while reputation matters more for high-risk, high-scope, or sensitive tasks. This is consistent with newcomer-friendly open-source practice and with the fact that algorithmic matching is only a recommendation, not an endorsement.
For metrics, 2ix should combine volunteer-marketplace measures with open-source community-health measures and standard software-delivery measures. CHAOSS provides especially good definitions for time to first response, new contributors, newcomer experience, documentation discoverability, change request closure ratio, and contributor absence factor, while DORA provides the default software-delivery performance metrics for operating the 2ix platform itself.
The KPI set should be this:
| KPI | Definition | Why it matters |
|---|---|---|
| Opportunity publish-to-apply conversion | % of published opportunities receiving at least one valid application | Measures listing quality and marketplace liquidity |
| Median time to first human response | Time from application/question to first non-bot human response | Strong onboarding and retention predictor |
| Application-to-match rate | % of valid applications that lead to assignment | Measures market quality, not just traffic |
| Match-to-start rate | % of accepted matches that enter active work | Detects onboarding friction |
| First-week activation | % of new assignments with kickoff + first progress update in 7 days | Measures onboarding effectiveness |
| Completion rate | % of assignments completed or cleanly handed off | Core reliability measure |
| Review turnaround | Time from deliverable submission to review decision | Keeps volunteers from being stranded in limbo |
| Handoff completeness | % of completed/reassigned work with valid handoff packet | Direct measure of project memory durability |
| Documentation discoverability score | Search success, time-to-find, and user feedback on documentation | Memory usefulness, not just memory existence |
| New contributors | Count of first-time contributors active in a period | Growth and accessibility |
| Newcomer experience score | Survey + behavioral composite for first three assignments | Health of first-run experience |
| Change request closure ratio | Closed change requests / open change requests in period | Maintainer capacity and queue health |
| Contributor absence factor | Minimum number of contributors responsible for 50% of work | Continuity risk detection |
| Org response compliance | % of opportunities meeting configured response SLA | Marketplace hygiene |
| Moderation TTR | Mean time to first moderator action on reports | Safety and trust |
For operating the platform itself, use DORA-style measures on the 2ix codebase and infrastructure: deployment frequency, change lead time, failed deployment recovery time, change fail rate, and deployment rework rate. Those give a clean operational view of whether the team can evolve the product quickly without destabilizing it.
Because there is no stated stack constraint, the most implementable default architecture is a conservative one:
| Layer | Recommended default |
|---|---|
| Frontend | React/Next.js or equivalent SSR-capable web frontend |
| API | TypeScript/Node.js or Go REST API with strict schema validation |
| Primary database | PostgreSQL with JSONB for flexible metadata and row-level security support |
| Search | Postgres full-text search for MVP; dedicated search index later for cross-artifact search |
| Background jobs | Queue-backed workers for recommendations, sync, notifications, and moderation jobs |
| Files | Object storage with presigned upload/download URLs |
| External integrations | Webhooks first, scheduled pull as fallback |
| Caching | Redis or equivalent for sessions, rate limiting, and queue coordination |
| Observability | Structured logs, traces, audit pipeline, product analytics, error aggregation |
| Deployment | Containerized services behind a managed load balancer; environment-per-branch optional |
| Secrets | Managed secret store, never in app config or uploaded artifacts |
The scale posture should be multi-tenant but org-scoped. Each organization gets its own policy defaults, visibility rules, reviewers, and moderation queue, while volunteer profiles can span many organizations. That keeps the marketplace open without making private project spaces porous.
A phased rollout is the safest way to ship this:
| Phase | What should be included |
|---|---|
| MVP | Public opportunity browsing, volunteer profiles, structured applications, maintainer workspace, manual review, GitHub links, baseline handoff packets, organization verification |
| Phase two | Push invitations, reviewer workbench, moderation case management, project readiness scoring, search across artifacts, richer analytics |
| Phase three | Volunteer-originated proposals, broader external connectors, automated trust scoring, team projects, federation across multiple ecosystems |
The end state is not merely a volunteer portal. It is a continuity engine for mission-driven work: a place where organizations can turn vague needs into structured opportunities, volunteers can find contributions that fit their time and skills, maintainers can receive help without losing control, reviewers can protect quality, and the project itself can remember what happened after any one person leaves. That is the product shape most consistent with the primary-source patterns from volunteer marketplaces, open-source contribution systems, and modern project-management tooling.