NetGest

Full-Stack DeveloperDesarrollador Full-Stack2024 - Present
AdonisJSReactPostgreSQLDockerNginx

NetGest is the operations platform I built for a WISP (Wireless Internet Service Provider) in Venezuela. It replaces spreadsheets, disconnected tools, and manual processes with a single system that covers the full operational cycle.

NetGest operations dashboard showing KPIs, recent activity feed, and network health
Executive dashboard: active clients, open tickets, overdue invoices, and real-time network health
Platform domains
NetGest
├── Customersplans, installations, service lifecycle
├── Billinginvoices, payments, aging reports, analytics
├── Ticketssupport cases, escalation, SLA tracking
├── Visitsfield dispatch, OSRM routing, technician agenda
├── Monitoringmulti-protocol probes, topology, alerts, SSE
├── ReportsKPIs, billing analytics, performance targets
├── IAM7 roles, granular permissions, audit log
└── Systemnotifications, email, PDF pipeline, scheduler

Why custom

Everything in a WISP is connected. A customer has service plans tied to physical installations, which connect to network devices at specific sites. When a device goes down, the affected customers should be visible. When a ticket escalates, it becomes a field visit that needs scheduling and routing. When an invoice is generated, it pulls from the plan pricing. Off-the-shelf CRMs can't model these relationships well.

Architecture

The system is a monorepo with npm workspaces: a standalone AdonisJS API, a React SPA, and a shared contracts package that enforces permission names and types across both sides.

Billing

The billing system runs on a scheduler. Invoices generate automatically based on active plans, overdue accounts get flagged, and the analytics workspace breaks it down:

  • Aging and risk -- debt by age bucket, overdue amounts, average delinquency days
  • DSO and trends -- Days Sales Outstanding tracking over time
  • Collection performance -- payment behavior, collection rates
  • Invoice lifecycle -- status distribution, processing times
  • Tax breakdown and revenue mix -- by plan type and period
  • All reports export to Excel with configurable date windows
NetGest billing analytics showing aging buckets, overdue amounts, and debt distribution
Aging & risk report: debt by age bucket, average delinquency, and quick context sidebar

Support and field operations

Tickets link to customers, plans, and network nodes. They can escalate to technical visits, which feed into a dispatch system. Supervisors assign visits, and technicians see a daily agenda with an optimized route map.

NetGest ticket detail view showing customer context, status, and linked operational data
Ticket detail: support work tied back to customer, plan, and operational context

The routing is powered by OSRM running against local OpenStreetMap data -- it calculates real driving distances and ETAs between stops, not straight-line estimates.

NetGest technician agenda showing scheduled visits and route planning map
Technician agenda: assigned visits with route context for field operations

Monitoring

The monitoring subsystem tracks devices across sites using multiple protocols:

  • ICMP -- basic up/down ping checks
  • SNMP -- interface stats, bandwidth, hardware metrics
  • HTTP/API -- MikroTik router health via REST, including PPPoE session management

Devices are organized in a topology with two views: a Leaflet map showing geographic site positions, and a React Flow graph showing logical dependency chains per site. Dependency links drive alert suppression -- if an upstream device goes down, downstream alerts are suppressed to reduce noise.

Status changes push to the frontend via SSE and trigger in-app notifications.

NetGest geographic topology monitor showing network sites and live status across the service area
Topology monitor: geographic site status before drilling into a local dependency graph
NetGest site topology graph showing devices, dependency links, and live status indicators
Site topology: dependency graph with live status — a downed PTP link cascades degraded state downstream

Access control

Seven roles mapped to granular permissions: admin, tier 2 tech, field supervisor, tier 1 tech, customer service, accountant, cashier. The contracts package is the single source of truth -- permission names defined once, enforced in both API middleware and frontend route guards.

Other systems

  • Customer email -- outbound SMTP with MJML templates, sanitized HTML, delivery tracking
  • Audit log -- filterable event history with export, retention scheduling
  • PDF generation -- invoices and reports rendered
  • Notifications -- DB-backed with SSE delivery, triggered by scheduler events and operational actions
  • KPIs -- operational performance dashboard with configurable targets

NetGest es la plataforma de operaciones que construi para un WISP (Proveedor de Servicio de Internet Inalambrico) en Venezuela. Reemplaza hojas de calculo, herramientas desconectadas y procesos manuales con un unico sistema que cubre el ciclo operativo completo.

Dashboard operativo de NetGest mostrando KPIs, feed de actividad reciente y salud de red
Dashboard ejecutivo: clientes activos, tickets abiertos, facturas vencidas y salud de red en tiempo real
Dominios de la plataforma
NetGest
├── Clientesplanes, instalaciones, ciclo de vida del servicio
├── Facturacionfacturas, pagos, reportes de aging, analitica
├── Ticketscasos de soporte, escalacion, tracking de SLA
├── Visitasdespacho de campo, ruteo OSRM, agenda de tecnicos
├── Monitoreosondas multi-protocolo, topologia, alertas, SSE
├── ReportesKPIs, analitica de facturacion, metas de rendimiento
├── IAM7 roles, permisos granulares, log de auditoria
└── Sistemanotificaciones, email, pipeline PDF, scheduler

Por que custom

Todo en un WISP esta conectado. Un cliente tiene planes de servicio ligados a instalaciones fisicas, que se conectan a dispositivos de red en sitios especificos. Cuando un dispositivo se cae, los clientes afectados deberian ser visibles. Cuando un ticket escala, se convierte en una visita de campo que necesita programacion y ruteo. Cuando se genera una factura, tira del pricing del plan. Los CRMs estandar no pueden modelar estas relaciones bien.

Arquitectura

El sistema es un monorepo con npm workspaces: una API standalone en AdonisJS, un SPA en React, y un paquete de contratos compartido que fuerza nombres de permisos y tipos en ambos lados.

Facturacion

El sistema de facturacion corre con un scheduler. Las facturas se generan automaticamente basadas en planes activos, las cuentas vencidas se marcan, y el workspace de analitica lo desglosa:

  • Aging y riesgo -- deuda por bucket de antiguedad, montos vencidos, dias promedio de morosidad
  • DSO y tendencias -- tracking de Days Sales Outstanding en el tiempo
  • Rendimiento de cobranza -- comportamiento de pago, tasas de recaudo
  • Ciclo de vida de facturas -- distribucion de estados, tiempos de procesamiento
  • Desglose fiscal y mix de ingresos -- por tipo de plan y periodo
  • Todos los reportes exportan a Excel con ventanas de fecha configurables
Analitica de facturacion NetGest mostrando buckets de aging, montos vencidos y distribucion de deuda
Reporte de aging y riesgo: deuda por bucket de antiguedad, morosidad promedio y sidebar de contexto rapido

Soporte y operaciones de campo

Los tickets se vinculan a clientes, planes y nodos de red. Pueden escalar a visitas tecnicas, que alimentan un sistema de despacho. Los supervisores asignan visitas, y los tecnicos ven una agenda diaria con un mapa de ruta optimizada.

Detalle de ticket en NetGest mostrando contexto del cliente, estado y datos operativos vinculados
Detalle de ticket: soporte conectado al contexto de cliente, plan y operacion

El ruteo funciona con OSRM corriendo contra datos locales de OpenStreetMap -- calcula distancias reales de manejo y ETAs entre paradas, no estimaciones en linea recta.

Agenda de tecnico en NetGest mostrando visitas programadas y mapa de ruteo
Agenda de tecnico: visitas asignadas con contexto de ruta para operaciones de campo

Monitoreo

El subsistema de monitoreo rastrea dispositivos a traves de sitios usando multiples protocolos:

  • ICMP -- chequeos basicos de ping up/down
  • SNMP -- stats de interfaz, ancho de banda, metricas de hardware
  • HTTP/API -- salud de routers MikroTik via REST, incluyendo gestion de sesiones PPPoE

Los dispositivos se organizan en una topologia con dos vistas: un mapa Leaflet mostrando posiciones geograficas de sitios, y un grafo React Flow mostrando cadenas de dependencia logica por sitio. Los enlaces de dependencia controlan la supresion de alertas -- si un dispositivo upstream se cae, las alertas downstream se suprimen para reducir ruido.

Los cambios de estado se envian al frontend via SSE y disparan notificaciones in-app.

Monitor geografico de topologia en NetGest mostrando sitios de red y estado en vivo en el area de servicio
Monitor de topologia: estado geografico de sitios antes de entrar al grafo local de dependencias
Grafo de topologia de sitio NetGest mostrando dispositivos, enlaces de dependencia e indicadores de estado en vivo
Topologia de sitio: grafo de dependencia con estado en vivo — un enlace PTP caido propaga estado degradado downstream

Control de acceso

Siete roles mapeados a permisos granulares: admin, tecnico tier 2, supervisor de campo, tecnico tier 1, atencion al cliente, contador, cajero. El paquete de contratos es la unica fuente de verdad -- nombres de permisos definidos una vez, aplicados tanto en middleware del API como en guards de rutas del frontend.

Otros sistemas

  • Email a clientes -- SMTP saliente con templates MJML, HTML sanitizado, tracking de entrega
  • Log de auditoria -- historial de eventos filtrable con exportacion, programacion de retencion
  • Generacion de PDF -- facturas y reportes renderizados
  • Notificaciones -- respaldadas en DB con entrega SSE, disparadas por eventos del scheduler y acciones operacionales
  • KPIs -- dashboard de rendimiento operacional con metas configurables