Visualization
Visualization & Analytics
Interactive data visualization, 3D topic clustering, custom dashboards, and predictive analytics
Advanced Visualization & Analytics
AIWebFeeds Phase 006 adds powerful visualization and analytics capabilities for exploring feed data interactively.
Features
Interactive Data Visualization
- 6 Chart Types: Line, bar, scatter, pie, area, heatmap
- Real-time Customization: Colors, labels, axes, legends
- Publication-Quality Export: PNG (300 DPI), SVG, interactive HTML
- Device-Based Persistence: Save visualizations across sessions
3D Topic Clustering
- WebGL Rendering: Smooth 60fps 3D topic graphs using Three.js
- Force-Directed Layout: Topics spatially clustered by relationships
- Interactive Navigation: Orbit, pan, zoom with mouse/keyboard
- Automatic Fallback: 2D network view on performance degradation
Custom Dashboards
- Drag-and-Drop Builder: Create personalized dashboard layouts
- Multiple Widget Types: Charts, metrics cards, feed lists, topic clouds
- Grid-Based Layout: Responsive 12-column grid system
- Auto-Refresh: Configurable widget refresh intervals (1min-1hour)
Time-Series Forecasting
- Prophet Model: Automatic seasonality detection
- Multiple Horizons: 30/60/90-day predictions
- Confidence Intervals: 80% and 95% bands
- Accuracy Tracking: MAPE, MAE metrics with auto-retrain triggers
Comparative Analytics
- Side-by-Side Comparison: Compare up to 10 feeds, topics, or authors
- Synchronized Views: Linked date ranges across charts
- Statistical Analysis: Correlation, trends, significance tests
- Export Reports: CSV tables and PNG charts
Data Export API
- Multiple Formats: CSV, JSON, Parquet
- Async Job Queue: Handle large exports (>10k records)
- API Key Authentication: Secure programmatic access
- Rate Limiting: 100 requests/hour with burst support
Architecture
Backend (Python)
- FastAPI: REST API with async support
- SQLAlchemy: Database ORM with 7 new tables
- Prophet: Time-series forecasting
- Redis: 5-minute cache layer with LRU fallback
Frontend (TypeScript/React)
- Next.js 15: Server components and App Router
- Three.js: 3D WebGL visualization
- Chart.js: 2D charts with publication quality
- React Grid Layout: Drag-drop dashboard builder
Data Flow
User Request
↓
Device ID (localStorage)
↓
FastAPI Router (auth)
↓
Cache Layer (Redis/LRU) ← 5min TTL
↓
Data Service (validation)
↓
SQLAlchemy (Phase 002 tables)
↓
PostgreSQL/SQLiteGetting Started
Prerequisites
- Python 3.13+ with uv package manager
- Node.js 20+ with pnpm
- Redis (optional, uses LRU fallback)
- Phase 002 analytics data
Installation
Backend Dependencies:
cd packages/ai_web_feeds
python -m pip install fastapi sqlalchemy pandas prophet redis-py bcrypt pyjwtFrontend Dependencies:
cd apps/web
pnpm add three @react-three/fiber @react-three/drei react-grid-layout chart.js react-chartjs-2Database Migration
cd packages
alembic upgrade headThis creates 7 new tables:
visualizations- Saved chart configurationsdashboards- Dashboard layoutsdashboard_widgets- Widget configurationsforecasts- Time-series predictionsapi_keys- API authenticationexport_jobs- Async export queueapi_usage- API usage tracking
Configuration
Environment Variables:
# Redis cache (optional)
REDIS_URL=redis://localhost:6379/0
# Database
DATABASE_URL=postgresql://user:pass@localhost/aiwebfeeds
# API settings
MAX_CONCURRENT_EXPORTS=10
FORECAST_TIMEOUT=30Device-Based Persistence
Visualizations use browser-based device identification instead of user accounts:
- Device ID: UUID v4 generated on first visit
- Storage: localStorage with versioning (
v1:uuid:timestamp) - Scope: Device-specific (no cross-device sync)
- Export/Import: Manual transfer via JSON export
Device ID Management
import { getDeviceId, exportDeviceData, importDeviceData } from '@/lib/visualization/device-id';
// Get current device ID
const deviceId = getDeviceId();
// Export data for transfer
const exportedData = exportDeviceData();
// Import on new device
importDeviceData(exportedData);Cache Layer
5-minute cache with Redis primary and LRU fallback:
- Cache Key: SHA-256 hash of (query_type + filters + date_range + device_id)
- TTL: 300 seconds (5 minutes) for queries, 3600 seconds (1 hour) for topic graph
- Invalidation: Automatic on TTL expiry, manual on data writes
- Fallback: In-memory LRU cache (100 entries) when Redis unavailable
Cache Statistics:
from ai_web_feeds.visualization.cache import get_cache
cache = get_cache()
stats = cache.get_stats()
# Returns: {cache_type, hits, misses, hit_rate, total_requests}API Authentication
Dual authentication system:
JWT Tokens (Web App)
- Generated on first visit
- Stored in httpOnly cookie
- 30-day expiration
- Automatic renewal
API Keys (Programmatic)
- User-generated in web UI
- bcrypt hashed storage
- Format:
awf_+ 32 random chars - Revokable via UI
API Request:
curl -H "X-API-Key: awf_abc123..." \
https://api.aiwebfeeds.com/v1/export?format=csvValidation & Security
Input Validation
- Table Whitelist: Only
topic_metrics,feed_health,validation_logs,article_metadata - Date Ranges: No future dates, max 365-day range
- Query Limits: Max 100k rows per query
- SQL Injection Prevention: Parameterized queries, escaped LIKE clauses
Dashboard Constraints
- Widget Limit: Max 20 widgets per dashboard
- Grid Dimensions: 12 columns, minimum 2x2 widget size
- Collision Detection: Reject overlapping widgets
- Version Locking: Optimistic locking with version field
Customization Limits
- Title Length: Max 200 characters (auto-truncated)
- Color Palette: Max 50 colors
- Font Size: 8-72px range
- Opacity: 0-100% range
Next Steps
- Chart Types - Detailed chart documentation
- 3D Graph Guide - Topic clustering tutorial
- Dashboard Builder - Custom dashboard creation
- Forecasting Guide - Time-series predictions
- API Reference - Export API documentation