🚀 Proyectos
Organizador de archivos con OCR
Herramienta de clasificación documental automática para un Synology NAS en red local. Lee el contenido de PDFs nativos con pdfplumber, PDFs escaneados con Tesseract OCR y archivos Word con python-docx, luego mueve cada archivo a la carpeta correcta del cliente.
- Fuzzy matching para detectar variantes de nombres de clientes: maneja typos, segundos nombres y abreviaciones sin configuración manual.
- Detección de tipos de documento por palabras clave configurables en JSON: cédulas de identidad, mapas catastrales, licencias de construcción, expedientes ambientales.
- Estructura de carpetas automática por cliente → tipo de documento → año.
- Log de operaciones con timestamp: qué se movió, dónde y por qué.
- GUI planificada en
tkintercon barra de progreso, preview de clasificación antes de ejecutar y selección de carpeta destino.
Conversor RINEX → CSV (Pix4D GCP)
Script para el workflow de fotogrametría con drones: convierte archivos RINEX de receptores GNSS al formato CSV que Pix4D acepta como Ground Control Points. El problema original era que el software del receptor exportaba columnas extra incompatibles y los nombres de puntos no cumplían el formato de Pix4D.
- Exporta únicamente coordenadas en UTM zona 21S (sistema de referencia estándar para Paraguay).
- Normaliza los nombres de los puntos GCP al formato esperado por Pix4D.
- Elimina columnas no utilizadas: DOP, cantidad de satélites, señal, timestamps de observación.
- Detecta y avisa sobre duplicados de puntos y campos vacíos antes de exportar.
- Validación de campos requeridos: nombre del punto, easting, northing y altitud elipsoidal.
Infraestructura local para consultora
Sistema de gestión interna corriendo en un servidor home en red local. Reemplazó una mezcla de planillas de Excel y archivos sueltos que se perdían y pisaban entre sí. Accesible desde cualquier PC de la oficina sin necesidad de internet.
- Stack: Apache + PHP + MariaDB sobre Linux en hardware reciclado de oficina.
- Base de datos relacional: clientes, servicios contratados, facturas, inventario de equipos y empleados con sus roles.
- Panel de administración en PHP: CRUD de clientes y servicios, generación de remisiones, búsqueda por nombre o fecha.
- Backups automáticos nocturnos al NAS con rotación semanal: si el servidor explota, se pierde máximo un día de trabajo.
- El Synology NAS actúa como almacenamiento secundario y punto de acceso para los expedientes del organizador OCR.
Juego 2D sandbox zombie
Juego top-down singleplayer de supervivencia y sandbox inspirado en Core Keeper y Project Zomboid. El objetivo es construir una base, conseguir recursos y sobrevivir mientras los zombies se vuelven más peligrosos de noche. En desarrollo activo.
- Motor: Unity 2022 LTS con C#. Renderizado 2D con tilemaps y sprites pixelados.
- Sistema de inventario con slots drag & drop y stacking de ítems.
- Crafting con recetas configurables desde ScriptableObjects: no hay código hard-coded para nuevas recetas.
- IA de zombies con pathfinding usando NavMesh 2D: rodean obstáculos, persiguen al jugador por sonido y visión.
- Sistema de día/noche: de día los zombies son lentos y pocos, de noche spawnean más y se vuelven agresivos.
- Generación procedural de mapa por chunks con semilla: ciudad, bosque, ruinas, cada run es diferente.
- Pendiente: co-op local para 2 jugadores, jefe final por bioma, sistema de construcción de base.
Esta página — Guwusoft.com
CV interactivo y sitio personal construido desde cero en HTML5, CSS3 y JavaScript vanilla, sin frameworks ni dependencias. La estética mezcla Windows XP con el caos visual de Geocities era Y2K: todo en naranja y negro con transparencias glass.
- Sistema de ventanas tipo WinXP: cada sección es una ventana con botones Minimizar / Maximizar / Cerrar. El maximize mueve el card al body con JS para evitar el bug de
position:fixeddentro desticky+overflow:auto. - Taskbar fija con menú Start funcional: las ventanas minimizadas aparecen como botones, las cerradas quedan en "Restaurar ventanas".
- GuWinAmp: player de audio custom con Web Audio API. Visualizador de espectro en
<canvas>, soporte de archivos locales sin servidor, StereoPannerNode para balance. - Guestbook en tiempo real con Firebase Firestore + Auth anónima: antispam por tiempo, honeypot, límite de 25 mensajes.
- Widget de clima dual: OpenWeatherMap con fallback automático a Open-Meteo si falla el primer API.
- Monitor de servicios simulado con log exportable y alarma sonora cuando hay FAILs.
- CSS glass:
backdrop-filteren header y footer, star field tileado, wallpaper confilter:brightness(.28).
Conversor Lat/Lon ⇄ UTM
Calculadora web para conversión bidireccional entre coordenadas geográficas (WGS84) y UTM. Nació de la necesidad de convertir coordenadas rápido en campo sin depender de herramientas online que fallan con mala señal.
- Implementado en JavaScript puro, sin dependencias externas: funciona offline si se guarda la página.
- Conversión bidireccional: Lat/Lon → UTM y UTM → Lat/Lon en el mismo formulario.
- Detecta la zona UTM automáticamente a partir de la longitud, o permite ingresarla manualmente.
- Validación de rangos: latitud −90/+90, longitud −180/+180, zonas UTM 1–60, hemisferio N/S.
- Botón de copiar resultado al portapapeles en un clic.
Simulador de Inundaciones — Pix4D Flood Analyzer
Herramienta de escritorio para simular escenarios de inundación sobre modelos de elevación generados en Pix4D. Toma el DSM (superficie) y DTM (terreno) como entrada y calcula la extensión, profundidad y riesgo de inundación, ya sea por nivel de agua absoluto o por precipitación en mm. Pensado para uso en consultoría ambiental e ingeniería hidráulica.
- Dos modos de procesamiento: nativo (carga el raster completo en RAM si entra) y tileado (divide en tiles para proyectos imposibles de cargar completos, sin límite práctico de tamaño).
- Hidrología completa: Priority Flood (Wang & Liu 2006) para relleno de sumideros, Flat Routing (Barnes 2014) para zonas planas, dirección de flujo D8 vectorizada, acumulación por BFS topológico.
- Análisis de canalización: orden de Strahler, fórmula de Manning para dimensionado de sección hidráulica (trapezoidal/rectangular), exportación de red de drenaje a Shapefile.
- Conversión lluvia→nivel: calcula el nivel de agua equivalente a una precipitación en mm sobre la cuenca analizada.
- 9 figuras de salida en matplotlib: mapa de inundación, profundidades, riesgo acumulado, red de drenaje, perfil transversal, curva de área inundada, comparativa de escenarios.
- GIF animado de progresión de la inundación con interpolación entre escenarios.
- GUI oscura con CustomTkinter, procesamiento en hilo separado para no bloquear la interfaz, barra de progreso y log en tiempo real.
HR Control — Gestión de Consultora Ambiental
Web app de gestión interna para la consultora ambiental. Reemplaza el seguimiento manual de empleados, proyectos y pagos. Estética Monday/Jira: sidebar oscura, contenido claro, pensado para uso diario de admin y coordinadores. Moneda en Guaraníes (Gs.).
- Control de roles: admin ve todo, coordinador gestiona sus proyectos y equipo, empleado ve sus propios proyectos, pagos y licencias.
- Módulo de asistencia con check-in por código QR y validación de geofencing GPS (fórmula haversine) para verificar que el empleado está en la ubicación correcta.
- Tipos de proyecto ambientales con precio base configurable por tipo: AA (Auditoría Ambiental), EIA (Estudio de Impacto Ambiental), PGA, DIA, PMA, RAP.
- Módulo de pagos y multas: registro de anticipos, deducciones y descuentos. Liquidación mensual automática con cálculo de sueldo neto.
- Viáticos: registro de gastos de campo con fecha, categoría e importe en Gs.
- Licencias: vacaciones, enfermedad, personal, maternidad/paternidad, estudio y duelo — con días máximos por tipo.
- Reportes exportables a XLSX con SheetJS. Gráficos con recharts: distribución de empleados por proyecto, evolución de facturación, estado de servicios.
- Notas por proyecto: cada proyecto tiene su propio feed de comentarios con historial.
IRON LOG — Gym Tracker
Aplicación web de una sola página para registro y seguimiento de entrenamientos. Sin backend, sin cuenta, sin instalación — todo vive en el browser. Diseño oscuro con acento naranja-rojo, tipografía Bebas Neue para los números, pensado para usarse desde el celular en el gimnasio.
- Registro de sesiones: ejercicio, series, repeticiones y peso. Calcula el volumen total (kg × reps) por sesión automáticamente.
- Biblioteca de ejercicios personalizable por grupo muscular. Detección automática de Personal Records (PR) al registrar una nueva serie.
- Historial completo de entrenamientos con búsqueda y filtro por fecha o ejercicio.
- Vista de progreso con gráficos Chart.js: evolución del peso máximo por ejercicio, volumen semanal, frecuencia de entrenamiento.
- Streak semanal: calcula cuántas semanas consecutivas se entrenó al menos una vez.
- Soporte de unidades kg/lb con conversión automática en toda la interfaz.
- Persistencia en
localStorage: los datos sobreviven cierres del browser sin necesidad de servidor.
Sistema de Pedidos para Pizzería
POS (punto de venta) web para una pizzería. Single file HTML/JS sin backend — funciona en cualquier tablet o computadora del local sin instalar nada. Diseño oscuro con tipografía Playfair Display, paleta roja y dorada acorde a la marca.
- Menú de pizzas con dos talles (Grande / Mediana) y sección de bebidas. Las cantidades se incrementan/decrementan directamente desde la comanda sin rehacer el pedido.
- Mitad y mitad: combiná dos pizzas distintas en un solo pedido. El precio se calcula automáticamente como promedio de ambas.
- Modos de entrega: salón (con número de mesa), para llevar y delivery con cálculo de precio por km ingresado en el header.
- Pago en efectivo o transferencia con desglose de vuelto automático para efectivo.
- Campo de RUC/CI del cliente para facturación.
- Observaciones por ítem: especificaciones de cocción, ingredientes a quitar, etc.
- Impresión de ticket de comanda directo desde el browser (
window.print()) con diseño de ticket real. - Historial de pedidos del día con modal de detalle, edición posterior de ítems y exportación a Excel con SheetJS.
Equipment Checkout — Préstamo de Equipos
Sistema de control de préstamos de equipos de campo para la consultora. Registra cada retiro con evidencia digital irrebatible: selfie del empleado, fotos del estado del equipo y coordenadas GPS del momento exacto. Pensado para un inventario de alto valor (drones, estaciones totales, GPS RTK, Starlink).
- Inventario predefinido con número de serie y valor comercial: DJI Mavic 3 Pro, DJI Mini 4 Pro, Dell XPS 15, MacBook Pro M3, Starlink Kit v3, Estación Total Leica, GPS RTK Trimble, Sony A7R V.
- Flujo de checkout paso a paso: selección de equipo → datos del empleado → T&C con scroll obligatorio (no se puede aceptar sin leerlos) → selfie en cámara viva → geolocalización GPS → fotos del estado del equipo → confirmación con ID único.
- T&C con multas hardcodeadas: 100% del costo de reparación por daños, 100% del valor comercial si se pierde, 5% del valor por cada día de retraso en la devolución.
- La selfie y las coordenadas GPS son prueba legal del retiro según los propios T&C del sistema.
- Filtrado de equipos por categoría. Cada checkout genera un ID único con timestamp para seguimiento.
PokeTracker — Binder de Cartas por Pokédex
Aplicación web para marcar y trackear cartas del TCG de Pokémon organizadas por número de Pokédex, como se guardan en un binder físico. Permite saber de un vistazo qué Pokémon ya tenés cubiertos y cuáles te faltan completar.
- Grilla de los 1025 Pokémon ordenados por número de Pokédex con sprites oficiales (tambien megas, formas regionales, etc).
- Marcado de cartas por clic: disponible, en progreso, completo.
- Persistencia en
localStorage: el estado del binder se mantiene entre sesiones sin servidor. - Contador de progreso total y por generación.
- Filtros para todo lo que se me ocurrio jeje.
📄 CV
Habilidades técnicas
Lenguajes: Python, JavaScript, TypeScript, PHP, SQL, C#, HTML5, CSS3.
GIS y fotogrametría: QGIS, ArcGIS, Pix4D (ortomosaicos, DSM/DTM, GCP), procesamiento de vuelos con drones, conversión de sistemas de referencia (WGS84, UTM).
Infraestructura: Synology NAS, Apache, MariaDB/MySQL, Linux básico, backups automatizados, redes LAN.
Web y APIs: HTML/CSS avanzado (Grid, Flex, animaciones, backdrop-filter), JavaScript vanilla, Firebase (Firestore, Auth), Web Audio API, OpenWeatherMap API.
Game dev: Unity 2022 LTS, C#, NavMesh 2D, generación procedural, ScriptableObjects.
Herramientas: Git, VS Code, Tesseract OCR, pdfplumber, python-docx, tkinter.
Experiencia
Consultor IT — Consultoría ambiental (2023 – 2026)
Soporte técnico y automatización de workflows de fotogrametría aérea con drones. Procesamiento de vuelos en Pix4D, generación de ortomosaicos, modelos de elevación (DSM/DTM) y nubes de puntos. Manejo de GCP con receptores GNSS y conversión de formatos (RINEX→CSV). Análisis espacial y cartografía en QGIS y ArcGIS para informes de impacto ambiental.
Desarrollo de herramientas internas (2024 – 2026)
Diseño e implementación de soluciones para la gestión de la consultora: sistema OCR de clasificación documental, base de datos de clientes y servicios en MariaDB con panel PHP, servidor local con backups automáticos al NAS, conversor RINEX→Pix4D para el workflow de campo.
Educación
— Bachiller en Ciencias Sociales (graduado).
— Estudiante de Comunicación Audiovisual (en curso).
— Estudiante de Informática (en curso).
— Cursos de GIS: QGIS aplicado, fotogrametría con drones, análisis espacial y cartografía.
— Cursos de programación: Python, JavaScript, bases de datos relacionales, Unity/C#.
📝 Notas
- [2026-05-06] Fix botones duplicados en
STATUS@GUWUSOFT: el CSS del hacker card teníacontent:"─ □ ✕"en::afterque coexistía con los botones reales del JS. Se suprimió el pseudo-elemento. - [2026-05-06] Fix sidebar maximizada:
position:fixeddentro desticky+overflow:autose posiciona relativo al padre en Chrome/Safari. Solución: mover el card al<body>con JS al maximizar y devolverlo coninsertBeforeal restaurar. - [2026-05-06] Sistema de ventanas funcional: botones Minimizar / Maximizar / Cerrar inyectados por el
WindowManageren todos los.card. Minimizar envía a la taskbar, cerrar aparece en el Start menu bajo "Restaurar ventanas". Escape cierra cualquier maximizada. - [2026-05-06] GuWinAmp: player de audio custom. Web Audio API con
AnalyserNodepara el visualizador de espectro en<canvas>.StereoPannerNodepara el control de balance. Carga archivos locales conURL.createObjectURL(), sin servidor. Playlist en memoria. - [2026-05-06] Start menu funcional con JS: toggle, cierre al hacer click afuera, lista dinámica de ventanas cerradas para restaurar, franja lateral estilo XP.
- [2026-05-06] Rediseño completo a estética Windows XP + Geocities Y2K: titlebar con gradiente Luna naranja, botones pearl XP,
backdrop-filter:bluren header y footer, star field CSS tileado, wallpaper de ciudad oscurecido confilter:brightness(.28), taskbar fija al fondo. - [2026-05-06] Guestbook movido de
main.grida la sidebar izquierda, debajo del widget de Contacto. - [2026-05-06] Logo GUWUSOFT y botones de enlaces rápidos pasaron de naranja brillante a glass oscuro con glow, para mejor legibilidad sobre el wallpaper.
- [2025-09-03] Guestbook público con Firebase Firestore + Auth anónima: reglas seguras, feed en vivo, límite de 25 mensajes, scroll interno, honeypot y antispam por tiempo, alertas de estado.
- [2025-09-03] Eliminé la sección
Ahoray el link del menú. Contacto movido a sidebar izquierda. - [2025-09-03] Menú activo ajustado para ignorar
#contactoal scrollear. Status diferenciado: Hoy (cian), Semana (naranja), Mes (magenta). - [2025-09-03] Widget clima con botón °C/°F y fallback automático a Open-Meteo si falla OpenWeatherMap.
- [2025-09-03] Ajustes de layout desktop: sidebars sticky elásticas, marquee con velocidad controlada por
scrollWidth. - [2025-08-29] Links (correo, Twitter, GitHub) vuelven a color cian. Sidebar y footer responsive, ya no se superponen.
- [2025-08-28] Discord escalado para verse completo. Estética del reloj mejorada con fuente
VT323. - [2025-08-27] Cursor personalizado eliminado: se usa el del sistema. Sección Proyectos re-estilizada con accordions.
- [2025-06-24] Publiqué el conversor Lat/Lon ⇄ UTM en JS puro. Funciona offline.
- [2025-06-19] Organizador OCR: clasificación con fuzzy matching, soporte PDF nativo (pdfplumber), escaneados (Tesseract) y Word (python-docx). Estructura de carpetas por cliente y tipo.
┌─[ STATUS@GUWUSOFT ]─[ services ]
| Service | Status | Latency |
|---|---|---|
| guwusoft.com | OK | — |
| API (interno) | OK | — |
| NAS / Backups | OK | — |
| DB Clientes | OK | — |
| OK | — | |
| Bot | FAIL | — |