← Memory
claude-peak.md
# Claude Peak Hours Monitor
## Información General
**URL**: https://claudepeak.beepeek.com
**Puerto**: 5035
**Stack**: FastAPI + Jinja2 + ipapi.co (geolocalización)
**Servicio**: `claude-peak.service`
**Path VPS**: `/home/ubuntu/proyectos-cloud/claude-peak/`
## Qué hace
Aplicación web que monitoriza en tiempo real si estás en horas pico de throttling de Claude Code, basándose en tu geolocalización automática.
**Features:**
- 🌍 Geolocalización automática por IP (ipapi.co)
- 🕐 Detección automática de timezone
- ⏱️ Countdown dinámico hasta próximo cambio de estado
- 🔴/🟢 Indicador visual de estado (pico/normal/fin de semana)
- 📊 Comparación hora local vs Pacific Time
- 📱 Diseño responsive y moderno
- ♻️ Auto-refresh cada 10 minutos
## Horas Pico de Claude
**Horario Pacific**: 5:00am - 11:00am PT
**Horario España**: 14:00 - 20:00 (2pm - 8pm)
**Días**: Lunes a Viernes
**Impacto**: Consumo de tokens 2-3x más rápido
**Fines de semana**: Sin restricciones
## Arquitectura
```
/home/ubuntu/proyectos-cloud/claude-peak/
├── app.py # FastAPI main
├── templates/
│ └── index.html # Frontend con countdown JS
├── static/
│ └── style.css # Diseño gradiente púrpura
├── venv/ # Virtual environment
├── requirements.txt
└── deploy.sh # Script de deploy
```
## Tecnologías
- **FastAPI**: Web framework
- **Jinja2**: Template engine
- **ipapi.co**: API geolocalización gratuita (30K req/mes)
- **pytz + zoneinfo**: Timezone handling
- **httpx**: HTTP client async
- **Nginx**: Reverse proxy
- **Certbot**: SSL automático
## Endpoints
- `GET /` - Interfaz web principal
- `GET /api/status` - JSON con estado actual
## Respuesta API `/api/status`
```json
{
"geo": {
"timezone": "Europe/Madrid",
"city": "Valencia",
"country": "Spain",
"ip": "1.2.3.4"
},
"peak": {
"is_peak": true,
"is_weekend": false,
"pacific_time": "08:30:45",
"pacific_date": "2026-04-10",
"user_time": "17:30:45",
"user_date": "2026-04-10",
"user_tz": "Europe/Madrid",
"next_change": {
"type": "peak_end",
"message": "Fin horas pico (11am PT)",
"datetime": "2026-04-10T11:00:00-07:00",
"seconds": 9015
}
}
}
```
## Deploy
```bash
cd /home/ubuntu/proyectos-cloud/claude-peak
bash deploy.sh
```
O manual:
```bash
cd /home/ubuntu/proyectos-cloud/claude-peak
source venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart claude-peak
```
## Logs
```bash
# Ver logs en tiempo real
sudo journalctl -u claude-peak -f
# Ver últimas 50 líneas
sudo journalctl -u claude-peak -n 50
```
## Configuración DNS
Registro A creado vía cPanel API v2:
- **Dominio**: beepeek.com
- **Subdominio**: claudepeak
- **Tipo**: A
- **Apunta a**: 204.168.170.41
- **TTL**: 300
## SSL
Certificado Let's Encrypt automático con certbot:
- **Cert**: `/etc/letsencrypt/live/claudepeak.beepeek.com/fullchain.pem`
- **Key**: `/etc/letsencrypt/live/claudepeak.beepeek.com/privkey.pem`
- **Expira**: 2026-07-09 (renovación automática)
## Nginx Config
```nginx
server {
listen 80;
server_name claudepeak.beepeek.com;
# Certbot añade redirect 301 a HTTPS automáticamente
}
server {
listen 443 ssl;
server_name claudepeak.beepeek.com;
ssl_certificate /etc/letsencrypt/live/claudepeak.beepeek.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/claudepeak.beepeek.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5035;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
## Colores / Branding
- **Background**: Gradiente púrpura (#667eea → #764ba2)
- **Estado PICO**: Gradiente rojo (#ff6b6b → #ee5a6f)
- **Estado NORMAL**: Gradiente verde (#51cf66 → #37b24d)
- **Accent**: Púrpura #667eea
- **Font**: System fonts (-apple-system, BlinkMacSystemFont, Segoe UI...)
## Uso Típico
1. Usuario entra a https://claudepeak.beepeek.com
2. App detecta IP automáticamente
3. Geolocaliza → obtiene timezone
4. Calcula si está en horas pico
5. Muestra estado visual + countdown
6. Auto-refresh cada 10 min o al llegar a 0
## Casos de Uso
- ✅ Planificar sesiones intensivas de Claude Code
- ✅ Evitar throttling trabajando en horas valle
- ✅ Saber cuánto falta para fin de pico
- ✅ Optimizar uso del plan Max/Pro
## Limitaciones
- **ipapi.co**: 30K requests/mes gratis (suficiente para uso personal)
- **Geolocalización**: Por IP, no GPS (menos preciso pero no requiere permisos)
- **Propagación DNS**: Puede tardar 5-15 min en propagarse globalmente
- **Timezone**: Asume que zona horaria del usuario = geolocalización IP
## Troubleshooting
**DNS no resuelve:**
```bash
# Esperar 5-15 minutos para propagación global
# Verificar:
nslookup claudepeak.beepeek.com 8.8.8.8
```
**Servicio no arranca:**
```bash
sudo journalctl -u claude-peak -n 50
# Check puerto 5035 libre:
sudo lsof -i :5035
```
**Geolocalización falla:**
- Fallback automático a Europe/Madrid
- No afecta funcionalidad, solo precisión
## Mejoras Futuras
- [ ] Historial de uso (guardar en SQLite)
- [ ] Notificaciones push cuando cambia estado
- [ ] PWA installable
- [ ] Gráfico de consumo estimado por hora del día
- [ ] Integración con /stats de Claude Code (requiere API key)
- [ ] Multi-idioma (EN/ES)
- [ ] Dark/Light theme toggle
## Creado
**Fecha**: 2026-04-10
**Por**: Fred (Claude Code)
**Razón**: Monitorizar horas pico de throttling de Claude tras investigación exhaustiva que confirmó el throttling real de Anthropic