## Progreso global

0%
Completado
0
Items listos
0
Items pendientes
0/0
Archivos listos

Recomendación: marca “listo” solo cuando exista el archivo y se haya ejecutado el test/validación asociado.

### Fase 0 — Base técnica (fundación)

0% 0/0
Archivos y base mínima (Router, Request/Response, Logs, Middlewares)

public/index.php creado y carga bootstrap.

Debe renderizar landing y exponer rutas mínimas.

public/.htaccess con front controller y bloqueos básicos.

Debe bloquear acceso a /src, /templates, /storage.

src/Config/config.php configuraciones base (sin DB obligatoria).

Incluye seguridad, paths, SEO default.

src/Bootstrap/app.php App + error handler + router + middlewares.

Debe iniciar sesión segura (cookie flags) y exponer rutas.

src/Http/Request.php Request fromGlobals.

Lee method/path/headers/ip/ua/rawBody.

src/Http/Response.php Respuesta JSON/HTML + headers.

Envía status + content-type + headers custom.

src/Http/Router.php Router + pipeline de middlewares + notFound.

Despacha por método/ruta.

src/Http/Middlewares/SecurityHeaders.php CSP/HSTS/nosniff/deny frame.

Debe aplicar headers de seguridad a respuestas.

src/Security/CsrfToken.php emitir/verificar token (1 uso + TTL).

Rotación por request POST-like.

src/Http/Middlewares/Csrf.php bloquea POST sin CSRF.

Debe loguear evento en security.log.

src/Security/RateLimiter.php rate limit file-based.

Key por ruta+IP, ventana y max.

src/Http/Middlewares/RateLimit.php 429 en abuso.

Debe escribir en security.log si bloquea.

src/Support/Logger.php logs: app/errors/security/audit.

Formato JSON line por evento.

src/Support/Helpers.php render_template()

Carga templates desde /templates.

templates/layouts/front.php layout base.

Debe inyectar title/description básico.

templates/front/index.php landing placeholder.

Solo para verificar el pipeline.

Ruta GET /health responde 200 JSON.

Validación: curl debe devolver ok:true.

Ruta GET /csrf entrega token CSRF.

Validación: respuesta JSON debe incluir csrf.

Logs creados en storage/logs.

Debe existir carpeta y tener permisos de escritura.

### Fase 1 — Auth (registro/login) + captcha propio + 2FA + Google OAuth

0% 0/0
Checklist Auth y seguridad (a desarrollar después de Fase 0)

src/Auth/AuthService.php login/registro base.

Argon2id, session rotate, estados usuario.

src/Auth/Passwords.php hash/verify Argon2id.

Política de password validada.

src/Auth/TwoFactor.php TOTP + backup codes.

Step-up para empresas.

src/Auth/GoogleOAuth.php OAuth PKCE.

Verificación de email + state.

src/Security/Captcha.php captcha propio (Imagick).

Expira, 1 uso, hash en sesión.

Rutas /login y /registro (GET/POST).

CSRF + captcha + rate limit + logs.

Test: POST sin CSRF → 403.

Debe loguearse en security.log.

Test: brute force → 429.

Backoff progresivo.

### Fase 2 — Planes + Módulos + RBAC + Panel Admin total

0% 0/0
Catálogo de módulos, planes, overrides y permisos

Tablas: plans/modules/plan_modules/user_modules.

Regla: override manual manda.

Tablas RBAC: roles/permissions/role_permissions/user_roles.

Scope platform vs company team.

src/Http/Middlewares/RequireModule.php

403 si no tiene módulo habilitado.

Panel Admin total + sidebar independiente.

CRUD planes, módulos, overrides y auditoría.

### Fase 3 — Media (imágenes optimizadas, seguras y rápidas)

0% 0/0
Upload seguro + WebP + srcset + lazy load

src/Domain/Media/ImageService.php

Re-encode Imagick + tamaños + strip metadata.

Test: MIME real (finfo) + límites tamaño/dimensiones.

Rechazo de no-imagen.

### Fase 4 — UI Front (Landing pro + Feed 3 columnas + móvil tipo app)

0% 0/0
Layouts, componentes, navegación móvil (header + bottom nav)

Landing profesional (colores claros + contraste + interacción).

CTA postulante/empresa + confianza + categorías + destacadas.

Feed 3 columnas desktop, 2 tablet, 1 móvil.

Offcanvas filtros, cards, sidebar right.

Móvil tipo app: header iconos + bottom nav fijo.

5 botones: Inicio/Buscar/Publicar/Notifs/Perfil.

### Fase 5 — Posts + Moderación + Reportes

0% 0/0
CRUD Posts, sanitización, denuncias, cola de moderación

Posts: texto + 1 imagen (MVP).

Texto plano, escape output, anti-XSS.

Reportes y cola admin (aprobar/ocultar/ban).

Auditoría de acciones.

### Fase 6 — Vacantes + Aplicaciones (core)

0% 0/0
Publicación, aplicación, panel empresa y límites por plan

Empresas publican vacantes (según módulo/plan).

Paginación estricta, moderación si aplica.

Test: límites por plan (vacantes activas / aplicaciones por día).

Bloquea y registra intento si excede.

### Fase 7 — Hardening, performance, WAF y SEO final

0% 0/0
Cloudflare/WAF, cache headers, índices DB, sitemap, schema

WAF/Anti-DDoS (Cloudflare) reglas por rutas sensibles.

Rate limiting en /login /registro /buscar.

SEO final: slugs, canonical, OG, sitemap, schema.

JobPosting + Article + Organization.

## Resumen de control

Este tablero sigue la estructura y flujo acordados. Cuando agreguemos/renombremos archivos, actualizamos aquí el checklist.

Regla para marcar como “Listo”
Marca un item como listo únicamente si:

1. Existe el archivo en la ruta indicada.
2. Compila/ejecuta sin errores 500.
3. Se ejecutó el test/validación asociado (curl o checklist manual).
4. Se registran logs correctamente si aplica (security/audit/errors).

Notas rápidas (WHM/Apache + shared hosting)

- Rate limit file-based funciona bien en shared hosting.
- Para DDoS real: WAF en borde (Cloudflare) es obligatorio.
- Imágenes: entrada JPEG/PNG; salida WebP + fallback; usar cache headers.
- Evitar video en MVP (ya definido).

Exportar / importar estado

Puedes copiar el JSON del estado para guardarlo aparte.

Importar sobrescribe el estado actual.