Add YAML-driven quest system with context-aware offering:
Core Implementation:
- Quest data models (Quest, QuestObjective, QuestReward, QuestTriggers)
- QuestService for YAML loading and caching
- QuestEligibilityService with level, location, and probability filtering
- LoreService stub (MockLoreService) ready for Phase 6 Weaviate integration
Quest Content:
- 5 example quests across difficulty tiers (2 easy, 2 medium, 1 hard)
- Quest-centric design: quests define their NPC givers
- Location-based probability weights for natural quest offering
AI Integration:
- Quest offering section in npc_dialogue.j2 template
- Response parser extracts [QUEST_OFFER:quest_id] markers
- AI naturally weaves quest offers into NPC conversations
API Endpoints:
- POST /api/v1/quests/accept - Accept quest offer
- POST /api/v1/quests/decline - Decline quest offer
- POST /api/v1/quests/progress - Update objective progress
- POST /api/v1/quests/complete - Complete quest, claim rewards
- POST /api/v1/quests/abandon - Abandon active quest
- GET /api/v1/characters/{id}/quests - List character quests
- GET /api/v1/quests/{quest_id} - Get quest details
Frontend:
- Quest tracker sidebar with HTMX integration
- Quest offer modal for accept/decline flow
- Quest detail modal for viewing progress
- Combat service integration for kill objective tracking
Testing:
- Unit tests for Quest models and serialization
- Integration tests for full quest lifecycle
- Comprehensive test coverage for eligibility service
Documentation:
- Reorganized docs into /docs/phases/ structure
- Added Phase 5-12 planning documents
- Updated ROADMAP.md with new structure
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Code of Conquest - API Backend
Flask-based REST API backend for Code of Conquest, an AI-powered D&D-style game.
Overview
This is the API backend component of Code of Conquest. It provides:
- RESTful API endpoints for game functionality
- Business logic and game mechanics
- Database operations (Appwrite)
- AI integration (Claude, Replicate)
- Background job processing (RQ + Redis)
- Authentication and authorization
Architecture
Tech Stack:
- Framework: Flask 3.x
- Database: Appwrite (NoSQL)
- Job Queue: RQ (Redis Queue)
- Cache: Redis
- AI: Anthropic Claude, Replicate
- Logging: Structlog
- WSGI Server: Gunicorn
Key Components:
/app/api- API endpoint blueprints/app/models- Data models (dataclasses)/app/services- Business logic and external integrations/app/utils- Helper functions/app/tasks- Background job handlers/app/data- Game data (YAML files)
Setup
Prerequisites
- Python 3.11+
- Redis server
- Appwrite instance (cloud or self-hosted)
Installation
- Create virtual environment:
python3 -m venv venv
source venv/bin/activate
- Install dependencies:
pip install -r requirements.txt
- Configure environment:
cp .env.example .env
# Edit .env with your credentials
- Initialize database:
python scripts/init_database.py
Running Locally
Development mode:
# Make sure Redis is running
docker-compose up -d
# Activate virtual environment
source venv/bin/activate
# Set environment
export FLASK_ENV=development
# Run development server
python wsgi.py
The API will be available at http://localhost:5000
Production mode:
gunicorn --bind 0.0.0.0:5000 --workers 4 wsgi:app
Configuration
Environment-specific configs are in /config:
development.yaml- Local development settingsproduction.yaml- Production settings
Key settings:
- Server: Port, workers
- Redis: Connection settings
- RQ: Queue configuration
- AI: Model settings, rate limits
- Auth: Session, password requirements
- CORS: Allowed origins
API Documentation
See API_REFERENCE.md for complete endpoint documentation.
Base URL
- Development:
http://localhost:5000 - Production:
https://api.codeofconquest.com
Authentication
Uses Appwrite session-based authentication with HTTP-only cookies.
Response Format
All endpoints return standardized JSON responses:
{
"app": "Code of Conquest",
"version": "0.1.0",
"status": 200,
"timestamp": "2025-01-15T10:30:00Z",
"result": {...},
"error": null
}
Testing
Run tests with pytest:
# Activate virtual environment
source venv/bin/activate
# Run all tests
pytest
# Run with coverage
pytest --cov=app tests/
# Run specific test file
pytest tests/test_character.py
Background Jobs
The API uses RQ for background processing:
Start RQ worker:
rq worker ai_tasks combat_tasks marketplace_tasks --url redis://localhost:6379
Monitor jobs:
rq info --url redis://localhost:6379
Directory Structure
api/
├── app/ # Application code
│ ├── api/ # API endpoint blueprints
│ ├── models/ # Data models
│ ├── services/ # Business logic
│ ├── utils/ # Utilities
│ ├── tasks/ # Background jobs
│ ├── ai/ # AI integration
│ ├── game_logic/ # Game mechanics
│ └── data/ # Game data (YAML)
├── config/ # Configuration files
├── tests/ # Test suite
├── scripts/ # Utility scripts
├── logs/ # Application logs
├── docs/ # API documentation
├── requirements.txt # Python dependencies
├── wsgi.py # WSGI entry point
├── docker-compose.yml # Redis service
└── .env.example # Environment template
Development
See CLAUDE.md in the project root for:
- Coding standards
- Development workflow
- Project structure guidelines
- Git conventions
Deployment
See DEPLOYMENT.md for production deployment instructions.
Related Components
- Public Web:
/public_web- Traditional web frontend - Godot Client:
/godot_client- Native game client
Both frontends consume this API backend.
License
Proprietary - All rights reserved