first commit

This commit is contained in:
2025-11-24 23:10:55 -06:00
commit 8315fa51c9
279 changed files with 74600 additions and 0 deletions

284
CLAUDE.md Normal file
View File

@@ -0,0 +1,284 @@
# CLAUDE.md
## Project Overview
"Code Of Conquest" is a web-based AI-powered Dungeons & Dragons style game where Claude acts as the Dungeon Master. Players create characters, explore worlds, engage in turn-based combat, and interact with an AI-driven narrative system.
**Tech Stack:** Flask + Jinja2 + HTMX + Appwrite + RQ + Redis + Anthropic/Replicate APIs
**Target Delivery:** Progressive Web App (PWA)
---
## Repository Structure
This repository contains three independent deployable components:
- **[/api](api/)** - Flask REST API backend (all business logic, models, services)
- **[/public_web](public_web/)** - Flask web frontend (HTML/HTMX UI, calls API)
- **[/godot_client](godot_client/)** - Godot game client (native cross-platform)
## Documentation Index
**Project-Wide:**
- **[ARCHITECTURE.md](docs/ARCHITECTURE.md)** - System architecture, tech stack details, component design
- **[ROADMAP.md](docs/ROADMAP.md)** - Development roadmap and phases
- **[DEPLOYMENT.md](docs/DEPLOYMENT.md)** - Testing, deployment, monitoring, security
- **[WEB_VS_CLIENT_SYSTEMS.md](docs/WEB_VS_CLIENT_SYSTEMS.md)** - Feature distribution between web and Godot clients
**API Backend:**
- **[API_REFERENCE.md](api/docs/API_REFERENCE.md)** - API endpoints and response formats
- **[DATA_MODELS.md](api/docs/DATA_MODELS.md)** - Character system, items, skills, effects, sessions
- **[GAME_SYSTEMS.md](api/docs/GAME_SYSTEMS.md)** - Combat mechanics, marketplace, NPCs
- **[QUEST_SYSTEM.md](api/docs/QUEST_SYSTEM.md)** - Quest mechanics and data structures
- **[STORY_PROGRESSION.md](api/docs/STORY_PROGRESSION.md)** - Story progression system
- **[MULTIPLAYER.md](api/docs/MULTIPLAYER.md)** - Multiplayer session backend logic
- **[API_TESTING.md](api/docs/API_TESTING.md)** - API testing guide
- **[APPWRITE_SETUP.md](api/docs/APPWRITE_SETUP.md)** - Database setup
- **[PHASE4_IMPLEMENTATION.md](api/docs/PHASE4_IMPLEMENTATION.md)** - Phase 4 detailed implementation tasks
> **Documentation Hierarchy:** `/docs/ROADMAP.md` is the single source for project progress. Service-specific docs (`/api/docs/`, `/public_web/docs/`, `/godot_client/docs/`) contain implementation details.
**Web Frontend:**
- **[TEMPLATES.md](public_web/docs/TEMPLATES.md)** - Template structure and conventions
- **[HTMX_PATTERNS.md](public_web/docs/HTMX_PATTERNS.md)** - HTMX integration patterns
- **[TESTING.md](public_web/docs/TESTING.md)** - Manual testing guide
- **[MULTIPLAYER.md](public_web/docs/MULTIPLAYER.md)** - Multiplayer UI implementation
**Godot Client:**
- **[ARCHITECTURE.md](godot_client/docs/ARCHITECTURE.md)** - Client architecture
- **[GETTING_STARTED.md](godot_client/docs/GETTING_STARTED.md)** - Setup and usage
- **[EXPORT.md](godot_client/docs/EXPORT.md)** - Platform export guide
- **[THEME_SETUP.md](godot_client/docs/THEME_SETUP.md)** - UI theming guide
- **[MULTIPLAYER.md](godot_client/docs/MULTIPLAYER.md)** - Multiplayer client implementation
- **[scene_char_list.md](godot_client/docs/scene_char_list.md)** - Character list scene implementation
---
## Development Guidelines
### Project Structure
**Microservices Architecture:**
The repository is organized into three independent components:
1. **`/api`** - REST API Backend
- Source code in `/api/app`
- All business logic, models, services
- Modular organization:
- `/api/app/api/` - API endpoint blueprints
- `/api/app/models/` - Data models (dataclasses)
- `/api/app/services/` - Business logic & integrations
- `/api/app/utils/` - Utilities
- `/api/app/data/` - Game data (YAML)
- Independent deployment with own `requirements.txt`, `config/`, `tests/`
2. **`/public_web`** - Web Frontend
- Source code in `/public_web/app`
- Lightweight view layer (makes HTTP calls to API)
- Structure:
- `/public_web/app/views/` - View blueprints
- `/public_web/templates/` - Jinja2 templates
- `/public_web/static/` - CSS, JS, images
- Independent deployment with own `requirements.txt`, `config/`
3. **`/godot_client`** - Game Client
- Godot 4.5 project
- Makes HTTP calls to API
- Independent deployment (exports to Desktop/Mobile/Web)
**Each component:**
- Has its own virtual environment
- Deploys independently
- Shares no code (API is single source of truth)
- Typed config loaders (YAML-driven)
### Coding Standards
**Style & Structure**
- Prefer longer, explicit code over compact one-liners
- Always include docstrings for functions/classes + inline comments
- Strongly prefer OOP-style code (classes over functional/nested functions)
- Strong typing throughout (dataclasses, TypedDict, Enums, type hints)
- Value future-proofing and expanded usage insights
**Data Design**
- Use dataclasses for internal data modeling
- Typed JSON structures
- Functions return fully typed objects (no loose dicts)
- Snapshot files in JSON or YAML
- Human-readable fields (e.g., `scan_duration`)
**Templates & UI**
- Don't mix large HTML/CSS blocks in Python code
- Prefer Jinja templates for HTML rendering
- Clean CSS, minimal inline clutter, readable template logic
**Writing & Documentation**
- Markdown documentation
- Clear section headers
- Roadmap/Phase/Feature-Session style documents
- Boilerplate templates first, then refinements
**Logging**
- Use structlog (pip package)
- Setup logging at app start: `logger = logging.get_logger(__file__)`
**Preferred Pip Packages**
- API/Web Server: Flask
- HTTP: Requests
- Logging: Structlog
- Scheduling: APScheduler
### Error Handling
- Custom exception classes for domain-specific errors
- Consistent error response formats (JSON structure)
- Logging severity levels (ERROR vs WARNING)
### Configuration
- Each component has environment-specific configs in its own `/config/*.yaml`
- API: `/api/config/development.yaml`, `/api/config/production.yaml`
- Web: `/public_web/config/development.yaml`, `/public_web/config/production.yaml`
- `.env` for secrets (never committed)
- Maintain `.env.example` in each component for documentation
- Typed config loaders using dataclasses
- Validation on startup
### Containerization & Deployment
- Explicit Dockerfiles
- Production-friendly hardening (distroless/slim when meaningful)
- Clear build/push scripts that:
- Use git branch as tag
- Ask whether to tag `:latest`
- Ask whether to push
- Support private registries
### API Design
- RESTful conventions
- Versioning strategy (`/api/v1/...`)
- Standardized response format:
```json
{
"app": "<APP NAME>",
"version": "<APP VERSION>",
"status": <HTTP STATUS CODE>,
"timestamp": "<UTC ISO8601>",
"request_id": "<optional request id>",
"result": <data OR null>,
"error": {
"code": "<optional machine code>",
"message": "<human message>",
"details": {}
},
"meta": {}
}
```
### Dependency Management
- Use `requirements.txt` and virtual environments (`python3 -m venv venv`)
- Use path `venv` for all virtual environments
- Pin versions to version ranges
- Activate venv before running code (unless in Docker)
### Testing Standards
- Manual testing preferred for applications
- **API Backend:** Maintain `api/docs/API_TESTING.md` with endpoint examples, curl/httpie commands, expected responses
- **Unit tests:** Use pytest for API backend (`api/tests/`)
- **Web Frontend:** Manual testing checklist in `public_web/README.md`
- **Godot Client:** Manual testing via Godot editor
### Git Standards
**Branch Strategy:**
- `master` - Production-ready code only
- `dev` - Main development branch, integration point
- `beta` - (Optional) Public pre-release testing
**Workflow:**
- Feature work branches off `dev` (e.g., `feature/add-scheduler`)
- Merge features back to `dev` for testing
- Promote `dev``beta` for public testing (when applicable)
- Promote `beta` (or `dev`) → `master` for production
**Commit Messages:**
- Use conventional commit format: `feat:`, `fix:`, `docs:`, `refactor:`, etc.
- Keep commits atomic and focused
- Write clear, descriptive messages
**Tagging:**
- Tag releases on `master` with semantic versioning (e.g., `v1.2.3`)
- Optionally tag beta releases (e.g., `v1.2.3-beta.1`)
---
## Workflow Preference
I follow a pattern: **brainstorm → design → code → revise**
---
## ⚠️ CLAUDE WORKSPACE BELOW ⚠️
**The sections above define development preferences and standards.**
**Everything below is working context for Claude to track project-specific information, decisions, and progress.**
---
## Current Project Status
**Status:** Repository Reorganization Complete
**Last Updated:** November 17, 2025
**Document Version:** 3.0
### Recent Changes
**Repository Reorganization (Nov 17, 2025):**
- Split monolithic Flask app into microservices architecture
- Created three independent components: `/api`, `/public_web`, `/godot_client`
- Each component has separate dependencies, configs, and deployment
- API backend contains all business logic
- Web frontend and Godot client are thin clients that call API
### Active Decisions Log
- Using Flask over FastAPI (team familiarity, RQ handles async)
- Using RQ over Celery (simpler setup, adequate for scale)
- Using Appwrite (reduces infrastructure overhead, built-in auth/realtime)
- Using Dataclasses over ORM (flexibility, no migrations, JSON storage)
- Turn-based combat (simpler AI prompts, better for multiplayer, classic D&D)
- **Microservices architecture** (independent deployment, API as single source of truth)
### Known Technical Debt
~~**Public Web Frontend Service Dependencies:** RESOLVED (Nov 21, 2025)~~
- All views now use `APIClient` for HTTP requests to API backend
- Stub service modules removed
- Proper error handling with typed exceptions (`APIError`, `APINotFoundError`, etc.)
- Session cookies forwarded to API for authentication
**Remaining Minor Items:**
- Auth decorator doesn't re-validate expired API sessions (low priority)
- Origin/class validation fetches full lists instead of single-item lookups (optimization opportunity)
### Next Steps
1. ~~Refactor `public_web` views to use HTTP API calls~~ ✅ Complete
2. Test both API and web frontend independently
3. Update Godot client to use new API structure (if needed)
4. Continue Phase 4 development (quests, story progression, multiplayer)
---
## Notes for Claude Code
When implementing features:
1. **Start with models** - Define dataclasses first
2. **Write tests** - TDD approach for game logic
3. **API then UI** - Backend endpoints before frontend
4. **Security first** - Validate inputs, check permissions
5. **Cost conscious** - Monitor AI usage, implement limits
6. **Keep it simple** - Prefer straightforward solutions
7. **Document as you go** - Update documentation with decisions
**Remember:** Developer has strong security expertise (don't compromise security for convenience) and extensive infrastructure experience (focus on application logic).
- memorize our godot workflow for the frontend.