Verifiko
Detección explicable de riesgo en URLs, construida como un pipeline de análisis por capas.
Un producto propio que puntúa URLs sospechosas por riesgo de phishing y malware — y muestra por qué. Un pipeline por capas tras un servicio FastAPI devuelve un score explicable con traza de decisión por señal, en lugar de un valor opaco. En producción en verifiko.es.
Rol
Proyecto en solitario — product engineer. Implementación asistida por IA; la spec, la revisión y la verificación son mías.
Tipo
Producto
Enlaces
Contexto
Contexto
Verifiko analiza una URL sospechosa y devuelve un veredicto de riesgo que un analista puede revisar de verdad: no solo «maliciosa», sino qué señales contribuyeron y por qué.
Funciona como producto real: un servicio FastAPI con un workspace en React y Vite, construido para que el razonamiento detrás de un score sea visible y un veredicto pueda confiarse o cuestionarse.
Problema
Problema y restricciones
Lo difícil no es marcar una URL mala; es hacerlo sin un score opaco y traer objetivos no confiables de forma segura, para que el analizador no pueda convertirse en un vector SSRF.
Las consultas externas —datos de registro, TLS, feeds de reputación, descargas de HTML— fallan o limitan, así que el veredicto tiene que seguir siendo razonable cuando faltan señales.
Enfoque
Enfoque y decisiones técnicas
Un pipeline por capas: heurísticas estáticas de URL incluido typosquatting, recencia del dominio a partir de los datos de registro, validación de TLS y transporte, e inspección de superficie de credential-harvest en HTML.
La reputación se agrega entre feeds independientes y solo cuenta cuando al menos dos coinciden, con un circuit breaker para que un feed caído no distorsione el veredicto.
Una detonación headless opcional queda tras un toggle, apagada por defecto, para inspeccionar en profundidad páginas evasivas.
Cada veredicto lleva una traza de decisión por señal, de modo que el score es explicable en lugar de un único valor opaco.
Arquitectura
Arquitectura
- 1Clean Architecture: capas explícitas de dominio, aplicación, infraestructura y entrypoints con ports y adapters.
- 2Un worker asíncrono durable ejecuta el enriquecimiento fuera de la ruta de request: los trabajos se persisten en PostgreSQL y se despachan mediante una cola QStash firmada.
- 3FastAPI, SQLAlchemy y PostgreSQL con migraciones Alembic; un workspace de analista en React, TypeScript y Vite.
Decisiones
Decisiones clave
01
Seguridad por construcción: un guard de egress en cada descarga saliente para prevenir SSRF, más webhooks firmados (HMAC) y verificación de firma QStash en la ruta async.
02
Resiliencia: cuotas por día y rate limiting que hacen fail-open ante caídas, con funciones pesadas como detonación y reputación tras feature toggles, apagadas por defecto.
03
Hardening y auditabilidad: CSP y cabeceras de seguridad en la API, y una traza de decisión explicable como eje para que cada veredicto siga siendo revisable.
Resultado
Resultado
El resultado es un veredicto defendible: sobre un corpus offline etiquetado y acotado, de 40 URLs, la detección obtiene precisión 1.00, recall 0.82 y una tasa de falsos positivos de 0.00, con accuracy 0.90, medido por un harness de evaluación determinista.
El comportamiento es reproducible —457 tests automatizados en 61 archivos— y la traza explicable permite ver exactamente por qué se marcó una URL.
En PageSpeed Insights (1 oct 2026) el sitio obtuvo Performance 99, Accessibility 100, Best Practices 96 y SEO 100, en móvil y escritorio. El repositorio es privado; el código está disponible bajo petición.