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
├── Customers ─── plans, installations, service lifecycle
├── Billing ───── invoices, payments, aging reports, analytics
├── Tickets ───── support cases, escalation, SLA tracking
├── Visits ────── field dispatch, OSRM routing, technician agenda
├── Monitoring ── multi-protocol probes, topology, alerts, SSE
├── Reports ───── KPIs, billing analytics, performance targets
├── IAM ───────── 7 roles, granular permissions, audit log
└── System ────── notifications, 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.
Docker Compose
├── api ── AdonisJS 6, Lucid ORM, PostgreSQL
├── scheduler ── separate Adonis process for cron jobs
├── web ── React 19, Vite 7, TanStack (Router/Query/Table/Form)
├── postgres ── PostgreSQL 16
├── osrm ── OpenStreetMap routing engine (Venezuela extract)
├── mailpit ── SMTP for dev email
└── browserless ── headless Chrome for PDF generation
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

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.
The routing is powered by OSRM running against local OpenStreetMap data -- it calculates real driving distances and ETAs between stops, not straight-line estimates.
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.

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.

NetGest
├── Clientes ──── planes, instalaciones, ciclo de vida del servicio
├── Facturacion ─ facturas, pagos, reportes de aging, analitica
├── Tickets ───── casos de soporte, escalacion, tracking de SLA
├── Visitas ───── despacho de campo, ruteo OSRM, agenda de tecnicos
├── Monitoreo ─── sondas multi-protocolo, topologia, alertas, SSE
├── Reportes ──── KPIs, analitica de facturacion, metas de rendimiento
├── IAM ───────── 7 roles, permisos granulares, log de auditoria
└── Sistema ───── notificaciones, 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.
Docker Compose
├── api ── AdonisJS 6, Lucid ORM, PostgreSQL
├── scheduler ── proceso Adonis separado para cron jobs
├── web ── React 19, Vite 7, TanStack (Router/Query/Table/Form)
├── postgres ── PostgreSQL 16
├── osrm ── motor de ruteo OpenStreetMap (extracto de Venezuela)
├── mailpit ── SMTP para email en desarrollo
└── browserless ── headless Chrome para generacion de PDF
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

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.
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.
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.

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