milwright commited on
Commit
2563209
·
1 Parent(s): 1df4d55

Update README.md

Browse files
Files changed (2) hide show
  1. CLAUDE.md +68 -0
  2. README.md +50 -1
CLAUDE.md ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Development Commands
6
+
7
+ ### Local Development
8
+ - `make dev` - Start local Python HTTP server on port 8000
9
+ - `make dev-python` - Start FastAPI server on port 7860 (production-like)
10
+ - `npm run dev` - Alternative Python HTTP server command
11
+ - `python local-server.py 8000` - Direct local server command
12
+
13
+ ### Docker Development
14
+ - `make docker-dev` - Start with docker-compose (recommended for production testing)
15
+ - `make docker-build` - Build Docker image
16
+ - `make docker-run` - Run container with environment variables
17
+ - `make logs` - View Docker logs
18
+ - `make stop` - Stop Docker containers
19
+
20
+ ### Utilities
21
+ - `make install` - Install both Python and Node.js dependencies
22
+ - `make clean` - Remove temporary files and dependencies
23
+ - `make help` - Show all available commands
24
+
25
+ ## Architecture Overview
26
+
27
+ ### Frontend Structure
28
+ This is a **vanilla JavaScript modular application** with no build step. Key architectural patterns:
29
+
30
+ **Module Organization:**
31
+ - `app.js` - Main application controller, handles UI state and round management
32
+ - `clozeGameEngine.js` - Core game logic, word selection, and scoring
33
+ - `bookDataService.js` - Manages book data fetching from Hugging Face Datasets API
34
+ - `aiService.js` - OpenRouter API integration for AI-powered word selection and contextualization
35
+ - `chatInterface.js` - Modal-based chat UI for contextual hints
36
+ - `conversationManager.js` - AI conversation state management for chat functionality
37
+ - `welcomeOverlay.js` - First-time user onboarding
38
+
39
+ **Key Architectural Decisions:**
40
+ - **No capitalized words as blanks** - All word selection logic filters out capitalized words (proper nouns, sentence starters)
41
+ - **Progressive difficulty** - Levels 1-2: 1 blank, 3-4: 2 blanks, 5+: 3 blanks
42
+ - **Batch API processing** - Processes both passages simultaneously to avoid rate limits, with fallback to sequential processing
43
+ - **Accessible fonts** - Uses system font stack throughout UI, avoiding decorative fonts for accessibility
44
+
45
+ ### Backend Structure
46
+ **Dual server setup:**
47
+ - `app.py` - FastAPI server for production (HuggingFace Spaces), handles environment variable injection
48
+ - `local-server.py` - Simple HTTP server for local development
49
+
50
+ **Environment variable handling:**
51
+ - Production: FastAPI injects API keys via meta tags, read by `init-env.js`
52
+ - Local: Environment variables accessed directly via `process.env` or `window`
53
+
54
+ ### Data Flow
55
+ 1. **Game Initialization**: BookDataService fetches book metadata from HuggingFace
56
+ 2. **Passage Processing**: AIService processes passages via OpenRouter API for word selection and contextualization
57
+ 3. **Word Selection**: Multi-layered selection (AI → manual fallback → emergency fallback) with capitalization filtering
58
+ 4. **Chat System**: Context-aware conversation manager tracks per-blank question state
59
+
60
+ ### API Dependencies
61
+ - **OpenRouter API** - AI word selection, contextualization, and chat responses (Google Gemma 3)
62
+ - **HuggingFace Datasets API** - Book content and metadata retrieval
63
+ - **External**: CDN-hosted Tailwind CSS and Google Fonts
64
+
65
+ ### Styling Architecture
66
+ - **CSS Custom Properties** - Consistent theming with `--aged-paper`, `--typewriter-ink` variables
67
+ - **Accessible Design** - System fonts, proper contrast, keyboard navigation
68
+ - **Responsive Layout** - Mobile-first design with progressive enhancement
README.md CHANGED
@@ -58,4 +58,53 @@ To run the Cloze Reader application locally using Docker:
58
 
59
  ### Prerequisites
60
  - Docker installed on your system
61
- - Port 7860 available on your machine
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
  ### Prerequisites
60
  - Docker installed on your system
61
+ - Port 7860 available on your machine
62
+
63
+ ## Architecture Overview
64
+
65
+ ### Frontend Structure
66
+ This is a **vanilla JavaScript modular application** with no build step. Key architectural patterns:
67
+
68
+ **Module Organization:**
69
+ - `app.js` - Main application controller, handles UI state and round management
70
+ - `clozeGameEngine.js` - Core game logic, word selection, and scoring
71
+ - `bookDataService.js` - Manages book data fetching from Hugging Face Datasets API
72
+ - `aiService.js` - OpenRouter API integration for AI-powered word selection and contextualization
73
+ - `chatInterface.js` - Modal-based chat UI for contextual hints
74
+ - `conversationManager.js` - AI conversation state management for chat functionality
75
+ - `welcomeOverlay.js` - First-time user onboarding
76
+
77
+ ```mermaid
78
+ graph TD
79
+ A[User loads app] --> B[Welcome Overlay]
80
+ B --> C[App.js - Main Controller]
81
+ C --> D[ClozeGameEngine.js]
82
+ C --> E[ChatInterface.js]
83
+
84
+ D --> F[BookDataService.js]
85
+ F --> G[HuggingFace Datasets API]
86
+
87
+ D --> H[AIService.js]
88
+ H --> I[OpenRouter API - Gemma 3]
89
+
90
+ E --> J[ConversationManager.js]
91
+ J --> H
92
+
93
+ D --> K[Word Selection Logic]
94
+ K --> L[Filter Capitalized Words]
95
+ K --> M[Progressive Difficulty]
96
+
97
+ C --> N[UI State Management]
98
+ N --> O[Level Progression]
99
+ N --> P[Score Tracking]
100
+ N --> Q[Passage Display]
101
+
102
+ style A fill:#f9f,stroke:#333,stroke-width:2px
103
+ style I fill:#bbf,stroke:#333,stroke-width:2px
104
+ style G fill:#bbf,stroke:#333,stroke-width:2px
105
+ style L fill:#fbb,stroke:#333,stroke-width:2px
106
+ ```
107
+
108
+ ---
109
+
110
+ [milwright](https://huggingface.co/milwright), *Zach Muhlbauer*, CUNY Graduate Center