🚀 Proyectos

Organizador de archivos con OCR
  • Python
  • Tesseract
  • pdfplumber

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 tkinter con barra de progreso, preview de clasificación antes de ejecutar y selección de carpeta destino.
Conversor RINEX → CSV (Pix4D GCP)
  • Python
  • CSV
  • GNSS

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
  • SQL
  • PHP
  • Apache
  • NAS

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
  • Unity
  • C#
  • en proceso

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
  • HTML
  • CSS
  • JS
  • Firebase

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, drag para mover y resize handles de 8 direcciones. El maximize mueve el card al <body> con JS para evitar el bug de position:fixed dentro de sticky+overflow:auto.
  • Taskbar fija con menú Start funcional: ventanas minimizadas como botones, cerradas en "Restaurar ventanas", botón "Restaurar grid" para volver todo al estado original.
  • Show Desktop (Win+D): minimiza todas las ventanas y activa el escritorio virtual con íconos arrastrables para las ventanas cerradas.
  • System tray funcional: popup de volumen sincronizado con el player, popup de red con estado online/offline/tipo/IP pública, popup de configuración (partículas, animaciones, scanlines CRT).
  • GuWinAmp: player de audio custom con Web Audio API. Visualizador de espectro en <canvas>, StereoPannerNode para balance. Maximizado usa layout CSS Grid estilo WMP-XP con portada, playlist y EQ visualizer.
  • 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. Monitor de servicios simulado con log exportable.
  • CSS glass: backdrop-filter en header y footer que se desactiva automáticamente al maximizar (body.has-maximized), star field tileado, wallpaper oscurecido.
Conversor Lat/Lon ⇄ UTM
  • HTML
  • JS

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
  • Python
  • rasterio
  • scipy
  • GIS

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
  • React
  • recharts
  • SheetJS
  • JS

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
  • HTML
  • JS
  • Chart.js

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
  • HTML
  • JS
  • SheetJS

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
  • React
  • Geolocation API
  • Camera API

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
  • HTML
  • JS

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] Íconos del escritorio arrastrables: los íconos que quedan al cerrar una ventana ahora se pueden reposicionar con drag. Usan position:absolute dentro del #desktop-layer al primer drag, con límites para no salir del área visible.
  • [2026-05-06] Fix desktop-layer z-index: el layer tenía z-index:2 (mayor que los cards en z-index:1), lo que bloqueaba los clics sobre los botones después de restaurar desde la taskbar en modo Show Desktop. Corregido a z-index:0; los íconos individuales mantienen pointer-events:auto.
  • [2026-05-06] Fix blur al maximizar: la card maximizada heredaba backdrop-filter:blur(7px) del selector .card. Se añadió backdrop-filter:none !important a .card.win-maximized y body.has-maximized en header y footer. Ahora el fondo queda completamente sólido al maximizar.
  • [2026-05-06] Redesign widget Discord: iframe removido, reemplazado por una invite card custom con conteo de usuarios online vía discord.com/api/guilds/.../widget.json y un toggle para expandir el widget completo.
  • [2026-05-06] GuWinAmp maximizado: layout CSS Grid estilo Windows Media Player XP. Portada a la izquierda, LCD + EQ + playlist a la derecha, seek bar y controles abajo a ancho completo. Row 96px fijo en el LCD para evitar saltos al cambiar de canción.
  • [2026-05-06] Íconos del escritorio: al cerrar una ventana (✕) aparece un ícono en el escritorio. Doble click reabre la ventana. Los íconos también aparecen en el menú Start bajo "Restaurar ventanas".
  • [2026-05-06] Show Desktop (Win+D): botón en la esquina de la taskbar y atajo de teclado que minimiza todas las ventanas abiertas al escritorio y activa el #desktop-layer. Segundo press restaura todo.
  • [2026-05-06] Botón "Restaurar grid" en el Start menu: devuelve todas las ventanas a su posición original en el DOM, reabre las cerradas y limpia los íconos del escritorio en un solo click.
  • [2026-05-06] Resize handles de 8 direcciones (n s e w ne nw se sw) en todos los cards flotantes. El resize usa un iframeCover invisible para no perder el cursor sobre iframes.
  • [2026-05-06] System tray con 3 popups funcionales: 🔊 Volumen (sincronizado con el slider de GuWinAmp), 📶 Red (estado online/offline, tipo de conexión, latencia, IP pública), ⚙ Configuración (partículas, animaciones, scanlines CRT, reducir movimiento). Reloj sincronizado al minuto exacto.
  • [2026-05-06] Fix botones duplicados en STATUS@GUWUSOFT: el CSS del hacker card tenía content:"─ □ ✕" en ::after que coexistía con los botones reales del JS. Se suprimió el pseudo-elemento.
  • [2026-05-06] Fix sidebar maximizada: position:fixed dentro de sticky+overflow:auto se posiciona relativo al padre en Chrome/Safari. Solución: mover el card al <body> con JS al maximizar y devolverlo con insertBefore al restaurar.
  • [2026-05-06] Sistema de ventanas funcional: botones Minimizar / Maximizar / Cerrar inyectados por el WindowManager en 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 AnalyserNode para el visualizador de espectro en <canvas>. StereoPannerNode para el control de balance. Carga archivos locales con URL.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:blur en header y footer, star field CSS tileado, wallpaper de ciudad oscurecido con filter:brightness(.28), taskbar fija al fondo.
  • [2026-05-06] Guestbook movido de main.grid a 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 Ahora y el link del menú. Contacto movido a sidebar izquierda.
  • [2025-09-03] Menú activo ajustado para ignorar #contacto al 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 ]

ServiceStatusLatency
guwusoft.com OK
API (interno) OK
NAS / Backups OK
DB Clientes OK
Mail OK
Bot FAIL
Last update: Interval: 5s

      

┌─[ DOOM.EXE ]─[ id Software · 1993 ]

▶ CLICK TO RUN DOOM.EXE WASD + Mouse · ESC pausa

🖼 Galería