Web app local para trackear horas de estudio del roadmap de certificaciones del equipo. Cada miembro corre su propia instancia con su propia base de datos local. No hay servidor compartido — tus horas son tuyas.
Un dashboard simple que:
- Lleva el roadmap del equipo (eJPT → BSCP → PNPT → OSCP) precargado, con horas estimadas por ítem
- Te deja iniciar/detener sesiones de estudio con un click (cronómetro en vivo HH:MM:SS)
- Compara tu tiempo invertido vs el estimado y te da feedback con badges (
pending,in_progress,done,under,over) - Guarda historial completo de sesiones con notas
- Hora de Asunción, Paraguay
Stack: Flask + SQLite + HTMX. Sin npm, sin build, sin docker. Arranca con python3 app.py.
- Python 3.9+ (necesitamos
zoneinfode stdlib) - Git
# 1. Cloná el repo donde tengas tus proyectos
git clone https://github.com/<tu-org>/tracker-pentesting.git
cd tracker-pentesting
# 2. (Opcional pero recomendado) virtualenv
python3 -m venv .venv
source .venv/bin/activate
# 3. Instalá Flask
pip install -r requirements.txt
# 4. Hacé el wrapper ejecutable y agregá alias global
chmod +x tracker
echo "alias tracker='$(pwd)/tracker'" >> ~/.bashrc
source ~/.bashrc
# 5. Arrancá
tracker start
tracker open # abre el dashboard en tu browserLa primera vez que arrancás, app.py detecta que db.sqlite3 no existe y corre el seed automáticamente. Vas a tener las 5 fases con sus 33 ítems precargados.
tracker start # arranca server (http://127.0.0.1:5050)
tracker stop # lo detiene
tracker status # chequea si corre + muestra sesión activa si hay
tracker open # arranca + abre browser automáticamente
tracker log # tail -f del log- Antes de empezar a estudiar:
tracker open - En el dashboard: buscá el ítem en el que vas a trabajar (ej. "Hack4u: Introducción a Linux") y click en ▶ Iniciar
- Cronómetro empieza a tickear en vivo en el header
- Estudiás 1, 2, X horas — el cronómetro sigue aunque cierres el browser
- Cuando terminás la sesión: click ⏹ Detener, escribís nota corta opcional ("módulo bash, ejercicios 1-5")
- Cuando terminás un ítem completo: click ○ Marcar como completado
| Badge | Cuándo aparece | Qué significa |
|---|---|---|
pending |
Invertiste 0 hs (o < 5% del estimado) | Aún no arrancaste |
in_progress |
Estás entre 5% y 125% del estimado, sin marcar completado | Avanzando normal |
done |
Marcaste completado y >50% del estimado | OK, terminado en tiempo razonable |
under |
Marcaste completado con <50% del estimado | Calibrá: ¿realmente lo aprendiste? |
over |
Estás >125% del estimado y aún no terminaste | Te excediste — chequeá si te trabaste |
milestone |
Items con 0 hs estimadas (exámenes oficiales) | Hito que no se cronometra |
Todo está en db.sqlite3 local en tu máquina. El .gitignore ya excluye:
db.sqlite3y archivos auxiliaresdb-backup-*.sqlite3__pycache__/,.venv/,*.log
Nunca commitees tu db.sqlite3 — son tus horas reales y tus notas privadas.
# Snapshot manual cada semana
cp db.sqlite3 db-backup-$(date +%Y-%m-%d).sqlite3
# O cron semanal:
echo "0 20 * * 0 cp $(pwd)/db.sqlite3 $(pwd)/db-backup-\$(date +\%Y-\%m-\%d).sqlite3" | crontab -tracker-pentesting/
├── app.py # Flask server (rutas + lógica)
├── seed.py # Carga el roadmap inicial en DB
├── requirements.txt # flask
├── tracker # Wrapper bash (start/stop/status/open/log)
├── templates/
│ ├── base.html # Layout + reloj live + estilos
│ ├── index.html # Dashboard principal
│ └── sessions.html # Historial de sesiones
├── README.md # Este archivo
└── .gitignore
Editá seed.py con tus items + estimados. Después:
# Borrá la DB existente (perderás historial — backupealo antes)
rm db.sqlite3
python3 seed.pySi solo querés agregar ítems nuevos sin perder historial: editá seed.py y corré python3 seed.py — usa INSERT OR IGNORE, no toca lo existente.
- Flask 3.x: server WSGI sin reloader (el wrapper bash necesita PID estable)
- SQLite: archivo único, schema inicializado por
seed.py, manejo de fechas conjulianday() - HTMX: cargado por CDN en
base.html, sin compile step - Zoneinfo: stdlib de Python para
America/Asuncion— no requierepytz - JS vanilla: cronómetro live + reloj del header. Sin frameworks, sin npm.
Total: ~400 líneas (Python + HTML + bash).
Posibles mejoras:
- Endpoint
/api/sessions.jsonpara exportar a CSV - Reporte semanal automático (
tracker report) - Comparativa con compañeros del equipo (opt-in, server compartido)
- Dark/light theme toggle
- Notificación cuando una sesión activa supera 4 horas continuas (recordá descansar)
VA Technology E.A.S. · Asunción, Paraguay