Version: v4.9.3 - Historial Styled + PDF Universal + Marina Golf Enrichment Estado: Production Ready Ultima actualizacion: 2026-03-29
AlvGolf es un sistema completo de analisis de rendimiento de golf potenciado por IA que combina:
graph TB
subgraph "Frontend Layer"
A[dashboard_dynamic.html<br/>36 Charts + ~216 IDs dinamicos v5.3.0]
B[dashboard_agentic.html<br/>Course Guide Portal]
end
subgraph "Multi-Agent System v4.9.1 (Orchestrator v4.3)"
C[FastAPI Server :8000]
D[Data Loader<br/>273 KB, 0 RAG]
subgraph "Team 2 - Analytics ~89s"
E1[AgentAnalista<br/>Performance]
E2[AgentTecnico<br/>Biomechanics]
E3[AgentEstratega<br/>Practice]
end
subgraph "Team 3 - Content ~112s"
F1[AgentUXWriter<br/>Dashboard Content]
F2[AgentCoach<br/>Coaching Reports]
end
F3[AgentCourseStrategist<br/>Course Guides]
end
subgraph "Backend v5.3.0 - Generator"
H[generate_dashboard_data.py<br/>59 functions]
H2[scoring_engine.py<br/>8 dimensions 0-10]
H3[player_level.py<br/>6 levels + identity IA]
H4[temporal_analysis.py<br/>Identity Timeline]
end
subgraph "Data Layer"
I[dashboard_data.json<br/>273 KB, 62 keys]
J[Raw Data<br/>FlightScope + Tarjetas]
end
subgraph "External APIs"
K[Anthropic Claude Sonnet 4.6<br/>LLM + Prompt Caching]
end
A -->|Link| B
B -->|POST /analyze| C
C -->|Load JSON| D
D -->|100% Data| E1 & E2 & E3
E1 & E2 & E3 -->|Analysis| F1 & F2
F1 & F2 -->|Response| B
J -->|Process| H
H -->|Score| H2 & H3 & H4
H -->|Generate| I
I -->|Load + Inject| A
I -->|Load| D
E1 & E2 & E3 & F1 & F2 -->|LLM Calls| K
Flujo Optimizado v4.2 (~2.1 minutos):
docs/design_social_benchmarks.md — comparativas sociales entre amigos + notificaciones competitivasAgentCourseStrategist generates personalized hole-by-hole course strategydashboard_agentic.html rewritten as interactive course guide viewerdata/enrichment/course_holes.json extracted from tarjetas Excel (11 courses)POST /generate-course-guide (~$0.06 per guide, ~40-50s)app/player_level.py (~210 lines), POST /generate-identity ($0.017, ~5s)archetype_classifier.py marked DEPRECATEDPersistencia, comparacion y regeneracion selectiva de analisis IA:
app/history.py guarda cada analisis con timestamp en output/ai_history/ con index.jsonPOST /generate-agent ejecuta cualquier agente individual (analista, tecnico, estratega, ux_writer, coach)GET /history/compare/{id1}/{id2} devuelve diff semantico + POST /history/summarize/{id1}/{id2} genera resumen IA de cambios en el juego del jugador/generate-content, /generate-coach, /analyze) guardan automaticamente en historialRediseno visual completo de los 6 tabs con glassmorphism consistente, quick menus con sub-grupos logicos, y reorganizacion de secciones:
id="roi-plan-mejora" movido de div a h2Eliminacion de radar duplicado en Tab 1 y unificacion de fuente de datos en Tab 5:
scoring_profile — 8 dimensiones (0-10) en vez de benchmark_radar (10 dims, 0-100). Score ahora consistente (6.8) con Golf IdentityinitializeIdentityRadarChart() + toggleHCP15Identity() + event listenersCard System v3.1 — sistema CSS unificado de 4 niveles de jerarquia visual:
:root) para backgrounds, radios, paddings, colores accentcard-hero > card-section > card-detail > card-nested con 5 modifiers de color (green/blue/gold/red/neutral)dimLabelsNarr scope error (ReferenceError linea 717) — impedia inyeccion dinamica de narrativa de forma~176 hardcodes editoriales migrados a JSON (LOTES 1-9), completando la dinamizacion al 100%:
calculate_monthly_recommendations, calculate_bubble_analysis, calculate_improvement_plan| LOTE | Tab | Contenido | Hardcodes |
|---|---|---|---|
| 1 | Tab 1 | Archetype/Form narratives | ~15 |
| 2 | Meta | PDF filename dinamico | ~5 |
| 3 | Tab 3 | Course dates, insights, patterns | ~15 |
| 4 | Tab 4 | Dispersion stats per club (11 clubs) | ~33 |
| 5 | Tab 4 | Dispersion summary + conclusion | ~18 |
| 6 | Tab 5 | Diagnostic prose + player profile | ~20 |
| 7 | Tab 1 | Coaching recommendations | ~15 |
| 8 | Tab 4 | Bubble analysis (4 zones) | ~25 |
| 9 | Tab 6 | 28-day improvement plan | ~30 |
~110 hardcodes numericos de alta prioridad migrados a JSON (LOTES 0-5):
calculate_form_summary, calculate_scoring_streaks, calculate_goals_progressdispatchDashboardReady espera DOMContentLoaded| Funcion | Prefijo | IDs | Tab |
|---|---|---|---|
injectPlayerStats() |
ps- |
22 + DNA(21) + form/last5(23) + zones(25) | Tab 1 |
injectHeaderStats() |
hd- |
12 | Header |
injectEvolutionStats() |
ev- |
24 | Tab 2 |
injectCourseStats() |
cs- |
17 + narratives(22) + goals + 3 containers | Tab 3 |
injectClubStats() |
cl- |
14 + 4 containers | Tab 4 |
injectAnalysisStats() |
an- |
4 + metrics(14) | Tab 5 |
injectStrategyStats() |
st- |
9 | Tab 6 |
<span id="xx-*">fallback</span> + set(id, val) desde JSONplayer_stats del backendFeature: Timeline visual mostrando evolucion del arquetipo golfistico a lo largo de 18 meses con ventanas deslizantes (90d window, 60d step). 11 periodos generados.
Nuevos modulos:
app/temporal_analysis.py (~375 lineas) — analisis temporal con ScoringEngine + PlayerLevelapp/scoring_engine.py — scoring determinista 0-10, 8 dimensionesapp/player_level.py — 6 niveles deterministicos (reemplaza archetype_classifier.py)app/scoring_integration.py — integracion scoring + levels + timelineClaves JSON nuevas: flightscope_shots_timeline (497 shots), identity_timeline (11 periodos), scoring_profile, golf_identity
asyncio.to_thread() para ejecucion paralela real de agentesai_content.json pre-generado y commitadooutput/ai_content.json para contenido AI instantaneo (<100ms)/generate-content y /analyzecache_control en 6 agentes (-90% coste tokens de input)claude-sonnet-4-20250514 → claude-sonnet-4-6SystemMessage + HumanMessage) para compatibilidad caching/generate-content endpoint en FastAPIloadUXContent() + insertUXContent() (230 lineas JS)data/enrichment/course_holes.json (11 courses)| Metodo | Path | Proposito | Tiempo |
|---|---|---|---|
| GET | / |
Health check | <100ms |
| POST | /ingest |
Ingesta de datos a Pinecone | ~2s |
| POST | /query |
RAG query | 10-15s |
| POST | /analyze |
Workflow completo (6 agentes) + deteccion de eventos | ~3.6 min |
| POST | /analyze-smart |
Regeneracion condicional + deteccion de eventos | variable |
| POST | /generate-content |
UXWriter content only | ~60-70s |
| POST | /generate-coach |
Coach report only | ~60-70s |
| POST | /generate-agent |
Agente individual selectivo | ~40-70s |
| POST | /generate-course-guide |
Course strategy guide | ~40-50s |
| POST | /chat |
AI Caddie conversacional (auth server-side) | ~2-5s |
| POST | /generate-identity |
Identidad unica IA por jugador | ~5s |
| POST | /record-ingesta |
Record data source update | <100ms |
| POST | /batch-analyze |
Batch analysis (Batches API) | variable |
| GET | /batch-status/{batch_id} |
Check batch status | <100ms |
| POST | /batch-collect/{batch_id} |
Collect batch results | <100ms |
| GET | /history |
Listado analisis guardados | <100ms |
| GET | /history/{id} |
Cargar analisis especifico | <100ms |
| GET | /history/compare/{id1}/{id2} |
Comparar dos analisis | <100ms |
| POST | /history/summarize/{id1}/{id2} |
Resumen IA de cambios entre analisis | ~3-5s |
| Metodo | Path | Proposito | Tiempo |
|---|---|---|---|
| GET | /compare?users=a,b |
Perfiles de comparacion (valida activas) | <200ms |
| POST | /compare/request |
Enviar solicitud de comparativa | <100ms |
| POST | /compare/accept |
Aceptar solicitud pendiente | <100ms |
| POST | /compare/reject |
Rechazar solicitud pendiente | <100ms |
| POST | /compare/revoke |
Revocar comparativa activa (unilateral) | <100ms |
| GET | /compare/active/{user_id} |
Listar activas + pendientes + codigo | <100ms |
| GET | /compare/search?q= |
Buscar usuarios por nombre/codigo | <100ms |
| Metodo | Path | Proposito | Tiempo |
|---|---|---|---|
| GET | /notifications/{user_id} |
Notificaciones paginadas con filtros | <100ms |
| POST | /notifications/{user_id}/read |
Marcar como leidas | <100ms |
| GET | /notifications/{user_id}/unread-count |
Contador para badge campanita | <100ms |
| PUT | /notifications/{user_id}/preferences |
Preferencias frecuencia + tipos | <100ms |
| Metodo | Path | Proposito | Tiempo |
|---|---|---|---|
| GET | /benchmarks |
Lista 9 niveles de benchmark | <100ms |
| GET | /benchmarks/{level} |
Benchmark completo (dims+clubs+SG) | <100ms |
| GET | /users |
Listar usuarios (filtro por isla) | <100ms |
| POST | /users |
Crear usuario | <100ms |
| GET | /users/{user_id} |
Perfil completo de usuario | <100ms |
| PUT | /users/{user_id} |
Actualizar campos usuario | <100ms |
| DELETE | /users/{user_id} |
Desactivar usuario | <100ms |
| GET | /islands |
Listar islas con conteo usuarios | <100ms |
| POST | /islands |
Crear configuracion de isla | <100ms |
| GET | /islands/{slug} |
Config de isla | <100ms |
| PUT | /islands/{slug} |
Actualizar config de isla | <100ms |
| GET | /api-costs |
Resumen costes API | <100ms |
| GET | /api-costs/detail |
Desglose costes detallado | <100ms |
git clone https://github.com/AlvGolf/AlvGolf-Identity-EngineV3.git
cd AlvGolf-Identity-EngineV3
cp .env.example .env
# Editar .env con tus API keys
Contenido de .env:
ANTHROPIC_API_KEY=sk-ant-api03-...
PINECONE_API_KEY=pcsk_...
PINECONE_INDEX_NAME=alvgolf-rag
ENV=local
API_HOST=0.0.0.0
API_PORT=8000
LOG_LEVEL=INFO
pip install -r requirements.txt
python generate_dashboard_data.py
cp output/dashboard_data.json dashboard_data.json
python -m app.main
python -m http.server 8001
AlvGolf/
├── app/ # Backend Agentic Analytics Engine
│ ├── __init__.py
│ ├── main.py # FastAPI app (43 endpoints)
│ ├── history.py # AI analysis persistence & comparison
│ ├── history_summarize.py # AI summary for history comparisons (Claude)
│ ├── config.py # Settings management (.env)
│ ├── models.py # Pydantic models (21 models)
│ ├── rag.py # RAG Core (Pinecone + Claude)
│ ├── scoring_engine.py # Deterministic scoring (0-10, 8 dims)
│ ├── player_level.py # 6 deterministic levels (replaces archetype_classifier)
│ ├── archetype_classifier.py # DEPRECATED — replaced by player_level.py
│ ├── scoring_integration.py # Scoring + levels + identity + timeline
│ ├── temporal_analysis.py # Sliding window identity analysis
│ ├── strokes_gained_v2.py # SG V2 motor (Golfissimo/Broadie benchmarks, meters)
│ └── agents/ # Multi-Agent System
│ ├── __init__.py
│ ├── orchestrator.py # LangGraph workflow orchestrator
│ ├── analytics_pro.py # Legacy Analytics Agent (TIER 1)
│ ├── analista.py # Team 2: Performance (650 lines)
│ ├── tecnico.py # Team 2: Biomechanics (550 lines)
│ ├── estratega.py # Team 2: Practice design (600 lines)
│ ├── ux_writer.py # Team 3: Dashboard content (752 lines)
│ ├── coach.py # Team 3: Coaching reports (807 lines)
│ └── course_strategist.py # Course strategy guides (~320 lines)
│
├── scripts/ # Scripts and utilities
│ ├── create_user.py # User creation CLI (--name, --hcp, --island)
│ ├── generate_demo_data.py # Fictional player data generator
│ ├── generate_course_guide.py # Course strategy guide generator (offline HTML)
│ ├── test_team3_complete.py # Team 3 test suite (6 tests)
│ ├── test_optimized_architecture.py
│ ├── test_dashboard_integration.py # E2E tests (4/4)
│ └── ingest_full_data.py # Data ingestion (120 vectors)
│
├── output/
│ ├── dashboard_data.json # Generated data (273 KB, 62 keys)
│ ├── ai_content.json # Pre-generated AI content (20 sections)
│ ├── ai_history/ # Timestamped AI analysis history
│ ├── course_guides/ # Pre-generated course strategy guides
│ └── users/{user_id}/ # Multi-user data isolation
│
├── data/ # Raw data
│ ├── flightscope/ # 497 shots, 11 clubs
│ ├── tarjetas/ # 85 rounds, 11 courses
│ └── enrichment/
│ └── course_holes.json # Real hole data (11 courses)
│
├── config/
│ ├── users.json # User registry
│ └── islands/ # Club branding configs
│ ├── valle_del_este.json
│ ├── desert_spring.json
│ └── academia_miki.json
│
├── docs/ # Corporate documentation
│ ├── brand_guidelines.html # Brand Guidelines
│ ├── guia_funcionalidades.html # Feature Guide
│ ├── guia_rapida.html # Quick Guide for directors
│ ├── one_pager.html # One-page commercial PDF
│ └── demo_script_30_abril.html # Internal demo script
│
├── dashboard_dynamic.html # Main dashboard (v5.3.0, ~20,800 lines)
├── dashboard_agentic.html # Course Guide Portal
├── admin.html # Island Admin Suite (11 blocks)
├── index.html # Landing page
├── generate_dashboard_data.py # Backend generator (59 functions)
│
├── .env # API keys (NOT committed)
├── .env.example # Template
├── requirements.txt # Python dependencies
├── ARCHITECTURE_DIAGRAMS.md # 8 Mermaid architecture diagrams
└── README.md # This file
| Metrica | Valor | |———|——-| | Dashboard Load | <1s (static HTML) | | AI Content Load | <100ms (pre-generated) | | JSON Generation | ~3.1s (59 functions) | | Full Agent Workflow | ~3.6 min (6 agents) | | UXWriter Only | ~60-70s |
| Concepto | Costo | |———-|——-| | Per-call (sin cache) | $0.185 | | Per-call (con cache) | $0.110 | | Pinecone Serverless | ~$0.40/mes | | Total Estimado | ~$0.52/mes |
| Metrica | Valor | |———|——-| | Rondas Historicas | 85 (Mar 2024 - Dic 2025) | | Shots FlightScope | 497 (11 clubs) | | Campos | 11 | | JSON Keys | 62 | | JSON Size | 273 KB | | Dynamic IDs | ~326 (spans + containers) | | Injection Functions | 7 (extended) |
/generate-coach + generateCoachPDF() frontendbuildStyledReportRendered() con header AlvGolf, avatar, pills, dimensiones para 7 tipos de agentecourse_holes.json para datos reales (fallback a estimacion)POST /history/summarize/{id1}/{id2}app/history_summarize.pyapp/strokes_gained_v2.pyapp/comparisons.py, app/notifications.py, app/event_detector.pyscripts/seed_demo_social.py: generador de datos demoapp/history.py: save_analysis, list_analyses, load_analysis, compare_analysesPOST /generate-agent: ejecuta agentes individuales (analista/tecnico/estratega/ux_writer/coach)GET /history: listado filtrable por agent_type y user_idGET /history/{id}: carga analisis completoGET /history/compare/{id1}/{id2}: diff semantico entre dos analisisPOST /history/summarize/{id1}/{id2}: resumen IA de cambios en el juego (~$0.01-0.02)calculate_monthly_recommendations, calculate_bubble_analysis, calculate_improvement_plancalculate_form_summary, calculate_scoring_streaks, calculate_goals_progressdispatchDashboardReady espera DOMContentLoaded (race condition localStorage)ps-* (22), hd-* (12), ev-* (24), cs-* (17+3), cl-* (14+4), an-* (4), st-* (9)player_stats + helper _months_between()temporal_analysis.py — sliding window 90d/60d, 11 periodosscoring_engine.py + player_level.py — scoring 0-10 + 6 niveles + identidad IAwindow.dashboardData = fresh siempreasyncio.to_thread() en orchestrator (-33% tiempo total)ENABLE_LAZY_LOADING, lazyInit en showTab())generateCoachPDF() + buildCoachReportHTML() — informe coaching descargable en PDFcoach-pdf en menu rapido de 6 tabs + toast de progresoai_content.json pre-generado y commitado (6 secciones + coach_report)window.coachReportMd carga desde ai_content.json (PDF sin backend)cache_control en 6 agentes (-90% coste input tokens)claude-sonnet-4-6/generate-content endpointloadUXContent() + insertUXContent().env a Git (API keys)alvaro)Proyecto: AlvGolf Multi-Agent Golf Analytics System Developer: Alvaro Peralta Asistido por: Claude Sonnet 4.6 / Claude Opus 4.6 (Anthropic) GitHub: https://github.com/AlvGolf/AlvGolf-Identity-EngineV3 GitHub Pages: https://alvgolf.github.io/AlvGolf-Identity-EngineV3/
Proyecto personal - Todos los derechos reservados Alvaro Peralta 2026
Ultima actualizacion: 18 de marzo de 2026 Estado: Production Ready Version: v4.4.0 - CourseStrategist + Course Guide Portal