ShaafVorthryss Descargar CV
EnglishEspañolPortuguêsFrançaisالعربية

Shaaf · Ingeniero de software · Reino Unido, en remoto para todo el mundo

Flujos complejos. Software que funciona.

Diseño y desarrollo integraciones, herramientas internas y flujos con IA. Servicios Python, interfaces React y procesamiento de datos, con demostraciones que puedes ejecutar y resultados que puedes comprobar.

Python · SQL · FastAPI · TypeScript · React · Ingeniería de datos · Integración de IA y LLM · n8n · Docker · Linux

Un camino claro del problema a la entrega

Indica el flujo actual, las herramientas y el resultado deseado. Acordamos un primer hito útil y desarrollamos con criterios de aceptación explícitos.

Conectar sistemas empresariales

APIs, datos CRM y tareas recurrentes. Definir la fuente de verdad, gestionar eventos duplicados y hacer visibles los fallos.

Crear software operativo

Herramientas internas, paneles de informes y aplicaciones web con una interfaz útil y resultados comprobados.

Integrar IA en el trabajo

Procesamiento de documentos, recuperación de conocimiento y funciones conectadas a herramientas, con evaluación específica y una entrega práctica.

Proyectos destacados

Explora el trabajo. Comprueba el resultado.

Proyectos propios, con datos sintéticos de demostración identificados. Explora el laboratorio, la aplicación web y los resultados de datos.

JavaScript · State machine · Idempotency · Recovery

Laboratorio de recuperación: provoca un fallo y observa la respuesta

Una demostración ejecutable en el navegador de identidad de eventos, tareas en cola y un conector CRM simulado. Prueba entradas duplicadas, una espera agotada, una escritura interrumpida o un error permanente. Inspecciona el estado y descarga el registro.

  • 13 pruebas superadas, incluida la detección de estados alterados deliberadamente
  • 200 eventos sintéticos únicos: 150 efectos correctos, 50 casos para revisión y ningún efecto duplicado
  • El navegador y las pruebas ejecutan el mismo motor; código y pruebas descargables
0efectos duplicados en la prueba de 200 eventos

TypeScript · React · FastAPI · pytest · Playwright · CI

Order Desk: una app, tres stacks, una sola batería de pruebas

Una pequeña aplicación web de pedidos con una API JSON en Python, SQLite y un front end en TypeScript estricto, reconstruida en React 19 y sobre un servidor FastAPI. Las mismas pruebas de API, de base de datos y de navegador juzgan cada versión.

  • Versión original reparada: 90 pruebas superadas de API, base de datos, navegador y herramientas
  • En una versión defectuosa a propósito fallan exactamente las pruebas que protegen sus 6 errores introducidos, en todas las versiones
  • Proceso local reproducible: tipos, compilaciones y pruebas; incluye configuración para CI alojada
3 stacksTypeScript, React y FastAPI, juzgados por una sola batería de pruebas

Python · PDF · XML · OCR · Calidad de datos

Procesamiento de documentos y datos

Datos sintéticos de facturas, clientes y ventas convertidos en resultados comprobados. Son proyectos de demostración con recuentos independientes, no trabajos para clientes.

  • 3 facturas en PDF: 11 de 11 líneas exactas y un cobro de más de 10,00 £ detectado
  • 16 facturas electrónicas mexicanas y brasileñas (CFDI, NF-e): los 9 problemas introducidos, detectados
  • 299 registros de clientes en árabe e inglés depurados, con 242 teléfonos en formato internacional
  • 1.774 filas de ventas en bruto convertidas en un informe semanal de dos páginas
10,00 £discrepancia de £10.00 introducida deliberadamente y detectada
Una factura antes de la extracciónLa misma factura como filas verificadas de una hoja de cálculoInforme semanal de ventas de dos páginas

Más proyectos

Python · Datos web · Datos estructurados

Motor de comparación de precios

Responde en código a «¿cuál es el precio más barato y quién lo vende?»: encuentra tiendas, lee datos estructurados de producto, separa los precios sin IVA y en otras monedas, y respeta robots.txt.

  • Respondió una consulta real de precios en el Reino Unido en 49 segundos, con los 7 datos correctos
  • Las tiendas que bloquearon la lectura automática se indicaron, nunca se adivinaron

Python · Registros públicos · Validación de datos

Verificación de empresas a escala

Verificó una lista de empresas británicas en Companies House y en sus propias webs antes de cualquier contacto, conforme a la normativa británica PECR. Las consultas de registro también cubren Francia (Sirene) y Australia (ABN).

  • 256 empresas verificadas: 132 confirmadas
  • 23 direcciones erróneas y 4 empresas inactivas detectadas antes del contacto

Python · Búsqueda · Fuentes oficiales

Motor de investigación multilingüe

Busca en el idioma de cada país, lee páginas y PDF oficiales, puntúa cada fuente y cita cada hallazgo con su enlace.

  • 6 de 6 ejecuciones reales superaron sus comprobaciones (Japón, Polonia, Brasil)

Swift · SwiftUI · macOS

App de operaciones para macOS

Una app de barra de menús que reúne el correo de 3 cuentas, alertas, aprobaciones y trabajo terminado en un solo panel.

  • Tiempo de carga del panel de correo reducido de 64 s a 0,6 s
  • Una autoprueba al compilar pulsa los 32 botones: 0 fallos

Debian · Docker · n8n

Servidor Linux propio

Un servidor siempre activo con flujos de n8n, un buscador privado (SearXNG), un servicio de monitorización y un servidor de modelos locales.

  • Comprobaciones de estado cada 15 minutos y un resumen diario
  • Watchdog probado: un servicio detenido se reinició solo en 41 s

La plataforma

Un sistema diseñado y construido de forma independiente

Un proyecto independiente que conecta tareas persistentes, herramientas, recuperación de información y verificación. Investigo la orquestación, la recuperación ante fallos y cómo convertir las salidas de modelos en trabajo comprobado. Los resultados siguientes corresponden a experimentos concretos registrados.

2.175
pruebas automatizadas superadas, con 0 fallos, en la ejecución completa del 28 de octubre de 2026
33 s
para volver a trabajar sola tras un reinicio completo del equipo
20 / 20
respuestas con datos intercambiados detectadas por su verificación
0,49 s
mediana de respuesta a una pregunta simple, antes 869 s
Parte por parte
  1. Motor de tareas

    Convierte una petición en pasos y ejecuta cada paso con una herramienta. Cada resultado se guarda con una suma de verificación, así que cualquier respuesta puede rastrearse hasta lo que se leyó.

    Python · state machines · durable records

  2. Capa de herramientas

    26 herramientas bajo un único registro: búsqueda web, lectores de páginas y PDF, OCR, registros mercantiles, precios, tablas, archivos y calendario. Cada herramienta declara lo que puede hacer, y enviar un correo espera la aprobación de una persona.

    Plugin registry · typed parameters · approval classes

  3. Verificación de datos

    El código extrae registros de cada resultado de herramienta. Un dato de una respuesta solo se acepta si un mismo registro contiene su valor y lo que describe, así que una cifra intercambiada o inventada se rechaza.

    Typed validation · evidence binding

  4. Métodos en código

    Cuando el código puede responder, no se consulta a ningún modelo. La comparación de precios, la verificación de empresas, los recuentos y el trabajo con tablas funcionan como métodos fijos; una consulta real de precios en el Reino Unido tardó 49 segundos.

    Deterministic pipelines · structured data

  5. Búsqueda

    Un buscador sobre 83.589 pasajes de documentación técnica que combina la clasificación por palabras clave con embeddings vectoriales, y un motor de investigación que busca en cada país en su propio idioma.

    SQLite FTS5 · BM25 · embeddings · rank fusion

  6. Fiabilidad

    Un supervisor reinicia el trabajo fallido con pausas cada vez mayores entre intentos. Las tareas esperan a que vuelva internet en lugar de fallar, y detener, pausar y reanudar surten efecto en el siguiente turno.

    Supervision · back-off · durable jobs

  7. Control de recursos

    El trabajo pesado solo empieza cuando la memoria, la temperatura y la batería lo permiten. Si el usuario abre un juego, la tarea en curso se aparta al instante y continúa después.

    Admission control · scheduling

El código es privado. Lo explico en las entrevistas y puedo compartir el código fuente bajo un acuerdo de confidencialidad.

Historial de resolución de problemas

Casos de ingeniería registrados

Investigaciones seleccionadas: el fallo observado, la reparación y las comprobaciones registradas.

Una pregunta sencilla que tardó 869 segundos

Lo que encontré
Una pregunta corta escrita en la app en mitad de una tarea quedó en cola detrás del modelo principal, ocupado, y esperó 869 segundos una respuesta.
Lo que hice
Ahora las preguntas se clasifican antes de ejecutar nada. Las cuentas y las preguntas sobre el sistema las responde el código, y las preguntas cortas que no requieren buscar nada van a un modelo pequeño y rápido.
Resultado
20 de 20 preguntas generales respondidas, con una mediana de respuesta de 0,49 s.

Una IA que no encontraba un precio tras 24 intentos

Lo que encontré
Adivinar a partir de resultados de búsqueda nunca dio un precio que pudiera respaldar.
Lo que hice
Sustituí las suposiciones por un método en código: encontrar las tiendas, leer sus datos estructurados de producto, comparar en igualdad de condiciones e informar de lo que no se pudo leer.
Resultado
Una consulta real de precios en el Reino Unido respondida en 49 segundos, con los 7 datos correctos.

Un panel de correo que se rendía a los 64 segundos

Lo que encontré
El lector abría cada mensaje completo, uno a uno y de solo una de las tres cuentas, mientras el panel esperaba 25 segundos como máximo.
Lo que hice
Leer solo las cabeceras, con una llamada por cuenta, y unirlas de más reciente a más antigua.
Resultado
De 64 s a 0,6 s en las 3 cuentas; una prueba de regresión lo protege.

Una verificación que aceptaba respuestas intercambiadas

Lo que encontré
Puse a prueba mi propia verificación intercambiando cifras entre respuestas. Las 20 respuestas intercambiadas pasaron: comprobaba que las cifras existían, no a qué afirmación pertenecían.
Lo que hice
La reconstruí en torno a registros extraídos por código. Ahora un dato solo se acepta cuando un mismo registro contiene su valor y lo que describe.
Resultado
0 de 20 respuestas intercambiadas pasan.
Más casos

Una tarea en segundo plano que ignoraba un juego

Lo que encontré
Se abrió un juego mientras una tarea en segundo plano ocupaba 7,6 GB de memoria. El trabajo nuevo se detuvo, pero la tarea en curso siguió hasta que se paró a mano.
Lo que hice
Ahora la tarea en curso lo comprueba en cada turno y se aparta en cuanto se está jugando. No cuenta como fallo.
Resultado
La tarea se detiene en su siguiente turno y vuelve a empezar cuando termina el juego.

Un corte de tres horas que gastó 21 intentos

Lo que encontré
Durante un corte de internet de tres horas, el sistema siguió empezando trabajo: 21 intentos locales y 9 llamadas a la nube fallaron sin conexión, y 13 tareas quedaron marcadas como bloqueadas.
Lo que hice
Ahora comprueba la conexión dos veces antes de empezar un trabajo que necesita internet. El trabajo espera mientras no hay conexión, y un intento que falló solo por el corte no cuenta.
Resultado
El trabajo se pausa durante un corte y continúa cuando vuelve la conexión.

Un botón de parar que creaba una tarea llamada «parar»

Lo que encontré
En el chat de la app, «parar», «pausa» y «cancela eso» se archivaban como tareas nuevas. 10 de 12 mensajes cotidianos se convertían en tareas.
Lo que hice
Ahora los comandos se reconocen y se escriben como una sola orden que el ejecutor obedece en su siguiente turno: parar termina el trabajo en curso, pausar deja que acabe, reanudar vuelve a empezar y una tarea cancelada nunca empieza.
Resultado
Comprobado en vivo: una parada total no dejó nada en marcha.

Una respuesta correcta rechazada, y después una incorrecta

Lo que encontré
Un agente de IA contó correctamente 20 personas distintas en una lista de contactos. Una comprobación por palabras la rechazó; el reintento dijo 19.
Lo que hice
Construí una comprobación tipada que vuelve a contar a partir de los datos de origen con la regla de la propia petición. Las respuestas correctas pasan se redacten como se redacten; las incorrectas se rechazan indicando la causa (aquí, la fila de encabezado quitada dos veces).
Resultado
Probada con los registros reales, revisada de forma independiente dos veces y ya en producción.

Alertas registradas como mostradas que nadie vio

Lo que encontré
La app trataba «enviado» como «visto»: el sistema operativo tenía las alertas desactivadas y el registro seguía marcándolas como mostradas.
Lo que hice
Comprobar primero el permiso real, marcar una alerta como mostrada solo cuando el sistema la acepta, retener las demás y avisar claramente al usuario cuando las alertas están desactivadas.
Resultado
Las dos alertas perdidas se entregaron y se confirmaron en pantalla; una prueba de regresión lo protege.

Habilidades

Lo que aporto a un equipo

Habilidades amplias y prácticas en todo el stack, cada una aplicada en un proyecto real que puedes ver arriba.

Backend, APIs y front end

Servicios en Python y APIs REST (también con FastAPI) con almacenamiento SQL, y front ends tipados en TypeScript y React. Con reintentos, idempotencia y gestión de fallos.

Python · FastAPI · TypeScript · React · APIs REST · JSON · SQL / SQLite · Bash · JavaScript

Ingeniería de datos

Datos desordenados convertidos en resultados limpios y verificados: limpieza, deduplicación, validación, conciliación, extracción de PDF y XML, OCR e informes.

Pipelines de datos · Calidad de datos · PDF y XML · OCR · Informes

Integración de IA y LLM

Agentes que usan herramientas reales paso a paso, modelos locales y en el dispositivo, recuperación de información y evaluación con pruebas reservadas, con código que comprueba cada respuesta.

Agentes de IA · Uso de herramientas · Ollama · MLX · Recuperación · Evaluación

Automatización e integración

Flujos de trabajo e integraciones que conectan sistemas y fuentes de datos de forma fiable, incluida la extracción respetuosa de datos web y los registros públicos.

n8n · Integración de APIs · Datos web · Registros públicos

Pruebas y QA

Pruebas automatizadas en todas las capas, pruebas de regresión escritas a partir de fallos reales y controles de publicación que detienen una versión defectuosa.

pytest · Playwright · Pruebas de API · Pruebas de base de datos · Controles de publicación · CI/CD

Fiabilidad y DevOps

Servicios siempre activos: supervisión y reinicios, control de admisión, controles de publicación con reversión, monitorización, trazas, contenedores y copias de seguridad.

Debian · Docker · systemd · SSH · Git · OpenTelemetry

Plataformas de Apple

Una app nativa para macOS en Swift y SwiftUI, además de herramientas de línea de comandos para OCR, voz a texto y Core ML en el propio dispositivo.

Swift · SwiftUI · Vision · Speech · Core ML

Seguridad

Flujos de aprobación, listas de comandos permitidos, aislamiento de procesos, registros de auditoría firmados y un almacén de datos basado en el consentimiento, además de práctica OWASP en un laboratorio aislado.

macOS Seatbelt · Semgrep · OWASP · Juice Shop · WebGoat

Internacional

Preparado para trabajar a nivel internacional

Mis proyectos ya cruzan fronteras. Construyo software que trata correctamente documentos, registros, idiomas y monedas de otros países, y trabajo en remoto con equipos de cualquier lugar.

  • América LatinaFacturas electrónicas CFDI de México y NF-e de Brasil leídas desde XML y verificadas línea a línea; investigación en portugués para Brasil.
  • Oriente Medio y Norte de ÁfricaRegistros de clientes en árabe e inglés depurados y deduplicados, con teléfonos en formato internacional.
  • EuropaConsultas en registros mercantiles del Reino Unido (Companies House) y Francia (Sirene); investigación en polaco.
  • Asia-PacíficoInvestigación en japonés; consultas de empresas en Australia (ABN).
  • Dinero e impuestosPrecios en su propia moneda, con y sin IVA, y nunca convertidos a ojo.
  • HorarioHorario del Reino Unido (GMT/BST). Acordamos la coincidencia horaria y la frecuencia de comunicación en cada proyecto.

Sobre mí

Sobre mí

Soy ingeniero de software autodidacta y vivo en el Reino Unido. Desde mediados de 2026 he diseñado, construido y operado de forma independiente la plataforma descrita arriba y los proyectos que la acompañan.

Vorthryss es mi práctica independiente de ingeniería. Origino las ideas y la arquitectura, comparo enfoques y uso herramientas de IA para implementar, criticar y probar. Asumo la responsabilidad del alcance, las decisiones de diseño y los criterios de aceptación.

Me gustan los problemas en los que el software se encuentra con el mundo real: datos desordenados, documentos de otros países, equipos que se reinician a mitad de una tarea. Hago cambios pequeños y probados, y dejo por escrito qué cambió y por qué.

  • Python · TypeScript · SQL · Swift · Bash
  • Una plataforma completa construida y operada de forma independiente desde mediados de 2026
  • Documentos, datos y registros de 7 países
  • Derecho a trabajar en el Reino Unido

Experiencia

Lo que he construido

Ingeniero de software independiente

Proyectos propios · En remoto, desde el Reino Unido · Junio de 2026 – actualidad

  • Originé la arquitectura y dirigí la implementación, crítica y pruebas asistidas por IA de una plataforma de tareas persistentes con interfaz nativa de macOS.
  • Publiqué 58 versiones a través de un control de publicación: versión fijada al commit, comprobación previa, batería de pruebas base, recibo y reversión con un solo comando.
  • Desarrollé pruebas con ayuda de IA: la ejecución completa registrada el 28 de octubre de 2026 superó 2.175 pruebas sin fallos.
  • Construí herramientas de datos y verificación usadas en tareas reales: comparación de precios, verificación de empresas, investigación multilingüe y extracción de documentos.
  • Opero un servidor Linux propio con Docker, flujos de n8n, monitorización y copias de seguridad.

Principios

Cómo trabajo

Pasos pequeños y probados

Acompaño los cambios con pruebas pertinentes y reviso el resultado. Las versiones pueden revertirse.

Corregir la causa

Cuando algo falla, busco la causa, la corrijo y convierto el fallo en una prueba para que no vuelva sin que nadie lo note.

Nunca adivinar

Cuando no hay registro, escribo «desconocido» en lugar de una suposición que suene bien.

Registros escritos

Qué cambió, por qué y la evidencia al lado, para que cualquiera pueda continuar el trabajo.

Contacto

Trabajemos juntos

¿Necesitas conectar un flujo, terminar una aplicación o hacer fiable una función de IA? Envía el objetivo, las tecnologías actuales y un ejemplo del resultado. También me interesan puestos remotos de ingeniería de software.

[email protected]

  • Derecho a trabajar en el Reino Unido
  • Con base en el Reino Unido · en remoto para todo el mundo
  • Trabajo en inglés