6.6 KiB
6.6 KiB
🎯 Quick Reference - Storyteller RPG
📍 Where We Are Now
✅ Current Features (Working)
- Basic storyteller-character private messaging
- Real-time WebSocket communication
- Multiple LLM support (GPT-4, Claude, Llama, Gemini, etc.)
- Each character can use different AI model
- Session creation and joining
- Message history per character
- Scene narrations broadcast to all
📁 Current File Structure
windsurf-project/
├── main.py # Backend API (FastAPI + WebSockets)
├── requirements.txt # Python dependencies
├── .env # API keys configuration
├── start.sh # Startup script (Linux/Mac)
├── start.bat # Startup script (Windows)
├── frontend/
│ ├── src/
│ │ ├── App.js
│ │ ├── components/
│ │ │ ├── SessionSetup.js
│ │ │ ├── CharacterView.js
│ │ │ └── StorytellerView.js
│ │ └── App.css
│ ├── public/
│ │ └── index.html
│ └── package.json
├── README.md
├── LLM_GUIDE.md # Guide to available LLMs
├── PROJECT_PLAN.md # Full project roadmap
└── MVP_ROADMAP.md # MVP-specific plan
🎯 MVP Goals Summary
Core User Modes
- Player (Human/AI) - Play a character with profile
- Storyteller (Human/AI) - Run the game, respond to players
- Gamemaster (Human only) - Create/manage games, control AI
- Admin (Dev only) - Full system access
Key Features for MVP
- Public/Private Messages - Players can have secret actions
- Character Profiles - Race, class, gender, personality
- Import/Export - Save characters as JSON or PNG with metadata
- AI Automation - AI players and storytellers run automatically
- Game Management - Create games, assign roles, save progress
- Permission System - Each role has specific capabilities
🎭 Character Profile System (MVP)
Races
- Human (Versatile)
- Elf (Graceful, perceptive)
- Dwarf (Sturdy, loyal)
- Orc (Strong, fierce)
- Halfling (Nimble, lucky)
Classes
- Warrior (Combat)
- Wizard (Magic)
- Cleric (Healing)
- Archer (Ranged)
- Rogue (Stealth)
Personalities
- Friendly (Optimistic)
- Serious (Focused)
- Doubtful (Cautious)
- Measured (Balanced)
Storyteller Styles
- Narrator (3rd person)
- DM (2nd person)
- Internal Thoughts (1st person)
📋 Permission Matrix
| Action | Player | Storyteller | GM | Admin |
|---|---|---|---|---|
| View own messages | ✅ | ✅ | ✅ | ✅ |
| View public messages | ✅ | ✅ | ✅ | ✅ |
| View private messages | ❌ | ✅ | ✅ | ✅ |
| Edit own messages | ✅ | ✅ | ✅ | ✅ |
| Edit storyteller | ❌ | ✅ | ❌ | ✅ |
| Edit human players | ❌ | ❌ | ❌ | ✅ |
| Edit AI responses | ❌ | ✅ | ✅ | ✅ |
| Create games | ❌ | ❌ | ✅ | ✅ |
| Control AI | ❌ | ✅ | ✅ | ✅ |
🗺️ 12-Week Implementation Plan
Weeks 1-2: Message System
- Public/private/mixed message types
- Enhanced message composer
- Visibility controls
Weeks 3-4: Character Profiles
- Profile creation wizard
- Race/class/personality templates
- Import/export (JSON & PNG)
- Profile-based LLM prompts
Weeks 5-7: User Modes
- Player interface
- Storyteller dashboard
- Gamemaster control panel
- Permission enforcement
Weeks 8-9: AI Automation
- AI player system
- AI storyteller system
- Automation controls
- Override mechanisms
Weeks 10-11: Game Management
- Game creation wizard
- Save/load system
- Database implementation
- Game checkpoints
Week 12: Polish & Testing
- UI/UX refinement
- Testing suite
- Documentation
- Performance optimization
🔧 Technology Stack
Current
- Backend: FastAPI, WebSockets, OpenAI/OpenRouter APIs
- Frontend: React, WebSocket client
- Storage: In-memory (temporary)
Needed for MVP
- Database: SQLAlchemy + PostgreSQL/SQLite
- Auth: JWT tokens (python-jose)
- Image: Pillow (PNG metadata)
- Frontend: react-hook-form, zod, file-saver
🚀 How to Run (Current)
# Quick start (kills old instances, starts both servers)
./start.sh
# Manual start
# Terminal 1 - Backend
python main.py
# Terminal 2 - Frontend
cd frontend
npm start
Access: http://localhost:3000
📝 Development Notes
Message Types (New Feature)
PUBLIC: "I shake the merchant's hand"
PRIVATE: "I attempt to pickpocket him"
MIXED: Both public and private actions in one message
Character Profile Structure
{
"name": "Thorin",
"gender": "Male",
"race": "Dwarf",
"class": "Warrior",
"personality": "Serious",
"llm_model": "anthropic/claude-3.5-sonnet",
"custom_prompts": {
"background": "A grizzled veteran...",
"response_style": "Speak gruffly and with honor"
}
}
LLM Prompt Building
# System prompt = Race + Class + Personality + Custom
"You are a Dwarf Warrior with a Serious personality.
You are stout and honorable. You excel in combat.
You are focused and pragmatic. Speak gruffly..."
🎯 Phase 1 Starting Point
First Task: Implement Public/Private Message System
Steps:
-
Update
Messagemodel inmain.py:class Message(BaseModel): visibility: str # "public", "private", "mixed" public_content: Optional[str] private_content: Optional[str] -
Create message type selector in
CharacterView.js:<select onChange={handleVisibilityChange}> <option value="public">Public Action</option> <option value="private">Private Action</option> <option value="mixed">Both</option> </select> -
Update WebSocket message handling:
- Filter messages based on user role
- Storyteller sees all
- Players see only public messages from others
-
Update UI to show message type indicators
Estimated Time: 3-5 days
📚 Documentation Links
- Full Roadmap:
PROJECT_PLAN.md(15 weeks, all phases) - MVP Plan:
MVP_ROADMAP.md(12 weeks, core features) - LLM Guide:
LLM_GUIDE.md(Available AI models) - README:
README.md(Setup and usage)
❓ Key Questions to Answer During Development
- Authentication: JWT vs Session-based?
- Database: PostgreSQL or MongoDB?
- Deployment: Docker, cloud provider?
- AI Costs: Budget limits per game/user?
- Scaling: How many concurrent games?
- Context: How to handle long game histories with LLM limits?
Next Steps: Review MVP_ROADMAP.md and begin Phase 1 implementation!
Last Updated: 2025-01-11
Status: Planning Complete → Ready for Development