Demo System
The PadawanForge demo provides an anonymous, barrier-free introduction to cognitive training through rapid true/false statement judgment. Players experience the complete game mechanics without registration requirements while maintaining the option to save progress and convert to full accounts.
Overview
Purpose
The demo system showcases the core PadawanForge experience through:
- Anonymous Play: No login required, instant access to gameplay
- Complete Experience: Full 7-minute session with 40 AI-generated statements
- Guest Sessions: Temporary identity with progress tracking and analytics
- Virtual Tutors: AI-powered guidance with distinct personalities
- Progress Tracking: XP, accuracy, streak analytics, and achievements
- Account Conversion: Seamless upgrade to full registered account
Target Audience
- New Players: First-time users exploring cognitive training capabilities
- Casual Players: Users wanting quick sessions without account commitment
- Evaluators: Educators, researchers, or decision-makers assessing the platform
- Mobile Users: Players on devices where account creation may be cumbersome
Architecture Overview
Guest Session System
Guest sessions provide temporary identity and progress tracking without account creation, using a hybrid storage approach for optimal performance and persistence.
Session Structure
interface DemoSession {
id: string; // Session UUID
sessionToken: string; // Secure authentication token
guestUsername: string; // "Guest_ABC123" format
guestAvatar?: string; // Optional avatar
// Analytics data
ipAddress?: string;
userAgent?: string;
referrer?: string;
utmSource?: string;
utmMedium?: string;
utmCampaign?: string;
// Session state (stored in session_data JSON)
sessionData: {
totalSessions: number; // Sessions completed
totalXP: number; // Cumulative experience
averageAccuracy: number; // Running accuracy percentage
bestStreak: number; // Longest hot streak achieved
sessionHistory: SessionSummary[]; // Recent sessions
currentGame?: GameState; // Active game state
achievements: Achievement[]; // Unlocked achievements
};
// Activity tracking (stored in activity_data JSON)
activityData: {
pageViews: number;
featuresUsed: string[];
totalInteractions: number;
engagementScore: number;
};
// Conversion tracking (stored in conversion_data JSON)
conversionData: {
testVariant?: string; // A/B test assignment
conversionTriggers: string[]; // Events that might trigger conversion
timeToConversion?: number; // If converted, time taken
};
expiresAt: Date; // 24-hour expiration
lastActivity: Date;
isConverted: boolean;
convertedToPlayerUuid?: string;
createdAt: Date;
updatedAt: Date;
}
Storage Strategy
- Database Storage: Primary storage in Cloudflare D1 with JSON fields for flexibility
- Session Token: Secure token for session identification and authentication
- KV Backup: Optional Cloudflare KV storage for high-performance session lookup
- Browser Cache: Client-side localStorage for offline capability and quick access
- Expiration: 24-hour automatic cleanup with grace period handling
Session Lifecycle
- Creation: Auto-generate guest identity on demo entry
- Persistence: Dual storage (localStorage + KV) for maximum reliability
- Restoration: Cross-device session recovery via secure token
- Expiration: Automatic cleanup after 24 hours of inactivity
- Conversion: Optional upgrade to full account preserving all progress
Core Gameplay
Session Structure
- Duration: Precisely 420 seconds (7 minutes) for optimal cognitive load
- Statements: 40 targeted true/false questions generated by AI
- Pacing: ~10.5 seconds average per statement with adaptive timing
- Difficulty: Adaptive based on real-time performance metrics
- Topic Mix: Balanced selection across Basic/Intermediate/Advanced levels
Game Flow
- Initialization: Auto-generate guest session and prepare AI question generation
- Loading Phase: AI generates 40 topic-specific statements (30-60 seconds)
- Topic Selection: Choose focus areas (History, Science, etc.) or mixed topics
- Tutor Assignment: AI persona automatically matches selected topics
- Statement Loop: 40 rapid-fire true/false challenges with real-time feedback
- Session Summary: Complete performance analysis with XP rewards and achievements
Player Actions
- True: Mark statement as correct (+10 points if right, -5 if wrong)
- False: Mark statement as incorrect (+10 points if right, -5 if wrong)
- Skip: Pass on statement (no points, breaks streak)
- Pause: Temporary halt (limited usage, time continues)
Database Architecture
Tables
demo_sessions
Primary table storing demo session metadata and tracking data:
CREATE TABLE demo_sessions (
id TEXT PRIMARY KEY, -- Session UUID
session_token TEXT UNIQUE NOT NULL, -- Secure session token for authentication
guest_username TEXT NOT NULL, -- Generated guest username (Guest_ABC123)
guest_avatar TEXT, -- Optional guest avatar
ip_address TEXT, -- Client IP for analytics
user_agent TEXT, -- Browser/client info
referrer TEXT, -- Traffic source
utm_source TEXT, -- Marketing attribution
utm_medium TEXT, -- Marketing medium
utm_campaign TEXT, -- Campaign tracking
session_data TEXT, -- JSON: demo progress, game state, and session details
activity_data TEXT, -- JSON: user interactions and behavior tracking
conversion_data TEXT, -- JSON: A/B testing and conversion metrics
expires_at TIMESTAMP NOT NULL, -- 24-hour session expiration
last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_converted BOOLEAN DEFAULT FALSE, -- Account conversion status
converted_to_player_uuid TEXT, -- UUID if converted to full account
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
demo_session_activities
Detailed activity tracking for analytics and optimization:
CREATE TABLE demo_session_activities (
id INTEGER PRIMARY KEY AUTOINCREMENT,
demo_session_id TEXT NOT NULL,
activity_type TEXT NOT NULL, -- 'page_view', 'feature_use', 'interaction', 'game_action'
activity_data TEXT, -- JSON: specific activity details and context
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (demo_session_id) REFERENCES demo_sessions(id) ON DELETE CASCADE
);
demo_session_metrics
Performance and conversion metrics for monitoring:
CREATE TABLE demo_session_metrics (
id INTEGER PRIMARY KEY AUTOINCREMENT,
demo_session_id TEXT NOT NULL,
metric_name TEXT NOT NULL, -- 'response_time', 'accuracy', 'engagement_score'
metric_value REAL NOT NULL, -- Numeric metric value
metric_unit TEXT, -- 'ms', 'percentage', 'count', etc.
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (demo_session_id) REFERENCES demo_sessions(id) ON DELETE CASCADE
);
AI Statement Generation
Generation Process
- Topic Selection: System selects focus area (History, Science, etc.)
- Difficulty Distribution: Balanced mix across Basic (50%), Intermediate (30%), Advanced (20%)
- AI Generation: Cloudflare Workers AI generates 40 unique statements
- Validation: Automated checks for quality, clarity, and factual accuracy
- Caching: Generated statements cached for 1 hour to prevent regeneration
Statement Quality Guidelines
- Factually Accurate: All statements must be objectively verifiable
- Clear Language: Unambiguous wording suitable for rapid judgment
- Appropriate Difficulty: Matched to target cognitive load
- Topic Relevance: Directly related to selected focus area
- Deterministic: Clear true/false answers without gray areas
AI Prompt Engineering
// Example AI generation prompt for History
const prompt = `Generate 40 true/false statements about History topics.
Requirements:
- Mix of Basic (20 statements), Intermediate (12 statements), and Advanced (8 statements)
- Objectively verifiable facts only
- Clear, unambiguous language
- Suitable for rapid 10-second judgment
- Cover diverse historical periods and regions
- Format: JSON array with statement, answer, difficulty, topic`;
Scoring & Achievement System
Scoring Mechanics
- Correct Answer: +10 base points
- Incorrect Answer: -5 points (encourages thoughtful responses)
- Hot Streak Multipliers:
- 3+ correct: 1.2× multiplier
- 5+ correct: 1.5× multiplier
- 8+ correct: 2.0× multiplier
- Cold Streak Penalties: 3+ incorrect reduces multiplier to 0.8×
- Skip Penalty: No points earned, breaks any active streak
Achievement System
interface Achievement {
id: string;
name: string;
description: string;
condition: (session: DemoSession) => boolean;
xpBonus: number;
rarity: 'common' | 'rare' | 'epic' | 'legendary';
}
// Example achievements
const achievements: Achievement[] = [
{
id: 'first_game',
name: 'First Steps',
description: 'Complete your first demo session',
condition: (session) => session.totalQuestions >= 40,
xpBonus: 50,
rarity: 'common'
},
{
id: 'perfectionist',
name: 'Perfectionist',
description: 'Achieve 100% accuracy in a session',
condition: (session) => session.accuracy === 100,
xpBonus: 200,
rarity: 'legendary'
},
{
id: 'speed_demon',
name: 'Speed Demon',
description: 'Average under 5 seconds per question',
condition: (session) => session.averageResponseTime < 5000,
xpBonus: 100,
rarity: 'rare'
}
];
Account Conversion System
Conversion Process
- Demo Completion: Player completes at least one full demo session
- Conversion Trigger: Player clicks “Save Progress & Sign Up” button
- OAuth Flow: Standard authentication flow with provider selection
- Progress Migration: All demo session data transferred to new account
- Database Update:
demo_sessionsmarked as converted with player UUID - Seamless Transition: Player continues with full account privileges
Data Preservation
- Session History: All completed demo sessions preserved
- Achievement Progress: Unlocked achievements carry over
- Performance Metrics: Accuracy and streak records maintained
- XP Balance: Earned experience points transferred
- Analytics: Historical performance data integrated
Conversion Benefits
- Progress Retention: No loss of demo achievements or statistics
- Enhanced Features: Access to custom topics, advanced analytics
- Social Features: Leaderboards, friend comparisons, community challenges
- Persistence: Cross-device synchronization and cloud saves
- Premium Content: Access to advanced difficulty levels and specialized topics
API Endpoints
Session Management
// Create new demo session
POST /api/demo/sessions
Body: { referrer?: string, utmSource?: string, utmMedium?: string, utmCampaign?: string }
Response: {
sessionId: string,
sessionToken: string,
guestUsername: string,
expiresAt: string
}
// Get session state
GET /api/demo/sessions/[sessionId]
Headers: { Authorization: `Bearer ${sessionToken}` }
Response: DemoSession
// Update session activity
PUT /api/demo/sessions/[sessionId]/activity
Headers: { Authorization: `Bearer ${sessionToken}` }
Body: {
activityType: string,
activityData: object,
metrics?: { name: string, value: number, unit?: string }[]
}
// Update session data
PUT /api/demo/sessions/[sessionId]
Headers: { Authorization: `Bearer ${sessionToken}` }
Body: {
sessionData?: object,
activityData?: object,
conversionData?: object
}
// Extend session expiration
POST /api/demo/sessions/[sessionId]/extend
Headers: { Authorization: `Bearer ${sessionToken}` }
Response: { expiresAt: string }
Analytics & Metrics
// Get demo analytics (admin only)
GET /api/demo/analytics
Query: {
startDate?: string,
endDate?: string,
utmSource?: string,
activityType?: string
}
Response: {
totalSessions: number,
activeSessions: number,
conversionRate: number,
averageSessionDuration: number,
topActivities: Activity[],
conversionFunnelStats: FunnelStat[],
dailyStats: DailyStat[]
}
// Track conversion event
POST /api/demo/sessions/[sessionId]/track-conversion
Headers: { Authorization: `Bearer ${sessionToken}` }
Body: { trigger: string, context?: object }
Response: { tracked: boolean }
Account Conversion
// Convert demo session to full account
POST /api/demo/sessions/[sessionId]/convert
Headers: { Authorization: `Bearer ${sessionToken}` }
Body: { playerUuid: string }
Response: {
success: boolean,
migratedData: {
sessionData: object,
activityCount: number,
metricsCount: number
}
}
// Check conversion eligibility
GET /api/demo/sessions/[sessionId]/conversion-status
Headers: { Authorization: `Bearer ${sessionToken}` }
Response: {
eligible: boolean,
requirements: string[],
benefits: string[]
}
Performance Optimizations
Session Data Management
- JSON Storage: Flexible JSON fields allow efficient storage of complex session state
- Indexed Queries: Strategic indexes on session tokens, expiration, and conversion status
- Automatic Cleanup: Expired sessions automatically identified via view for cleanup
- Batch Updates: Activity and metrics data batched for efficient database writes
Analytics Optimization
- Separate Tables: Activity and metrics stored in dedicated tables for efficient querying
- Time-Based Indexing: Timestamp indexes enable fast time-range analytics queries
- Aggregated Views: Pre-computed analytics reduce real-time query overhead
- Efficient Joins: Foreign key relationships optimize cross-table analytics
Caching Strategy
- Session Token Cache: High-frequency session lookups cached in KV store
- Browser Persistence: Client-side localStorage reduces server load
- Analytics Cache: Dashboard metrics cached to reduce database queries
- Lazy Loading: Session data loaded incrementally based on user interaction
Testing & Validation
Automated Testing
# Run demo system tests
bun run test -- --grep "demo"
# Test session management
bun run test -- src/test/demo-sessions.test.ts
# Test analytics tracking
bun run test -- src/test/demo-analytics.test.ts
# Test conversion flow
bun run test -- src/test/demo-conversion.test.ts
# Test database migrations
bun run test -- src/test/demo-migrations.test.ts
Manual Testing Flow
- Create Session: POST to
/api/demo/sessionsto create new demo session - Track Activity: Use activity tracking endpoints to log user interactions
- Test Metrics: Verify metrics are properly stored and retrievable
- Session Persistence: Test session token authentication and data retrieval
- Expiration Handling: Verify 24-hour expiration and cleanup mechanisms
- Conversion Flow: Test full account conversion and data migration
- Analytics Dashboard: Verify admin analytics display correctly
Quality Assurance
- Database Integrity: Verify foreign key constraints and data consistency
- Security Testing: Validate session token security and authorization
- Performance Testing: Monitor query performance and response times
- Analytics Accuracy: Verify tracking data accuracy and completeness
- Cross-Device Testing: Test session persistence across different devices
Troubleshooting
Common Issues
Session Authentication Failures
- Symptoms: 401 errors, session not found, invalid token responses
- Causes: Expired tokens, invalid session IDs, database connection issues
- Solutions: Token refresh logic, session recreation, proper error handling
Data Persistence Problems
- Symptoms: Activity data lost, metrics not saving, session state inconsistent
- Causes: JSON parsing errors, database constraints, transaction failures
- Solutions: JSON validation, proper error handling, database integrity checks
Performance Issues
- Symptoms: Slow session queries, analytics timeout, high database load
- Causes: Missing indexes, large JSON payloads, inefficient queries
- Solutions: Query optimization, JSON field restructuring, index management
Conversion Failures
- Symptoms: Account conversion errors, data migration incomplete
- Causes: Foreign key violations, player UUID issues, transaction rollbacks
- Solutions: Data validation, proper transaction handling, rollback recovery
Debug Tools
# Session debugging
curl -X GET "http://localhost:4321/api/demo/sessions/[sessionId]" \
-H "Authorization: Bearer [sessionToken]"
# Activity tracking test
curl -X PUT "http://localhost:4321/api/demo/sessions/[sessionId]/activity" \
-H "Authorization: Bearer [sessionToken]" \
-H "Content-Type: application/json" \
-d '{"activityType": "test", "activityData": {"debug": true}}'
# Analytics debugging
curl -X GET "http://localhost:4321/api/demo/analytics?startDate=2024-01-01" \
-H "Authorization: Bearer [adminToken]"
# Database query debugging
echo "SELECT COUNT(*) FROM demo_sessions WHERE expires_at > CURRENT_TIMESTAMP;" | \
bunx wrangler d1 execute padawan-forge-db --local
# Migration status check
echo "SELECT * FROM migration_stats WHERE migration_number = '0006_demo_system';" | \
bunx wrangler d1 execute padawan-forge-db --local
Future Enhancements
Planned Features
- Multiple Topics: Simultaneous multi-topic sessions
- Adaptive Difficulty: Real-time difficulty adjustment based on performance
- Social Features: Leaderboards and challenge sharing for converted accounts
- Advanced Analytics: Heat maps, learning curves, cognitive load analysis
- Accessibility: Screen reader support, keyboard navigation, high contrast modes
Technical Improvements
- Progressive Web App: Offline capability and app-like experience
- Advanced Caching: Intelligent pre-generation of popular topic combinations
- Machine Learning: Personalized statement generation based on user patterns
- Real-time Multiplayer: Competitive demo sessions between anonymous players
This demo system provides a flexible, analytics-focused foundation for anonymous user engagement that tracks detailed user behavior and conversion metrics while supporting the platform’s core functionality. The JSON-based architecture allows for rapid iteration and customization of tracking requirements without schema changes.