Dashboard inteligente de analytics para Instagram con proyecciones predictivas y milestones dinámicos.
Live Demo: stats.trawi.net
- Contador animado con efecto odómetro
- Actualización automática cada 60 segundos
- Timestamp preciso que muestra tiempo real transcurrido
- Badge de cambio diario con indicador +X hoy
- Selector de meses: Explora tu historial completo mes por mes
- Calendario de crecimiento: Visualización de últimos 30 días o períodos específicos
- Total dinámico: Indicadores que se ajustan al período seleccionado
- Hover effects: Detalles interactivos en cada día
- 6 niveles de objetivos: 10k, 20k, 50k, 100k, 500k, 1M
- Auto-completado inteligente: Se marcan con ✓ al alcanzarlos
- Fechas de logros: Historial de cuándo alcanzaste cada milestone
- Formato legible: Números simplificados (10k, 1M)
- Algoritmo EMA (Exponential Moving Average) con análisis de tendencias
- Detección adaptativa: Reconoce aceleración/desaceleración del crecimiento
- Gráfico dinámico: Se ajusta automáticamente al siguiente milestone
- Predicciones precisas: Fecha estimada para alcanzar objetivos
- Referencias visuales: Milestones completados vs pendientes
- Costo por seguidor (CPF): Calcula inversión necesaria para objetivos
- Milestones predefinidos: Costo directo para cada nivel
- Actualización en tiempo real: Ajusta según tu CPF actual
- Generador de imágenes: Crea graphics profesionales de tus métricas
- 3 períodos: Hoy, Semana, 30 días
- Múltiples formatos: Copiar al portapapeles o descargar como PNG
- Compatible mobile: Web Share API integrada
- Modo oscuro/claro: Tema adaptable
- Diseño responsive: Optimizado para mobile, tablet y desktop
- Animaciones suaves: Transiciones y efectos glassmorphism
- Easter egg musical: Canciones de Rawi rotando diariamente 🎵
- Next.js 16 - React framework con App Router
- TypeScript - Type safety y mejor DX
- Recharts - Gráficos y visualizaciones
- CSS Modules - Estilos scoped
- Next.js API Routes - Serverless functions
- Apify Client - Web scraping de Instagram
- Node.js - Runtime environment
- Python - Script de scraping
- JSON files - Sistema de caché y historial
- File System API - Persistencia local
- Cron Jobs - Actualizaciones automáticas cada 2 horas
- PM2 - Process manager
- Nginx - Reverse proxy
- Let's Encrypt - SSL/HTTPS
- DigitalOcean - Hosting VPS
- Node.js 18+
- Python 3.8+
- npm o yarn
- Token de Apify API
# 1. Clonar el repositorio
git clone https://github.com/josuebustosn/trawi-stats.git
cd trawi-stats
# 2. Instalar dependencias de Node.js
npm install
# 3. Instalar dependencias de Python
pip install apify-client
# 4. Crear archivo de configuración
cp .env.example .env.local
# 5. Configurar variables de entorno
# Editar .env.local con tu token de Apify y usuario de Instagram:
# APIFY_TOKEN=tu_token_aqui
# NEXT_PUBLIC_INSTAGRAM_USERNAME=tu_usuario
# 6. Correr en desarrollo
npm run dev
# 7. Abrir en navegador
# http://localhost:3000Crear archivo .env.local en la raíz (ver .env.example):
APIFY_TOKEN=tu_token_de_apify_aqui
NEXT_PUBLIC_INSTAGRAM_USERNAME=tu_usuario_de_instagramtrawi-stats/
├── app/
│ ├── api/
│ │ └── followers/
│ │ └── route.ts # API endpoint principal
│ ├── changelog/
│ │ └── page.tsx # Página de changelog
│ ├── layout.tsx # Layout principal
│ ├── page.tsx # Homepage
│ └── globals.css # Estilos globales
├── components/
│ ├── Calculators.tsx # Calculadora de CPF
│ ├── FollowerCounter.tsx # Contador animado
│ ├── GrowthCalendar.tsx # Calendario con selector de meses
│ ├── MusicPlayer.tsx # Easter egg musical
│ ├── ProjectionChart.tsx # Gráfico de proyección inteligente
│ ├── ShareMetrics.tsx # Generador de imágenes
│ └── ThemeToggle.tsx # Switcher de tema
├── lib/
│ ├── instagram-service.ts # Servicio de Instagram
│ └── storage.ts # Sistema de caché
├── scripts/
│ └── get_followers.py # Script de Apify
├── public/
│ ├── changelog.json # Historial de versiones
│ └── ... # Assets estáticos
├── data/ # Datos persistentes
│ ├── history.json # Historial de seguidores
│ └── cache.json # Caché de datos
└── docs/ # Documentación
├── ARCHITECTURE.md
├── DEPLOYMENT.md
└── ROADMAP.md
El sistema usa caché de 2 horas + sync automático a las 23:50 (hora Venezuela) para cierre diario.
# Actualizar cada 2 horas
0 */2 * * * cd /path/to/project && curl http://localhost:3000/api/followers?username=trawi.viajes# Iniciar con PM2
pm2 start npm --name "trawistats" -- start
# Configurar límite de memoria
pm2 start npm --name "trawistats" -- start --max-memory-restart 150M
# Guardar configuración
pm2 save
# Startup script
pm2 startup-
Contador en Tiempo Real
- Muestra followers actuales
- Badge con cambio del día (+X hoy)
- Timestamp de última actualización
-
Calendario de Crecimiento
- Selector: "Últimos 30 días" o meses específicos
- Total dinámico según período
- Cada día muestra cambio (+X / -X)
-
Calculadora de Inversión
- Ingresa tu CPF (Costo Por Seguidor)
- Ve costos para cada milestone
- Milestones completados marcados con ✓
-
Proyección de Crecimiento
- Gráfico con datos históricos
- Proyección hasta siguiente milestone
- Badges de milestones completados con fechas
- Simulador de crecimiento manual
-
Compartir Logros
- Selecciona período: Hoy / Semana / 30d
- Genera imagen profesional
- Copia o descarga
// GET /api/followers?username=trawi.viajes
{
profile: {
followers: 15318,
profilePicUrl: string
},
history: [
{ date: "2026-01-31", followers: 15318, change: -2 },
...
],
lastUpdated: 1738355400000
}Editar la variable de entorno en .env.local:
NEXT_PUBLIC_INSTAGRAM_USERNAME=tu_usuario_aquiEditar components/Calculators.tsx y components/ProjectionChart.tsx:
const milestones = [10000, 20000, 50000, 100000, 500000, 1000000];Editar app/globals.css:
:root {
--primary: #3291ff;
--accent: #d946ef;
--success: #10b981;
--danger: #ef4444;
}DigitalOcean / Railway / Linode
- Crear servidor Ubuntu 22.04
- Instalar Node.js 18+ y Python 3.8+
- Clonar repositorio
- Configurar
.env.localconAPIFY_TOKEN - Instalar dependencias
- Usar PM2 para mantener app corriendo
- Configurar Nginx como reverse proxy
- SSL con Let's Encrypt
Ver docs/DEPLOYMENT.md para guía completa.
- Archivos JSON no persisten entre deploys
- No puedes correr scripts de Python
- Necesitas base de datos externa
✨ Features:
- Selector de meses en calendario histórico
- Sistema de 6 milestones dinámicos (10k → 1M)
- Proyección inteligente con algoritmo EMA
- Gráfico adaptativo al siguiente milestone
- Badges de milestones completados con fechas
🔧 Fixes:
- Timestamp "Actualizado hace..." ahora funcional
- Actualización cada 10s (antes 60s)
🗑️ Deprecated:
- Eliminada Calculadora de CPF Diario
Ver public/changelog.json para historial completo.
- Fork el proyecto
- Crea tu feature branch (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'feat: Add AmazingFeature') - Push a la branch (
git push origin feature/AmazingFeature) - Abre un Pull Request
feat: Nueva funcionalidad
fix: Corrección de bug
docs: Cambios en documentación
style: Cambios de formato
refactor: Refactorización de código
test: Agregar tests
chore: Tareas de mantenimiento
- Verifica que
.env.localexiste - Confirma que el token es correcto
- Reinicia el servidor
pip install apify-client- Elimina
data/cache.json - Reinicia servidor
- Verifica cron jobs
# Cambiar puerto
PORT=3001 npm run devEste proyecto está bajo la Licencia MIT - ver el archivo LICENSE para detalles.
Josue Bustos - @trawi.viajes
- Next.js - Framework React
- Recharts - Librería de gráficos
- Apify - Web scraping platform
- Comunidad de Trawi Viajes
- Website: stats.trawi.net
- Instagram: @trawi.viajes
- Repository: github.com/josuebustosn/trawi-stats
Hecho con ❤️ por el equipo de Trawi
⭐ Si te gustó este proyecto, deja una estrella en GitHub!