A dating chat prototype where every match has hidden conversation rules. Two people discover them together, earn Spark rewards, and unlock deeper features — powered by five specialized AI agents.
┌─────────────────────────────────────────────────────────┐
│ AgentOrchestrator │
├─────────────┬─────────────┬──────────┬─────────┬────────┤
│ RuleGenerator│ RuleMonitor │ RuleJudge│ Hint │Moderation│
│ Agent │ Agent │ Agent │ Agent │ Agent │
└─────────────┴─────────────┴──────────┴─────────┴────────┘
│
ConversationManager
│
Socket.io + Express
│
React Client
| Mode | Description |
|---|---|
| AI Match | Chat with an LLM-powered dating match (ChatPartnerAgent) |
| 2 Player | Create a room, share the invite link, solve rules together |
Set these env vars on the server for real LLM chat:
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o-mini # optional
export OPENAI_BASE_URL=https://api.openai.com/v1 # optional, for compatible APIsWithout a key, AI matches use smart template fallbacks.
- Choose 2 Player on the home screen → Create 2-player room
- Copy the invite link (e.g.
http://localhost:5173/?join=ABC123) - Friend opens the link, enters their name, joins
- Both players chat in real time and guess rules together
| Agent | Role |
|---|---|
| ChatPartnerAgent | LLM dating match replies (solo mode) |
| RuleGeneratorAgent | Creates per-match rule sets |
| RuleMonitorAgent | Violation detection & nudges |
| RuleJudgeAgent | Adjudicates rule guesses |
| HintAgent | Non-spoiling hints |
| ModerationAgent | Safety layer |
npm install
npm run dev- Client: http://localhost:5173
- Server: http://localhost:3001
- Pick a match and start a mystery chat
- Send messages — watch for nudges when rules are violated
- Guess a rule when you think you've figured one out
- Earn Spark and unlock features (stickers → voice notes → deep dive → date quest)
- Watch the Agent panel for live orchestration logs
- "messages must include an emoji"
- "no capital letters"
- "messages must end with a question"
- "compliments are forbidden"
GET /api/profiles— demo match profilesGET /api/agents— agent roster & statusPOST /api/match— create conversation with generated rules
WebSocket events: join, message, guess, hint
Agents use heuristic/template logic by default. To plug in OpenAI:
- Set
OPENAI_API_KEY - Extend agents in
server/src/agents/to call your LLM for generation, judging, and hints
server/src/agents/ # Five agent classes + orchestrator
server/src/rules/ # Rule templates & validators
server/src/ConversationManager.js
client/src/components/ # MatchScreen, ChatRoom, AgentPanel