Skip to content

Commit d94672f

Browse files
deploy(telemetry): auto-publish latest metrics & social preview to gh-pages [skip ci] e21aa76
0 parents  commit d94672f

14 files changed

Lines changed: 2774 additions & 0 deletions

File tree

.agents/rules/AGENTS.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Reglas — GitHub Telemetry Engine
2+
3+
## 1. Arquitectura (SRP)
4+
- **`scripts/update_metrics.py`**: Extractor puro. Filtra `--source` (`isFork: false`), auto-detecta `User`/`Org` y exporta `data.json`. Prohibido mutar HTML.
5+
- **`index.html`**: Hidratación reactiva con `fetch('data.json')`. Cero datos hardcodeados. Tabla sortable interactiva.
6+
- **`scripts/generate_preview.py`**: Renderiza `og-preview.png` (2400x1260 px) vía Playwright sobre `templates/share.html`.
7+
- **Despliegue**: Solo a rama aislada `gh-pages`. `main`/`dev` sin commits de bots.
8+
9+
## 2. Estilo Visual (Swiss Minimalist)
10+
- **Colores planos**: `#1e3a8a`, `#046a38`, `#b45309`, `#09090b`, `#f8fafc`. Sin degradados.
11+
- **Bordes 1px**: `border-zinc-300` / `border-zinc-200`.
12+
- **Tipografía**: `Inter` (copies) + `JetBrains Mono` (métricas).
13+
- **Branding**: Logo compacto `{{shellaquiles.org}}` y footer fijo con atribución a Shellaquiles.
14+
15+
## 3. Telemetría y Versión
16+
- **Bots**: Excluir cuentas `[bot]` y `actions-user`.
17+
- **Antigüedad**: Computada automáticamente desde el repo más antiguo.
18+
- **Versión**: `VERSION` es la fuente única de verdad. Sincronizar en `CHANGELOG.md`.

.agents/workflows/sync_metrics.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
name: sync-metrics
3+
description: Actualiza métricas de GitHub, data.json y og-preview.png.
4+
---
5+
6+
# Sync Metrics
7+
8+
1. `gh auth status`
9+
2. `make sync`
10+
3. `make preview`
11+
4. `make dev`

.gitignore

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Environment & Local Configuration
2+
.env
3+
.env.local
4+
5+
# Python Cache & Virtual Environments
6+
__pycache__/
7+
*.py[cod]
8+
*$py.class
9+
.venv/
10+
venv/
11+
ENV/
12+
13+
# Operating System & IDE Artifacts
14+
.DS_Store
15+
Thumbs.db
16+
.idea/
17+
.vscode/
18+
*.swp
19+
*.swo

.nojekyll

Whitespace-only changes.

CHANGELOG.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Changelog
2+
3+
Todas las modificaciones notables de este proyecto se documentan en este archivo.
4+
5+
El formato se basa en [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/) y este proyecto se adhiere a [Semantic Versioning](https://semver.org/lang/es/).
6+
7+
---
8+
9+
## [1.0.0] - 2026-08-27
10+
11+
### Added
12+
- **Extractor autónomo en Python (`update_metrics.py`)**:
13+
- Autodescubrimiento de repositorios públicos mediante GitHub CLI (`gh`).
14+
- Auto-detección del tipo de cuenta (`User` vs `Organization`) vía GitHub API.
15+
- Filtro nativo de repositorios originales con `--source` y descarte automático de forks (`isFork: false`).
16+
- Agregación y normalización cualitativa de fuentes de tráfico (*referrers*: LinkedIn, Telegram, Google Search, X, GitHub).
17+
- Filtro automático de cuentas de automatización y bots (`dependabot`, `github-actions`, `[bot]`).
18+
- Cálculo dinámico de la fecha más antigua (`active_since`) a partir de la fecha de creación de los repositorios.
19+
- Jerarquía de excepciones de dominio (`TelemetryError`, `GitHubCLIError`, `ConfigurationError`) y timeouts de ejecución.
20+
- **Frontend SPA Reactivo (`index.html`)**:
21+
- Diseño bajo el **Swiss Minimalist System** (colores institucionales planos, rejillas de 1px y tipografía `Inter` + `JetBrains Mono`).
22+
- Hidratación dinámica asíncrona mediante `fetch('data.json')`.
23+
- Gráficos interactivos con Chart.js (Radar de Ecosistema multieje).
24+
- Tabla consolidada de Stats Globales interactiva con ordenamiento en tiempo real y columna de fecha `Creado`.
25+
- Catálogo técnico por proyecto y cuadro de honor de colaboradores con avatares.
26+
- Branding oficial compacto `{{shellaquiles.org}}` y footer fijo con blur (`backdrop-filter: blur(4px)`).
27+
- Crédito institucional permanente de origen hacia Shellaquiles en el footer.
28+
- **Configuración Declarativa Minimalista (Zero-Config)**:
29+
- Soporte de configuración jerárquica vía `config.json` (solo requiere `"target": "USUARIO"`) y variables de entorno (`.env.example`).
30+
- **Pipeline de Despliegue Limpio CI/CD (`.github/workflows/sync_metrics.yml`)**:
31+
- Tarea programada diaria (06:00 UTC) y ejecución manual (`workflow_dispatch`).
32+
- Publicación a la rama huérfana aislada `gh-pages` con `force_orphan: true`, manteniendo `main` y `dev` con 0 commits de bots.
33+
- **Tarjeta Social & Motor OpenGraph (`share.html` & `generate_preview.py`)**:
34+
- Lienzo oficial de 1200 × 630 px con proporciones estándar para Twitter/X, LinkedIn y Facebook.
35+
- Composición de alto impacto combinando 4 KPIs resumidos y la Matriz Técnica completa con iconos y stacks.
36+
- Script automatizado con Playwright (`make preview`) para exportación a resolución Retina 2x (`2400 × 1260 px`) con cierre limpio del servidor.
37+
- Integración de metadatos `<meta property="og:image">` y Twitter Card en `index.html`.
38+
- Banner interactivo de replicación / Call to Action en el footer para fork en 1-click.
39+
- **Herramientas de Desarrollo Local**:
40+
- `Makefile` con objetivos `dev`, `sync`, `preview`, `serve` y `clean` con detección automática de `.venv`.
41+
- `.gitignore` para desacoplar los artefactos de runtime `data.json` y `og-preview.png` del código fuente.
42+
- **Documentación**:
43+
- `README.md` estandarizado con guía Zero-Config en 4 pasos y diagramas de flujo en Mermaid.

Makefile

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# ── CONFIGURACIÓN DEL ENTORNO & PYTHON ─────────────────────────────────────────
2+
VENV_DIR := .venv
3+
VENV_BIN := $(shell if [ -d "$(VENV_DIR)/bin" ]; then echo "$(VENV_DIR)/bin/"; fi)
4+
PYTHON := $(VENV_BIN)python3
5+
PIP := $(VENV_BIN)pip
6+
PORT := 8000
7+
8+
# ── ESTILOS & COLORES ANSI ───────────────────────────────────────────────────
9+
BOLD := \033[1m
10+
DIM := \033[2m
11+
RESET := \033[0m
12+
BLUE := \033[38;5;33m
13+
EMERALD := \033[38;5;42m
14+
AMBER := \033[38;5;214m
15+
CYAN := \033[38;5;51m
16+
RED := \033[38;5;196m
17+
GRAY := \033[38;5;244m
18+
19+
.PHONY: all help dev sync preview serve setup venv clean
20+
21+
all: help
22+
23+
## ── AYUDA & COMANDOS ──────────────────────────────────────────────────────────
24+
help:
25+
@printf "\n"
26+
@printf " $(BOLD)$(EMERALD)shell$(RESET)$(BOLD)aquiles$(RESET)$(RED).org$(RESET) $(DIM)• Telemetry & Stats Engine$(RESET)\n"
27+
@printf " $(GRAY)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$(RESET)\n"
28+
@printf " Dashboard de métricas públicas de GitHub: repositorios, tráfico,\n"
29+
@printf " colaboradores y tarjeta social generada automáticamente en CI/CD.\n"
30+
@printf " $(GRAY)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$(RESET)\n"
31+
@printf " $(BOLD)Uso:$(RESET) make $(CYAN)<comando>$(RESET)\n\n"
32+
@printf " $(BOLD)Comandos Principales:$(RESET)\n"
33+
@printf " $(CYAN)make dev$(RESET) $(GRAY)$(RESET) Sincroniza métricas y levanta servidor en http://localhost:$(PORT)\n"
34+
@printf " $(CYAN)make sync$(RESET) $(GRAY)$(RESET) Extrae telemetría de GitHub y genera $(BOLD)data.json$(RESET)\n"
35+
@printf " $(CYAN)make preview$(RESET) $(GRAY)$(RESET) Genera tarjeta para redes sociales ($(BOLD)og-preview.png$(RESET))\n"
36+
@printf " $(CYAN)make serve$(RESET) $(GRAY)$(RESET) Inicia servidor HTTP local en puerto $(PORT)\n\n"
37+
@printf " $(BOLD)Entorno & Mantenimiento:$(RESET)\n"
38+
@printf " $(CYAN)make setup$(RESET) $(GRAY)$(RESET) Crea entorno virtual e instala Playwright/Chromium\n"
39+
@printf " $(CYAN)make clean$(RESET) $(GRAY)$(RESET) Limpia artefactos generados ($(BOLD)data.json$(RESET), $(BOLD)og-preview.png$(RESET), cachés)\n"
40+
@printf " $(GRAY)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$(RESET)\n\n"
41+
42+
## ── FLUJOS DE DESARROLLO ─────────────────────────────────────────────────────
43+
dev: sync serve
44+
45+
sync:
46+
@printf " $(BLUE)📡 Extrayendo telemetría de GitHub vía gh CLI...$(RESET)\n"
47+
@$(PYTHON) scripts/update_metrics.py
48+
@printf " $(EMERALD)✔ data.json actualizado correctamente.$(RESET)\n"
49+
50+
preview:
51+
@printf " $(AMBER)📸 Renderizando tarjeta de alta resolución (2x Retina)...$(RESET)\n"
52+
@$(PYTHON) scripts/generate_preview.py
53+
54+
serve:
55+
@printf "\n $(BOLD)$(EMERALD)🚀 Servidor local activo:$(RESET) $(CYAN)http://localhost:$(PORT)$(RESET)\n"
56+
@printf " $(DIM) Presiona Ctrl+C para detener el servidor.$(RESET)\n\n"
57+
@$(PYTHON) -m http.server $(PORT)
58+
59+
## ── SETUP & ENTORNO VIRTUAL ──────────────────────────────────────────────────
60+
setup: venv
61+
@printf " $(BLUE)📦 Instalando dependencias de Playwright...$(RESET)\n"
62+
@$(PIP) install --quiet playwright
63+
@$(VENV_BIN)playwright install chromium
64+
@printf " $(EMERALD)✔ Entorno virtual y navegadores listos en $(VENV_DIR).$(RESET)\n"
65+
66+
venv:
67+
@if [ ! -d "$(VENV_DIR)" ]; then \
68+
printf " $(BLUE)⚙️ Creando entorno virtual en $(VENV_DIR)...$(RESET)\n"; \
69+
python3.11 -m venv $(VENV_DIR) 2>/dev/null || python3 -m venv $(VENV_DIR); \
70+
fi
71+
72+
clean:
73+
@rm -f data.json og-preview.png
74+
@find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
75+
@printf " $(EMERALD)🧹 Artefactos temporales y cachés eliminados.$(RESET)\n"

README.md

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# shellaquiles/stats
2+
3+
[![Demo en vivo](https://img.shields.io/badge/Demo_en_vivo-GitHub_Pages-22c55e.svg?style=flat-square&logo=github&logoColor=white)](https://shellaquiles.github.io/stats/)
4+
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT)
5+
[![Python 3.10+](https://img.shields.io/badge/Python-3.10+-3776AB.svg?style=flat-square&logo=python&logoColor=white)](https://www.python.org/)
6+
[![Chart.js](https://img.shields.io/badge/Chart.js-FF6384.svg?style=flat-square&logo=chartdotjs&logoColor=white)](https://www.chartjs.org/)
7+
[![Playwright](https://img.shields.io/badge/Playwright-2EAD33.svg?style=flat-square&logo=playwright&logoColor=white)](https://playwright.dev/)
8+
[![GitHub Actions](https://img.shields.io/badge/CI%2FCD-GitHub_Actions-2088FF.svg?style=flat-square&logo=github-actions&logoColor=white)](https://github.com/features/actions)
9+
10+
Dashboard web estático y automático para visualizar la **Huella Digital** y métricas de proyectos en GitHub (stars, forks, clones, commits, visitas y colaboradores).
11+
12+
Impulsado por la comunidad de **[shellaquiles.org](https://shellaquiles.org)**.
13+
14+
<p align="center">
15+
<a href="https://shellaquiles.github.io/stats/">
16+
<img src="https://img.shields.io/badge/🚀_VER_DEMO_EN_VIVO-shellaquiles.github.io%2Fstats-22c55e?style=for-the-badge&logo=githubpages&logoColor=white" alt="Ver Demo en Vivo" />
17+
</a>
18+
</p>
19+
20+
> 💡 **Tu URL personal tras hacer Fork:** `https://<TU-USUARIO>.github.io/stats/`
21+
> *(Por ejemplo, si tu usuario es `@pixelead0`, tu página se publicará en `https://pixelead0.github.io/stats/`).*
22+
23+
---
24+
25+
## Crea tu propio dashboard de estadísticas en 3 minutos
26+
27+
Solo necesitas hacer un fork. El sistema detecta tu usuario en automático y publica tus métricas sin que tengas que tocar código:
28+
29+
### 1. Haz Fork
30+
Haz clic en el botón **Fork** arriba a la derecha para copiar el repo a tu cuenta u organización.
31+
32+
### 2. Activa GitHub Pages
33+
1. Ve a **Settings** > **Pages** en tu repo (o entra a `https://github.com/<TU_USUARIO>/stats/settings/pages`).
34+
2. En **Build and deployment** > **Source**, elige **Deploy from a branch**.
35+
3. En **Branch**, selecciona **`gh-pages`** y carpeta `/(root)`.
36+
4. Guarda los cambios.
37+
38+
*(Nota: Si la rama `gh-pages` aún no aparece, se creará sola al terminar el paso 3. Para más detalles puedes ver la [documentación oficial de GitHub Pages](https://docs.github.com/es/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site)).*
39+
40+
### 3. Corre la sincronización inicial
41+
1. Ve a la pestaña **Actions** en tu repo.
42+
2. Si los workflows están pausados, presiona el botón verde para activarlos (*"I understand my workflows, go ahead and enable them"*).
43+
3. Selecciona **`Auto-Sync Telemetry & Deploy to GitHub Pages`** a la izquierda.
44+
4. Haz clic en **Run workflow** > **Run workflow** (ver [cómo ejecutar workflows manualmente](https://docs.github.com/es/actions/managing-workflow-runs/manually-running-a-workflow)).
45+
46+
### 4. Consulta tus resultados en vivo
47+
48+
Cuando el workflow termine de ejecutarse (tarda ~1 minuto):
49+
50+
1. **Tu Dashboard público**: Estará publicado en:
51+
```text
52+
https://<TU_USUARIO>.github.io/stats/
53+
```
54+
2. **Tu Tarjeta Social**: Se habrá generado la miniatura `og-preview.png` (2400x1260 px) para compartir en redes.
55+
3. **Historial de ejecuciones**: Puedes ver el estado de cada corrida en la pestaña **Actions** de tu repositorio.
56+
57+
> 📌 **Tip:** Agrega tu enlace `https://<TU_USUARIO>.github.io/stats/` en la sección **About** (en el engrane ⚙️ a la derecha de la portada de tu repo en GitHub) y marca la casilla *"Use your GitHub Pages website"*. Así tú y tus visitantes podrán entrar con 1 solo clic.
58+
59+
A partir de este momento, tus métricas se actualizarán en automático todos los días a las **06:00 UTC**.
60+
61+
---
62+
63+
## ¿Qué incluye el dashboard?
64+
65+
GitHub muestra tu actividad reciente, pero no te da una vista global del impacto de tus proyectos. Este dashboard genera una página web pública y ligera con:
66+
67+
- **Huella Digital**: Radar multieje con el balance de Stars, Forks, Commits, Clones y Visitas.
68+
- **Stats Globales**: Tabla interactiva para ordenar tus repositorios por cualquier métrica o fecha de creación.
69+
- **Por Repositorio**: Tarjetas individuales con stack técnico y enlaces a código/demos.
70+
- **Colaboradores y Core Team**: Reconocimiento a quienes aportan código a tus repos (sin bots).
71+
- **Captura para Redes Sociales**: Genera en automático una tarjeta `og-preview.png` en alta resolución (2400x1260 px) para compartir en Twitter/X o LinkedIn.
72+
- **Zero-Config**: Filtra en automático tus repos públicos propios (`type=source`) y se actualiza solo cada 24 horas vía GitHub Actions sin costo de servidores.
73+
74+
---
75+
76+
## Desarrollo local
77+
78+
Si quieres probarlo en tu máquina:
79+
80+
```bash
81+
# 1. Clonar
82+
git clone https://github.com/<TU_USUARIO>/stats.git
83+
cd stats
84+
85+
# 2. Correr servidor local (http://localhost:8000)
86+
make dev
87+
88+
# 3. Generar la captura para redes
89+
make preview
90+
```
91+
92+
---
93+
94+
## Arquitectura
95+
96+
```mermaid
97+
flowchart LR
98+
GH[GitHub API] --> PY[scripts/update_metrics.py]
99+
PY --> DATA[data.json]
100+
DATA --> HTML[index.html]
101+
DATA --> SHOT[scripts/generate_preview.py]
102+
SHOT --> IMG[og-preview.png]
103+
HTML --> GHP[gh-pages]
104+
IMG --> GHP
105+
```
106+
107+
```text
108+
├── .github/workflows/sync_metrics.yml # Automatización CI/CD
109+
├── scripts/
110+
│ ├── update_metrics.py # Extractor de datos (GitHub API)
111+
│ └── generate_preview.py # Generador de tarjeta social (Playwright)
112+
├── templates/
113+
│ └── share.html # Plantilla para la captura social
114+
├── index.html # Dashboard web interactivo
115+
├── Makefile # Comandos de desarrollo local
116+
├── VERSION # Versión oficial (1.0.0)
117+
├── CHANGELOG.md # Historial de cambios
118+
└── README.md # Documentación del proyecto
119+
```
120+
121+
- **Extractor**: Python puro con GitHub CLI (`gh`). Filtra forks (`--source`), auto-detecta usuario/org y calcula antigüedad.
122+
- **Frontend**: HTML5, Vanilla CSS y Vanilla JS. Sin frameworks pesados. Gráficos con Chart.js e iconos Lucide.
123+
- **Captura Social**: Playwright headless renderizando `templates/share.html` a escala 2x Retina.
124+
- **Despliegue**: GitHub Actions publicando a rama huérfana `gh-pages`.
125+
126+
---
127+
128+
## Sobre Shellaquiles
129+
130+
Este proyecto es parte de las herramientas de código abierto desarrolladas por la comunidad de **[shellaquiles.org](https://shellaquiles.org)**. Si te gusta el desarrollo de herramientas de terminal, CLI y utilidades para devs, únete a la comunidad:
131+
132+
- Web: [https://shellaquiles.org](https://shellaquiles.org)
133+
- GitHub: [https://github.com/shellaquiles](https://github.com/shellaquiles)
134+
- Otros proyectos: `cron-quiles`, `tribuTACOS`, `pandocquiles`, `KARNITAS`.
135+
136+
---
137+
138+
## Licencia
139+
140+
MIT © Shellaquiles.

VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1.0.0

0 commit comments

Comments
 (0)