Qué hago
Construyo aplicaciones web de principio a fin: la interfaz en React o Next.js, el esquema y los permisos de la base de datos, la lógica de servidor y el despliegue. No me quedo en que «funcione en mi pantalla»; me interesa que aguante en producción.
Lo que más me engancha es la seguridad y el acceso a los datos: que las comprobaciones de permiso se hagan en el servidor y nunca en lo que diga el navegador, y que cada usuario solo pueda ver lo suyo. He construido paneles multi-rol con auditoría, portales con aislamiento de datos a nivel de fila y varias herramientas de seguridad.
Cómo trabajo
Prefiero una herramienta honesta y auditable a una que parezca mágica. En mi cifrador de Vigenère documenté por qué ese algoritmo no protege nada real desde que lo rompieron en 1863; en ¿Es fraude?, cada señal de alerta cita su fuente oficial y la herramienta da «indicios», nunca un veredicto. Prefiero decir lo que una cosa no hace a venderla de más.
Y pongo la seguridad en el sitio correcto: el control de permisos va en el servidor y el aislamiento de datos en la propia base de datos, no en el código que corre en el navegador. Documento cada proyecto para que otra persona —o yo dentro de seis meses— pueda entender por qué está hecho así.
Proyectos
sep 2025 – nov 2025 · unas 27.000 líneas
Panel de soporte con tres roles —administrador, staff y usuario—, sistema de tickets y registro de auditoría. Lo que más trabajo llevó fueron las reglas de seguridad: el registro de auditoría es de solo escritura y ni un administrador puede modificarlo ni borrarlo, y la comprobación del rol se hace contra el servidor, nunca contra lo que diga el navegador.
React 18FirebaseFirestore Rules
Código y documentación
jun 2026 · Proyecto
Portal de clientes con ocho tablas y políticas RLS que aíslan los datos de cada cliente en la propia base de datos, no en el código de la aplicación. Resolví una recursión infinita entre políticas —la de «perfiles» consultaba «perfiles»— con una función SECURITY DEFINER que rompe el ciclo.
Next.js 16SupabasePostgreSQL RLS
Código y documentación
septiembre 2026 · Proyecto propio · en producción
Web que analiza un SMS o email sospechoso y señala sus indicios de phishing, 100% en el navegador y sin inteligencia artificial: un motor de reglas basado en los indicadores de INCIBE y la OSI que compara los enlaces con los dominios oficiales reales. Cada señal cita su fuente; da indicios, no veredictos.
JavaScriptCloudflare PagesSeguridad
esfraude.pages.dev
septiembre 2026 · Proyecto propio · open source
Aplicación que se abre en el navegador pero corre en tu equipo: descubre los dispositivos de tu red, su fabricante y sus puertos, sin privilegios de administrador. Incluye una web con un foro en tiempo real (Cloudflare D1) para comparar redes de forma anónima, con moderación y anti-spam. Junta desarrollo web, redes y seguridad.
Node.jsCloudflare Pages · D1Redes
enredo.pages.dev · Código (MIT)
septiembre 2026 · Proyecto propio · en producción
Web que analiza un chat exportado de WhatsApp 100% en el navegador: nada se sube a ningún servidor. Parsea los formatos .txt y .zip (este último descomprimido en el navegador sin librerías), calcula las estadísticas y genera una tarjeta para compartir.
JavaScriptHTML y CSSCloudflare Pages
chataliza.pages.dev · Código (MIT)
nov 2025 · Proyecto personal
Panel único para gestionar varios sitios a la vez: un agente en JavaScript se inyecta en cada sitio gestionado y recibe órdenes desde el panel a través de seis funciones serverless.
TypeScriptNetlify FunctionsFirebase
Código y documentación
sep 2025 · Ejercicio de algoritmia
Cifrador web con el algoritmo escrito desde cero, sin librerías de criptografía: alfabeto de 27 caracteres, flujo de clave y corrección del índice negativo al descifrar. La documentación explica también por qué este cifrado no protege nada real desde que Kasiski lo rompió en 1863.
React 19JavaScript
Código y documentación
sep 2025 – ene 2026 · Proyecto personal
Herramienta de escritorio que detecta cambios en los ficheros de un equipo comparando huellas SHA-256 entre exploraciones, y distingue lo añadido, lo borrado y lo modificado. Los ficheros se leen en bloques de 64 KB para trabajar con archivos grandes sin cargarlos enteros en memoria.
PythonTkinterSHA-256
Código y documentación
Todos mis proyectos publicados están en github.com/Santiago-off.