Dark heatmap-inspired design with animated concentric rings,
OliVAS wordmark, and a clean Microsoft sign-in button.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Extract useAuthBlobUrl hook from AuthImage
- Fix /api/api double prefix bug
- Use AuthImage in GazeSequence
- Use useAuthBlobUrl in HeatmapOverlay (new Image() pattern)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add base: '/olivas/' to Vite config so assets resolve correctly
- Switch Apache DocumentRoot to /var/www/html with Alias for /olivas/
- Fix RewriteBase to /olivas/ for SPA routing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
colormaps is a module attribute, not a submodule — remove the explicit import.
Also relax matplotlib pin back to >=3.5 (minimum for colormaps attribute).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes migrations inside Docker container where postgres is at postgres:5432,
not localhost:5453 as hardcoded in alembic.ini.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update Azure redirect URI and CORS origins to optical-dev
- Remove root requirement from deploy.sh, use chmod instead of chown
- Make CORS_ORIGINS configurable via env var in docker-compose
- Add Apache VirtualHost config for optical-dev.oliver.solutions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace X-User-Id header auth with Azure AD JWT token validation.
Backend validates tokens via JWKS, frontend uses MSAL for login/token
acquisition. Adds logout button, 401 handling, and configurable
AZURE_AUTH_ENABLED toggle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create cloud_run/saliency: FastAPI service running DeepGaze I/IIE/III
on Cloud Run (4 vCPU, 16GB RAM); pre-downloads model weights in Docker
build to eliminate cold-start delays; returns saliency map + gaze
sequence + hotspots + design scores
- Create cloud_run/processing: lightweight FastAPI service for heatmap
generation and gaze sequence visualization (2 vCPU, 4GB RAM)
- Add cloud_run/deploy.sh for gcloud deployment to project optical-414516
in region europe-west2
- Refactor analysis pipeline to route via Cloud Run when
CLOUD_RUN_SALIENCY_URL is set, with local fallback for dev mode
- Add cloud_run_client.py with sync httpx wrappers for background tasks
- Split pyproject.toml: base = API-only deps, [ml] = torch/deepgaze for
local dev; production Dockerfile is now lightweight (~no PyTorch)
- Preserve Dockerfile.full + docker-compose.dev.yml for local ML dev
- Auth via X-Internal-Secret header (CLOUD_RUN_SECRET env var)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The pure Shannon entropy score penalized well-designed ads with multiple
intentional visual elements (e.g. hero product + text + logo scored ~8/100).
New composite score (0-100) weights four components:
- Peak Dominance (30%): strength of #1 hotspot vs rest
- Hierarchy Clarity (25%): monotonic intensity ordering
- Gaze Coherence (25%): smooth spatial gaze path
- Entropy Concentration (20%): sqrt-softened entropy
The raw entropy score is preserved as entropy_score for users who want it,
visible in the ScoreCard hover tooltip and PDF report.
Also adds auto-create DB tables on startup for fresh Docker deploys.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Background tasks use synchronous psycopg2 for database writes after
analysis completion. Without this package, analyses stayed stuck on
"pending" status in Docker deployments.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete button on AnalysisView header (red, with confirmation dialog)
- Trash icon on each analysis card in ProjectDetail grid
- useDeleteAnalysis hook with query invalidation
- Navigates back after successful deletion
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace bare score badge with rich ScoreCard component showing
color-coded score (green/amber/red), label, and hover tooltip
explaining what the 0-100 Attention Focus score means
- Add AI Design Effectiveness Score (1-10) from Claude alongside
qualitative insights, with score_reason explanation
- Fix image/png media type error by converting all images to PNG
before sending to Claude API
- Save ai_score and ai_score_reason to DB
- Display AI score badge in InsightsPanel with color coding
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Full-stack application for predicting where humans look in images using
DeepGaze saliency models. Includes heatmap overlays, gaze sequence prediction,
hotspot detection, AOI analysis, rule-based insights, optional Claude AI
design analysis, and professional PDF report generation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>