- Add AIReportSystem.js for detailed AI response capture and report generation - Add AIReportInterface.js UI component for report access and export - Integrate AI reporting into LLMValidator and SmartPreviewOrchestrator - Add missing modules to Application.js configuration (unifiedDRS, smartPreviewOrchestrator) - Create missing content/chapters/sbs.json for book metadata - Enhance Application.js with debug logging for module loading - Add multi-format export capabilities (text, HTML, JSON) - Implement automatic learning insights extraction from AI feedback - Add session management and performance tracking for AI reports 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
17 KiB
CLAUDE.md - Project Context & Instructions
📋 Project Overview
Class Generator 2.0 - Complete rewrite of educational games platform with ultra-modular architecture.
🎯 Current Mission
Building a bulletproof modular system with strict separation of concerns using vanilla JavaScript, HTML, and CSS. The architecture enforces inviolable responsibility patterns with sealed modules and dependency injection.
🏗️ Architecture Status
PHASE 1 COMPLETED ✅ - Core foundation built with rigorous architectural patterns:
- ✅ Module.js - Abstract base class with WeakMap privates and sealed instances
- ✅ EventBus.js - Strict event system with validation and module registration
- ✅ ModuleLoader.js - Dependency injection with proper initialization order
- ✅ Router.js - Navigation with guards, middleware, and state management
- ✅ Application.js - Auto-bootstrap system with lifecycle management
- ✅ Development Server - HTTP server with ES6 modules and CORS support
DRS SYSTEM COMPLETED ✅ - Advanced learning modules with AI integration:
- ✅ TextModule - Reading comprehension exercises with AI text analysis
- ✅ AudioModule - Listening exercises with AI audio comprehension
- ✅ ImageModule - Visual comprehension with AI vision analysis
- ✅ GrammarModule - Grammar exercises with AI linguistic analysis
- ✅ AI Integration - OpenAI → DeepSeek → Disable fallback system
- ✅ Persistent Storage - Progress tracking with timestamps and metadata
- ✅ Data Merge System - Local/external data synchronization
🔥 Critical Requirements
Architecture Principles (NON-NEGOTIABLE)
- Inviolable Responsibility - Each module has exactly one purpose
- Zero Direct Dependencies - All communication via EventBus only
- Sealed Instances - Modules cannot be modified after creation
- Private State - Internal data completely inaccessible via WeakMap
- Contract Enforcement - Abstract methods must be implemented
- Dependency Injection - No globals, everything injected through constructor
Technical Constraints
- Vanilla JS/HTML/CSS only - No frameworks
- ES6 Modules - Import/export syntax required
- HTTP Protocol - Never file:// (use development server)
- Modular CSS - Component-scoped styling
- Event-Driven - No direct module coupling
UI/UX Design Principles (CRITICAL)
- NO SCROLL POLICY - All interfaces MUST fit within viewport height without scrolling
- Height Management - Vertical space is precious, horizontal space is abundant
- Compact Navigation - Top bars and headers must be minimal height
- Responsive Layout - Use available width, preserve viewport height
- Mobile-First - Design for smallest screens first, then scale up
🚀 Development Workflow
Starting the System
# Option 1: Windows batch file
start.bat
# Option 2: Node.js directly
node server.js
# Option 3: NPM scripts
npm start
Access: http://localhost:3000
Development Server Features
- ✅ ES6 modules support
- ✅ CORS enabled for online communication
- ✅ Proper MIME types for all file formats
- ✅ Development-friendly caching (assets cached, HTML not cached)
- ✅ Graceful error handling with styled 404 pages
📁 Project Structure
├── src/
│ ├── core/ # COMPLETED - Core system (sealed)
│ │ ├── Module.js # Abstract base class
│ │ ├── EventBus.js # Event communication system
│ │ ├── ModuleLoader.js # Dependency injection
│ │ ├── Router.js # Navigation system
│ │ └── index.js # Core exports
│ ├── components/ # TODO - UI components
│ ├── games/ # TODO - Game modules
│ ├── content/ # TODO - Content system
│ ├── styles/ # COMPLETED - Modular CSS
│ │ ├── base.css # Foundation styles
│ │ └── components.css # Reusable UI components
│ └── Application.js # COMPLETED - Bootstrap system
├── Legacy/ # Archived old system
├── index.html # COMPLETED - Entry point
├── server.js # COMPLETED - Development server
├── start.bat # COMPLETED - Quick start script
├── package.json # COMPLETED - Node.js config
└── README.md # COMPLETED - Documentation
🎮 Creating New Modules
Game Module Template
import Module from '../core/Module.js';
class GameName extends Module {
constructor(name, dependencies, config) {
super(name, ['eventBus']); // Declare dependencies
// Validate dependencies
if (!dependencies.eventBus) {
throw new Error('GameName requires EventBus dependency');
}
this._eventBus = dependencies.eventBus;
this._config = config;
Object.seal(this); // Prevent modification
}
async init() {
this._validateNotDestroyed();
// Set up event listeners
this._eventBus.on('game:start', this._handleStart.bind(this), this.name);
this._setInitialized();
}
async destroy() {
this._validateNotDestroyed();
// Cleanup logic here
this._setDestroyed();
}
// Private methods
_handleStart(event) {
this._validateInitialized();
// Game logic here
}
}
export default GameName;
Registration in Application.js
modules: [
{
name: 'gameName',
path: './games/GameName.js',
dependencies: ['eventBus'],
config: { difficulty: 'medium' }
}
]
🔍 Debugging & Monitoring
Debug Panel (F12 to toggle)
- System status and uptime
- Loaded modules list
- Event history
- Module registration status
Console Access
window.app.getStatus() // Application status
window.app.getCore().eventBus // EventBus instance
window.app.getCore().moduleLoader // ModuleLoader instance
window.app.getCore().router // Router instance
Common Commands
# Check module status
window.app.getCore().moduleLoader.getStatus()
# View event history
window.app.getCore().eventBus.getEventHistory()
# Navigate programmatically
window.app.getCore().router.navigate('/games')
🚧 Next Development Phase
Immediate Tasks (PHASE 2)
- ❌ Component-based UI System - Reusable UI components with scoped CSS
- ❌ Example Game Module - Simple memory game to validate architecture
- ❌ Content System Integration - Port content loading from Legacy
- ❌ Testing Framework - Validate module contracts and event flow
Known Legacy Issues to Fix
31 bug fixes and improvements from the old system:
- Grammar game functionality issues
- Word Storm duration and difficulty problems
- Memory card display issues
- Adventure game text repetition
- UI alignment and feedback issues
- Performance optimizations needed
🔒 Security & Rigidity Enforcement
Module Protection Layers
- Object.seal() - Prevents property addition/deletion
- Object.freeze() - Prevents prototype modification
- WeakMap privates - Internal state completely hidden
- Abstract enforcement - Missing methods throw errors
- Validation at boundaries - All inputs validated
Error Messages
The system provides explicit error messages for violations:
- "Module is abstract and cannot be instantiated directly"
- "Module name is required and must be a string"
- "EventBus requires module registration before use"
- "Module must be initialized before use"
📝 Development Guidelines
DO's
- ✅ Always extend Module base class for game modules
- ✅ Use EventBus for all inter-module communication
- ✅ Validate dependencies in constructor
- ✅ Call
_setInitialized()after successful init - ✅ Use private methods with underscore prefix
- ✅ Seal objects to prevent modification
- ✅ Start with simple solutions first - Test basic functionality before adding complexity
- ✅ Test code in console first - Validate logic with quick console tests before file changes
DON'Ts
- ❌ Never access another module's internals directly
- ❌ Never use global variables for communication
- ❌ Never modify Module base class or core system
- ❌ Never skip dependency validation
- ❌ Never use file:// protocol (always use HTTP server)
- ❌ NEVER HARDCODE JSON PATHS - Always use dynamic paths based on selected book/chapter
- ❌ Never overcomplicate positioning logic - Use simple CSS transforms (translate(-50%, -50%)) for centering before complex calculations
🧠 Problem-Solving Best Practices
UI Positioning Issues
- Start Simple: Use basic CSS positioning (center with transform) first
- Test in Console: Validate positioning logic with
console.logand direct DOM manipulation - Check Scope: Ensure variables like
contentLoaderare globally accessible when needed - Cache-bust: Add
?v=2to CSS/JS files when browser cache causes issues - Verify Real Dimensions: Use
getBoundingClientRect()only when basic centering fails
Debugging Workflow
- Console First: Test functions directly in browser console before modifying files
- Log Everything: Add extensive logging to understand execution flow
- One Change at a Time: Make incremental changes and test each step
- Simple Solutions Win: Prefer
left: 50%; transform: translateX(-50%)over complex calculations
🎯 Success Metrics
Architecture Quality
- Zero direct coupling between modules
- 100% sealed instances - no external modification possible
- Complete test coverage of module contracts
- Event-driven communication only
Performance Targets
- <100ms module loading time
- <50ms event propagation time
- <200ms application startup time
- Zero memory leaks in module lifecycle
🔄 Migration Notes
From Legacy System
The Legacy/ folder contains the complete old system. Key architectural changes:
Old Approach:
- Global variables and direct coupling
- Manual module registration
- CSS modifications in global files
- Mixed responsibilities in single files
New Approach:
- Strict modules with dependency injection
- Automatic loading with dependency resolution
- Component-scoped CSS injection
- Single responsibility per module
Data Migration
- Content modules need adaptation to new Module base class
- Game logic needs EventBus integration
- CSS needs component scoping
- Configuration needs dependency declaration
📋 COMPREHENSIVE TEST CHECKLIST
🏗️ Architecture Tests
Core System Tests
-
Module.js Tests
- Abstract class cannot be instantiated directly
- WeakMap private data is truly private
- Object.seal() prevents modification
- Lifecycle methods work correctly (init, destroy)
- Validation methods throw appropriate errors
-
EventBus.js Tests
- Event registration and deregistration
- Module validation before event usage
- Event history tracking
- Cross-module communication isolation
- Memory leak prevention on module destroy
-
ModuleLoader.js Tests
- Dependency injection order
- Circular dependency detection
- Module initialization sequence
- Error handling for missing dependencies
- Module unloading and cleanup
-
Router.js Tests
- Navigation guards functionality
- Middleware execution order
- State management
- URL parameter handling
- History management
-
Application.js Tests
- Auto-bootstrap system
- Lifecycle management
- Module registration
- Error recovery
- Debug panel functionality
🎮 DRS System Tests
Module Interface Tests
- ExerciseModuleInterface Tests
- All required methods implemented
- Method signatures correct
- Error throwing for abstract methods
Individual Module Tests
-
TextModule Tests
- Text loading and display
- Question generation/extraction
- AI validation with fallback
- Progress tracking
- UI interaction (buttons, inputs)
- Viewing time tracking
- Results calculation
-
AudioModule Tests
- Audio playback controls
- Playback counting
- Transcript reveal timing
- AI audio analysis
- Progress tracking
- Penalty system for excessive playbacks
-
ImageModule Tests
- Image loading and display
- Zoom functionality
- Observation time tracking
- AI vision analysis
- Question types (description, details, interpretation)
- Progress tracking
-
GrammarModule Tests
- Rule explanation display
- Exercise type variety (fill-blank, correction, etc.)
- Hint system
- Attempt tracking
- AI grammar analysis
- Scoring with penalties/bonuses
🤖 AI Integration Tests
AI Provider Tests
-
OpenAI Integration
- API connectivity test
- Response format validation
- Error handling
- Timeout management
-
DeepSeek Integration
- API connectivity test
- Fallback from OpenAI
- Response format validation
- Error handling
-
AI Fallback System
- Provider switching logic
- Graceful degradation to basic validation
- Status tracking and reporting
- Recovery mechanisms
Response Parsing Tests
- Structured Response Parsing
- [answer]yes/no extraction
- [explanation] extraction
- Error handling for malformed responses
- Multiple format support
💾 Data Persistence Tests
Progress Tracking Tests
-
Mastery Tracking
- Timestamp recording
- Metadata storage
- Progress calculation
- Persistent storage integration
-
Data Merge System
- Local vs external data merging
- Conflict resolution strategies
- Import/export functionality
- Data integrity validation
🎨 UI/UX Tests
Design Principles Tests
-
No Scroll Policy
- All interfaces fit viewport height
- Responsive breakpoint testing
- Mobile viewport compliance
-
Responsive Design
- Mobile-first approach validation
- Horizontal space utilization
- Vertical space conservation
Component Tests
-
Button Interactions
- Hover effects
- Disabled states
- Click handlers
- Loading states
-
Form Controls
- Input validation
- Error display
- Accessibility compliance
- Keyboard navigation
🌐 Network & Server Tests
Development Server Tests
-
ES6 Modules Support
- Import/export functionality
- MIME type handling
- CORS configuration
-
Caching Strategy
- Assets cached correctly
- HTML not cached for development
- Cache invalidation
-
Error Handling
- 404 page display
- Graceful error recovery
- Error message clarity
🔄 Integration Tests
End-to-End Scenarios
-
Complete Exercise Flow
- Module loading
- Exercise presentation
- User interaction
- AI validation
- Progress saving
- Results display
-
Multi-Module Navigation
- Module switching
- State preservation
- Memory cleanup
-
Data Persistence Flow
- Progress tracking across sessions
- Data export/import
- Sync functionality
⚡ Performance Tests
Loading Performance
- Module Loading Times
- <100ms module loading
- <50ms event propagation
- <200ms application startup
Memory Management
- Memory Leaks
- Module cleanup verification
- Event listener removal
- DOM element cleanup
🔒 Security Tests
Module Isolation Tests
- Private State Protection
- WeakMap data inaccessible
- Sealed object modification prevention
- Cross-module boundary enforcement
Input Validation Tests
- Boundary Validation
- All inputs validated
- Error messages for violations
- Malicious input handling
🎯 TESTING PRIORITY
HIGH PRIORITY (Core System)
- Module.js lifecycle and sealing tests
- EventBus communication isolation
- ModuleLoader dependency injection
- Basic DRS module functionality
MEDIUM PRIORITY (Integration)
- AI provider fallback system
- Data persistence and merging
- UI/UX compliance tests
- End-to-end exercise flows
LOW PRIORITY (Polish)
- Performance benchmarks
- Advanced security tests
- Edge case scenarios
- Browser compatibility
This is a high-quality, maintainable system built for educational software that will scale.