• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
project logo

colel

rust-nyc-talk-submissions

https://github.com/colelawrence/rust-nyc-talk-submissions
Public
Like
rust-nyc-talk-submissions
Home
Code
16
.beads
3
.context
4
.github
1
.pi
1
backend
10
docs
3
frontend
3
shared
1
.gitignore
.vtignore
AGENTS.md
BRAND_STYLE_GUIDE.md
README.md
biome.json
deno.json
main.tsx
Environment variables
7
Branches
2
Pull requests
Remixes
1
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
docs
/
RFC-AI-ORGANIZER-COPILOT.md
Code
/
docs
/
RFC-AI-ORGANIZER-COPILOT.md
Search
…
Viewing readonly version of main branch: v163
View latest version
RFC-AI-ORGANIZER-COPILOT.md

RFC: Organizer Co-Pilot

Status: Draft
Author: AI Design Task
Date: 2026-02-06


Executive Summary

Organizer Co-Pilot is an opt-in AI assistant that helps Rust NYC meetup organizers triage talk submissions, detect urgency, score against rubrics, generate weekly digests, and draft repliesβ€”all while preserving privacy and human oversight.


1. Problem Statement

Organizers currently face:

  1. Triage fatigue β€” Manually reviewing each submission takes significant time
  2. Inconsistent evaluation β€” Different organizers may weight criteria differently
  3. Missed deadlines β€” Time-sensitive submissions (e.g., visiting speakers) slip through
  4. Slow response times β€” Submitters wait days/weeks for feedback
  5. Context loss β€” Discord threads grow long; key details get buried

2. Feature Overview

CapabilityDescriptionTrigger
Rubric ScoringAuto-score submissions against configurable criteria (topic fit, novelty, clarity, speaker experience)On submission
Urgency DetectionFlag time-sensitive signals (travel dates, deadlines, "visiting next week")On submission
Suggested TagsPropose labels: lightning, deep-dive, beginner-friendly, advanced, needs-mentorshipOn submission
Weekly DigestSummarize new submissions, pending decisions, upcoming deadlinesScheduled (cron)
Draft RepliesGenerate templated responses for common scenarios (accept, decline, request-more-info)On-demand (slash command)

3. Architecture

3.1 Integration Points

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         Talk Submission                             β”‚
β”‚                    (backend/index.ts:POST /api/submissions)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       AI Co-Pilot Pipeline                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Rubric Score β”‚β†’β”‚ Urgency Flag β”‚β†’β”‚ Tag Suggest  β”‚β†’β”‚ Store Meta β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚             Discord Notification (enhanced)                         β”‚
β”‚   β€’ Includes score badge, urgency flag, suggested tags              β”‚
β”‚   β€’ Posts to #organizers channel                                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.2 File Changes

FileChanges
backend/copilot/ (new)New module for AI analysis
backend/copilot/rubric.tsRubric scoring logic
backend/copilot/urgency.tsUrgency detection
backend/copilot/tags.tsTag suggestions
backend/copilot/digest.tsWeekly digest generation
backend/copilot/replies.tsDraft reply templates
backend/index.tsIntegration hook after submission (lines ~100-150)
shared/types.tsNew CopilotAnalysis type

3.3 Database Schema Extension

-- New table for AI analysis results CREATE TABLE copilot_analyses_1 ( id INTEGER PRIMARY KEY AUTOINCREMENT, submission_id INTEGER NOT NULL REFERENCES talk_submissions_3(id), -- Rubric scores (0-100) score_topic_fit INTEGER, score_novelty INTEGER, score_clarity INTEGER, score_speaker_exp INTEGER, score_overall INTEGER, -- Urgency urgency_level TEXT CHECK(urgency_level IN ('none', 'low', 'medium', 'high')), urgency_reason TEXT, urgency_deadline DATE, -- Tags (JSON array) suggested_tags TEXT, -- ["lightning", "beginner-friendly"] -- Metadata model_version TEXT NOT NULL, analyzed_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Opt-out tracking organizer_override BOOLEAN DEFAULT FALSE, override_notes TEXT ); -- Index for digest queries CREATE INDEX idx_copilot_analyses_analyzed_at ON copilot_analyses_1(analyzed_at); CREATE INDEX idx_copilot_analyses_urgency ON copilot_analyses_1(urgency_level);

4. Detailed Design

4.1 Rubric Scoring

Prompt template (configurable in copilot/rubric.ts):

const RUBRIC_PROMPT = `You are evaluating a Rust NYC meetup talk submission. SUBMISSION: Speaker: {{speaker_name}} Context: {{talk_context}} Type: {{submission_type}} Score each criterion 0-100: 1. Topic Fit: Is this relevant to the Rust community? 2. Novelty: Is this a fresh perspective or well-covered ground? 3. Clarity: Is the proposal clear about what will be presented? 4. Speaker Experience: Based on context, how prepared is the speaker? Return ONLY valid JSON: { "topic_fit": 85, "novelty": 70, "clarity": 90, "speaker_exp": 75, "reasoning": "Brief explanation" }`;

Scoring thresholds (env-configurable):

ScoreBadgeAction
80+🌟 StrongFast-track review
60-79βœ… SolidNormal queue
40-59πŸ€” ConsiderMay need mentorship
<40⚠️ Needs WorkRequest more info

4.2 Urgency Detection

Pattern-based + AI hybrid approach:

// backend/copilot/urgency.ts // Fast regex patterns (no API call) const URGENCY_PATTERNS = [ { pattern: /visiting\s+(next|this)\s+week/i, level: 'high', reason: 'Visiting speaker' }, { pattern: /deadline\s*(is\s+)?(\w+\s+\d+|\d+\/\d+)/i, level: 'medium', reason: 'Mentioned deadline' }, { pattern: /time[- ]sensitive/i, level: 'medium', reason: 'Explicitly time-sensitive' }, { pattern: /only\s+available\s+(on|until)/i, level: 'high', reason: 'Limited availability' }, { pattern: /leaving\s+(the\s+)?(city|country|US)/i, level: 'high', reason: 'Departing soon' }, ]; // If patterns don't match, use AI for nuanced detection async function detectUrgencyWithAI(content: string): Promise<UrgencyResult> { // Uses gpt-4o-mini with specific urgency-detection prompt }

4.3 Suggested Tags

Auto-suggested, organizer-confirmed:

const TAG_TAXONOMY = { format: ['lightning', 'deep-dive', 'workshop', 'panel'], level: ['beginner-friendly', 'intermediate', 'advanced'], topic: ['async', 'systems', 'wasm', 'embedded', 'web', 'cli', 'gamedev'], support: ['needs-mentorship', 'needs-slides-review', 'first-time-speaker'], };

Tags appear in Discord notification with βœ…/❌ buttons for organizers to confirm.

4.4 Weekly Digest

Cron job (copilot-digest.cron.ts) runs Monday 9am:

## πŸ“Š Rust NYC Talk Submissions β€” Week of Feb 3 ### πŸ†• New Submissions (3) | Speaker | Topic | Score | Urgency | |---------|-------|-------|---------| | Alice | Async Rust Deep Dive | 🌟 85 | ⏰ HIGH: visiting Feb 15 | | Bob | My First Crate | πŸ€” 55 | β€” | | Carol | WebAssembly Perf | βœ… 72 | β€” | ### ⏳ Pending Decisions (5) - Alice's talk awaiting slot assignment (7 days) - Bob's talk needs mentorship assignment (14 days) ### πŸ“… Upcoming Deadlines - Feb 15: Alice only available this date - Feb 28: March meetup speaker deadline ### πŸ“ˆ Stats - Avg response time: 4.2 days - Acceptance rate: 67%

4.5 Draft Replies

Slash command /copilot reply <submission-id> <scenario>:

ScenarioTemplate
acceptCongratulations, scheduling details, next steps
declineGracious decline, reasons, encouragement to resubmit
more-infoSpecific questions based on what's missing
mentorshipOffer pairing with experienced speaker

Guardrail: Draft is posted as an ephemeral message only visible to the organizer who invoked it. Organizer must explicitly send or edit before it's visible to the submitter.


5. Guardrails & Opt-In

5.1 Opt-In Model

LevelScopeHow to Enable
Guild-levelEntire Discord serverEnv var COPILOT_ENABLED=true
Channel-levelSpecific submission channelsChannel topic includes [copilot]
Submission-levelIndividual submissionSubmitter checkbox "Allow AI-assisted review"

Default: All levels default to OFF. Requires explicit opt-in.

5.2 Human-in-the-Loop

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    AI Output Classification                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ADVISORY (shown to organizers only):                            β”‚
β”‚   β€’ Rubric scores                                               β”‚
β”‚   β€’ Urgency flags                                               β”‚
β”‚   β€’ Tag suggestions                                             β”‚
β”‚   β€’ Weekly digests                                              β”‚
β”‚   β€’ Draft replies (ephemeral)                                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ NEVER autonomous:                                               β”‚
β”‚   β€’ Accepting/declining submissions                             β”‚
β”‚   β€’ Sending replies to submitters                               β”‚
β”‚   β€’ Modifying submission content                                β”‚
β”‚   β€’ Creating public channels                                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5.3 Override Mechanism

Any organizer can override AI analysis:

/copilot override <submission-id> score=95 urgency=none tags=deep-dive,advanced

Overrides are logged with organizer ID, timestamp, and reason.

5.4 Rate Limiting

ResourceLimitReason
OpenAI calls per submission3Score + urgency + tags
OpenAI calls per day100Cost control
Digest generation1/weekPrevent spam
Draft replies per organizer20/dayPrevent abuse

6. Data Storage & Privacy

6.1 What Data Is Stored

DataStoredRetentionPurpose
Submission contentβœ… YesIndefiniteCore functionality
AI scoresβœ… YesIndefiniteAudit trail
AI reasoningβœ… Yes90 daysDebugging
Full prompts sent to AI❌ Noβ€”Privacy
AI model responsesβœ… Yes (parsed)90 daysDebugging
Organizer overridesβœ… YesIndefiniteAccountability

6.2 What Data Is NOT Stored

  • Raw API request/response bodies to OpenAI
  • Conversation history beyond current submission
  • Personal data beyond what's in submission form
  • IP addresses or device fingerprints

6.3 Data Flow to Third Parties

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Our Database    β”‚         β”‚    OpenAI API    β”‚
β”‚  (Val Town SQL)  β”‚         β”‚  (gpt-4o-mini)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                            β”‚
         β”‚  Submission content        β”‚ Anonymized prompt
         β”‚  (speaker name,            β”‚ (no email, no Discord IDs
         β”‚   talk context)            β”‚  in production prompts)
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

OpenAI Data Policy: Using API (not ChatGPT), data is not used for training per OpenAI API ToS.


7. Success Metrics

MetricBaselineTargetMeasurement
Avg. response time5 days2 daysTime from submission to first organizer reply
Triage time per submission10 min3 minOrganizer-reported (survey)
Missed urgent submissionsUnknown0Count of high-urgency not reviewed within 48h
AI score correlationN/A>0.7Correlation between AI score and final decision
Organizer override rateN/A<20%Indicates AI alignment with organizer judgment
Submitter satisfaction4.0/54.5/5Post-event survey

8. Mock Press Release

Rust NYC Launches AI-Powered Talk Submission Co-Pilot

New opt-in feature helps organizers respond to speakers 60% faster while maintaining human decision-making

New York, NY β€” Rust NYC, the popular systems programming meetup, today announced the launch of Organizer Co-Pilot, an AI-assisted tool that helps volunteer organizers efficiently triage talk submissions without compromising privacy or human oversight.

"Our organizers are volunteers with day jobs," said [Organizer Name]. "Co-Pilot handles the time-consuming first passβ€”scoring proposals, flagging visiting speakers who need fast responses, and drafting reply templatesβ€”so we can focus on the human conversations that matter."

Key Features:

  • Smart Scoring: AI evaluates submissions against transparent rubrics, highlighting strong proposals
  • Urgency Detection: Automatically flags time-sensitive submissions (visiting speakers, deadlines)
  • Weekly Digests: Summarizes pending submissions so nothing falls through the cracks
  • Draft Replies: Generates starting points for common responses, always requiring human review before sending

Privacy by Design:

  • Opt-in at every level (guild, channel, individual submission)
  • AI provides recommendations onlyβ€”humans make all decisions
  • No personal data stored beyond submission content
  • Full audit trail of AI suggestions vs. human decisions

The feature is available immediately for Rust NYC and will be open-sourced for other meetup organizers.

FAQ (Privacy & Trust)

Q: Does the AI automatically accept or reject talks?
A: No. The AI provides scores and suggestions visible only to organizers. All accept/decline decisions require explicit human action.

Q: Is my submission data used to train AI models?
A: No. We use OpenAI's API, which does not use API data for training. Submission content is processed but not retained by OpenAI.

Q: Can I opt out of AI analysis?
A: Yes. Submitters can uncheck "Allow AI-assisted review" on the form. Organizers can disable Co-Pilot at the channel or guild level.

Q: What if the AI score is wrong?
A: Organizers can override any AI analysis with one command. Overrides are logged for continuous improvement.

Q: Who can see AI scores?
A: Only organizers with access to the #organizers channel. Scores are never shared with submitters.

Q: Is the scoring rubric transparent?
A: Yes. The rubric criteria and weights are documented and can be customized per community.


9. Implementation Phases

PhaseScopeDurationDependencies
Phase 1Rubric scoring + urgency detection2 weeksNone
Phase 2Suggested tags + enhanced Discord notifications1 weekPhase 1
Phase 3Weekly digest cron job1 weekPhase 1
Phase 4Draft replies slash command2 weeksDiscord slash command registration
Phase 5Organizer dashboard (optional)3 weeksAll phases

10. Existing Code Patterns to Reuse

The autothread module (backend/autothread/logic.ts) provides proven patterns:

PatternLocationReuse For
OpenAI integrationlogic.ts:100-160 (generateAIThreadName)All AI calls
JSON response parsinglogic.ts:130-145Score/tag parsing
Prompt constructionlogic.ts:105-125Rubric prompts
Error handlinglogic.ts:150-160Graceful degradation
Mode guards (plan/dry_run/live)logic.ts:200-250Testing without side effects
Namespace isolationstore.tsSandbox testing of Co-Pilot

11. Remaining Work

For orchestrator follow-up:

  1. Create backend/copilot/ module structure with type definitions
  2. Implement rubric scoring (highest value, lowest complexity)
  3. Add copilot_analyses table migration
  4. Integration test with existing submission flow
  5. Discord notification enhancement with score badges
  6. Cron job for weekly digest
  7. Slash command registration for /copilot commands

Appendix A: Example Discord Notification (Enhanced)

πŸ“’ **New Talk Submission**

**Speaker:** Alice Chen
**Topic:** Building a Custom Async Runtime in Rust

**πŸ€– Co-Pilot Analysis:**
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Score: 🌟 85/100                        β”‚
β”‚ β”œβ”€ Topic Fit: 92                        β”‚
β”‚ β”œβ”€ Novelty: 78                          β”‚
β”‚ β”œβ”€ Clarity: 88                          β”‚
β”‚ └─ Speaker Exp: 82                      β”‚
β”‚                                         β”‚
β”‚ ⏰ URGENCY: HIGH                         β”‚
β”‚ └─ "Visiting NYC Feb 12-16 only"        β”‚
β”‚                                         β”‚
β”‚ Tags: `deep-dive` `async` `advanced`    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

[View Submission] [Override Analysis] [Draft Reply]

Appendix B: Configuration Reference

// Environment variables COPILOT_ENABLED=true|false // Master switch COPILOT_MODEL=gpt-4o-mini // AI model COPILOT_DAILY_LIMIT=100 // API call cap COPILOT_SCORE_THRESHOLD_STRONG=80 // Fast-track threshold COPILOT_SCORE_THRESHOLD_WEAK=40 // Needs-work threshold COPILOT_DIGEST_DAY=1 // 0=Sun, 1=Mon, etc. COPILOT_DIGEST_HOUR=9 // Hour in UTC

End of RFC

FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
Β© 2026 Val Town, Inc.