{
  "generatedAt": "2026-08-24T11:43:41.239Z",
  "meta": {
    "name": "José Fernando",
    "shortName": "José Fernando",
    "brand": "jfernando",
    "role": "Desenvolvedor Fullstack",
    "location": "São Paulo, Brasil",
    "email": "josefernandogmarcial@gmail.com",
    "linkedin": "https://linkedin.com/in/jfernandodev",
    "linkedinLabel": "linkedin.com/in/jfernandodev",
    "github": "https://github.com/xinnaider",
    "githubLabel": "github.com/xinnaider",
    "site": "https://jfernando.dev",
    "siteLabel": "jfernando.dev"
  },
  "hero": {
    "name": "José Fernando · São Paulo, Brasil",
    "title": "Desenvolvedor Fullstack",
    "lede": "Projetei microsserviços que monitoram mais de 8.000 dispositivos IoT (~3,8 milhões de eventos por dia). Na Eficiência Fiscal, automatizei a captura de milhares de notas por mês, operei infraestrutura em AWS e Azure e migrei cerca de 4 TB de PostgreSQL com downtime curto.",
    "meta": "São Paulo, Brasil"
  },
  "workCases": [
    {
      "slug": "iot-mesh",
      "num": "01",
      "title": "Mesh de microsserviços para monitoramento IoT",
      "company": "NEPEN",
      "period": "2025",
      "role": "Desenvolvedor Fullstack",
      "summary": "Microsserviços Java/Spring Cloud e .NET com Eureka, API Gateway e RabbitMQ. Telemetria IoT (SNMP, LwM2M, SOAP) em 8.000+ dispositivos, ~3,8M eventos/dia.",
      "stack": [
        "Java 17",
        "Spring Boot",
        "Spring Cloud",
        ".NET",
        "Vue 3",
        "Vuetify",
        "RabbitMQ",
        "Eureka",
        "API Gateway",
        "JWT",
        "SNMP",
        "LwM2M",
        "SOAP",
        "PostgreSQL",
        "MongoDB",
        "MySQL",
        "Oracle",
        "Grafana"
      ],
      "tags": [
        "Spring Cloud",
        ".NET",
        "RabbitMQ",
        "Eureka",
        "LwM2M",
        "Vue 3"
      ],
      "facts": [
        {
          "k": "Dispositivos",
          "v": "8.000+"
        },
        {
          "k": "Eventos/dia",
          "v": "~3,8M"
        },
        {
          "k": "Bancos em produção",
          "v": "PostgreSQL · MongoDB · MySQL · Oracle"
        }
      ],
      "chapters": [
        {
          "title": "Contexto",
          "body": [
            "O Grupo NEPEN é uma ICT de monitoramento e gestão de dispositivos IoT. O sistema sob minha responsabilidade processa telemetria de mais de 8.000 dispositivos em campo, cerca de 3,8 milhões de eventos por dia.",
            "Como pleno, decidia arquitetura e stack (com aprovação), respondia a incidentes em produção e orientava juniores."
          ]
        },
        {
          "title": "Restrições",
          "body": [
            "Os dispositivos de campo usam protocolos heterogêneos (SNMP, LwM2M e SOAP), o que exige integração diversificada sem comprometer a disponibilidade do conjunto.",
            "O volume é constante: cerca de 480 mensagens por dispositivo por dia. Coleta e processamento precisavam ser desacoplados para que a queda de um serviço não interrompesse a ingestão."
          ]
        },
        {
          "title": "Arquitetura",
          "body": [
            "Microsserviços em Spring Boot e .NET, coordenados por Eureka e API Gateway, com autenticação via JWT e Basic Auth. Mantinha um BFF (Backend for Frontend) que serve diferentes clientes sem expor o backend completo.",
            "RabbitMQ no centro da integração: ingestão publica na fila, processamento consome de forma assíncrona. Desacoplamento, retry com backoff e dead-letter para falhas definitivas."
          ]
        },
        {
          "title": "Execução",
          "body": [
            "Projetei o pipeline de ingestão que suporta ~3,8M de eventos/dia, com adaptadores para SNMP, LwM2M e SOAP; o RabbitMQ absorve os picos.",
            "Implementei testes unitários, de integração e E2E no CI antes de cada push. Serviços críticos passaram a mudar sem medo de regressão silenciosa.",
            "Atendimento direto a clientes: alinhamento de requisitos, validação de soluções e definição de escopo realista."
          ]
        },
        {
          "title": "Operação",
          "body": [
            "Resposta a incidentes em produção com observabilidade via Grafana, identificando gargalos entre PostgreSQL, MongoDB, MySQL e Oracle.",
            "Orientação dos juniores na prática: quebra de tarefas, condução da sprint e suporte técnico."
          ]
        },
        {
          "title": "Resultado",
          "body": [
            "8.000+ dispositivos monitorados em tempo real. O pipeline processa ~3,8M de eventos/dia e segura pico sem perda de dados."
          ]
        }
      ]
    },
    {
      "slug": "db-migration",
      "num": "02",
      "title": "Migração de banco de ~4TB",
      "company": "Eficiência Fiscal",
      "period": "2024",
      "role": "Desenvolvedor Fullstack",
      "summary": "PostgreSQL de ~4 TB do AWS RDS para Azure. Carga inicial, sincronização incremental e cutover em janela curta.",
      "stack": [
        "PostgreSQL",
        "AWS RDS",
        "Azure",
        "Docker",
        "CI/CD"
      ],
      "tags": [
        "PostgreSQL",
        "AWS",
        "Azure",
        "Migração"
      ],
      "facts": [
        {
          "k": "Volume",
          "v": "~4 TB"
        },
        {
          "k": "Origem",
          "v": "AWS RDS"
        },
        {
          "k": "Destino",
          "v": "Azure"
        }
      ],
      "chapters": [
        {
          "title": "Contexto",
          "body": [
            "Na Eficiência Fiscal, plataforma de automação fiscal para médias e grandes empresas, o banco PostgreSQL rodava no AWS RDS e a empresa decidiu migrar para a Azure. Quase 4TB de dados.",
            "Liderei a migração completa."
          ]
        },
        {
          "title": "Restrições",
          "body": [
            "Os clientes utilizam a plataforma diariamente para emitir e validar notas fiscais. Interrupções longas significam perda de clientes."
          ]
        },
        {
          "title": "Arquitetura",
          "body": [
            "Migração em duas fases: carga inicial da maior parte dos dados, seguida de sincronização incremental para capturar as alterações ocorridas durante a carga."
          ]
        },
        {
          "title": "Execução",
          "body": [
            "Elaborei o plano e executei em produção: validação contínua durante a sincronização e cutover em janela curta, fora do horário comercial."
          ]
        },
        {
          "title": "Resultado",
          "body": [
            "~4 TB migrados. Cutover fora do horário comercial; nenhum cliente reportou interrupção."
          ]
        }
      ]
    },
    {
      "slug": "fiscal-scraping",
      "num": "03",
      "title": "Pipeline de scraping fiscal em escala",
      "company": "Eficiência Fiscal",
      "period": "2023 / 2025",
      "role": "Desenvolvedor Fullstack",
      "summary": "Captura de NF-e, NFS-e e NFC-e em escala: desktop Electron/Java + pipeline PHP/Python com filas, SOAP e milhares de documentos/mês.",
      "stack": [
        "Laravel",
        "PHP",
        "Python",
        "Electron",
        "Java",
        "Node.js",
        "SOAP",
        "PostgreSQL",
        "AWS",
        "Docker"
      ],
      "tags": [
        "Electron",
        "Scraping",
        "SOAP",
        "Filas",
        "Laravel"
      ],
      "facts": [
        {
          "k": "Documentos/mês",
          "v": "milhares"
        },
        {
          "k": "Acumulado",
          "v": "1.000.000+"
        },
        {
          "k": "Tipos",
          "v": "NF-e · NFS-e · NFC-e"
        }
      ],
      "chapters": [
        {
          "title": "Contexto",
          "body": [
            "Cada nota fiscal no Brasil tem um caminho próprio: a NF-e é nacional, em um único portal; a NFS-e é municipal, com um portal por cidade, cada um com regras e formatos diferentes. Na Eficiência Fiscal, automatizei a captura de NF-e, NFS-e e NFC-e diretamente da nuvem para o computador do cliente: milhares de documentos por mês."
          ]
        },
        {
          "title": "Arquitetura",
          "body": [
            "Duas frentes: desktop e servidor. Aplicações em Electron e Java fazem download de documentos fiscais e raspagem de certidões. No servidor, pipeline em PHP e Python orquestrado por filas: retry, idempotência e observabilidade ponta a ponta."
          ]
        },
        {
          "title": "Execução",
          "body": [
            "Construí a suíte de testes da plataforma do zero. Antes disso o time não tinha padrão de qualidade definido.",
            "Os portais alteram layout sem aviso. Retry absorvia falhas de rede; idempotência evitava duplicação de documentos na base."
          ]
        },
        {
          "title": "Resultado",
          "body": [
            "1.000.000+ documentos fiscais no acumulado. O pipeline aguenta mudança de layout nos portais com pouca intervenção manual."
          ]
        }
      ]
    }
  ],
  "sideProjects": [
    {
      "slug": "orbit",
      "num": "01",
      "title": "Orbit",
      "domain": "orbit.jfernando.dev",
      "url": "https://orbit.jfernando.dev/",
      "description": "App desktop multiplataforma para rodar Claude Code, Codex e OpenCode lado a lado: painéis, custo, tool calls, worktrees e MCP embutido.",
      "stack": [
        "Tauri",
        "SvelteKit",
        "Rust",
        "SQLite",
        "MCP",
        "Vite"
      ],
      "tags": [
        "Tauri",
        "SvelteKit",
        "Rust",
        "SQLite",
        "MCP",
        "AI Agents",
        "MIT"
      ],
      "chapters": [
        {
          "title": "O que é",
          "body": [
            "Orbit é um dashboard desktop (Tauri + SvelteKit) que executa vários agentes de código em paralelo: Claude Code, Codex e OpenCode na mesma janela, com split panes, feed em tempo real e histórico persistente em SQLite."
          ]
        },
        {
          "title": "Problema",
          "body": [
            "Rodar vários agentes em terminais soltos espalha sessão, custo e tool calls. Sem visão unificada, fica difícil comparar modelos, inspecionar sub-agentes ou retomar conversas depois de fechar o app."
          ]
        },
        {
          "title": "Detalhes",
          "body": [
            "Inclui orquestrador MCP para um agente spawnar outros providers, monitor de sub-agentes, tracking de tokens e custo em USD, sessões SSH, git worktree por sessão e acesso web na rede local. Open source (MIT), Windows, macOS e Linux."
          ]
        }
      ]
    },
    {
      "slug": "flux",
      "num": "02",
      "title": "Flux",
      "domain": "flux.jfernando.dev",
      "url": "https://flux.jfernando.dev/",
      "description": "Service registry e load balancer em Go com Redis: heartbeat, TTL e roteamento least-loaded via redirect 302 ou reverse proxy.",
      "stack": [
        "Go",
        "Redis",
        "Docker",
        "REST"
      ],
      "tags": [
        "Go",
        "Redis",
        "Service Discovery",
        "Load Balancer",
        "Docker",
        "MIT"
      ],
      "chapters": [
        {
          "title": "O que é",
          "body": [
            "Flux registra instâncias de serviço no Redis, recebe heartbeat com carga (conexões ativas) e encaminha o cliente para o alvo saudável com menor carga. Dois modos: redirect HTTP 302 ou reverse proxy."
          ]
        },
        {
          "title": "Problema",
          "body": [
            "Microsserviços precisam de discovery e balanceamento sem YAML de infra para cada ambiente. Redirect serve rede interna; proxy cobre API pública atrás de Nginx ou Traefik com terminação HTTPS."
          ]
        },
        {
          "title": "Detalhes",
          "body": [
            "API REST para register, heartbeat, health e roteamento por nome de serviço. TTL curto no Redis remove instâncias mortas. Imagem pública no GHCR e Docker Compose para subir com Redis. Open source (MIT)."
          ]
        }
      ]
    },
    {
      "slug": "zapter",
      "num": "03",
      "title": "Zapter Financeiro",
      "domain": "financeiro.zapter.me",
      "url": "https://financeiro.zapter.me/",
      "description": "SaaS financeiro minimalista: saldo e fatura no dia a dia, multitenant com schema por tenant, web + mobile e assinatura via Stripe.",
      "stack": [
        "Bun",
        "Hono",
        "React 19",
        "Drizzle",
        "PostgreSQL",
        "Turborepo",
        "Stripe",
        "Expo"
      ],
      "tags": [
        "Bun",
        "Hono",
        "React 19",
        "Drizzle",
        "PostgreSQL",
        "Stripe",
        "Multi-tenant",
        "Expo"
      ],
      "chapters": [
        {
          "title": "O que é",
          "body": [
            "Console financeiro focado em dois números por dia (saldo e fatura), sem categorias obrigatórias nem planilha. Monorepo Turborepo com API Hono no Bun, web React 19 e app Expo."
          ]
        },
        {
          "title": "Problema",
          "body": [
            "Apps de finanças pedem categorizar cada lançamento e o hábito morre. O Zapter reduz o ritual ao mínimo e ainda cobre contas, dívidas, cofrinhos e cobranças quando precisa."
          ]
        },
        {
          "title": "Detalhes",
          "body": [
            "PostgreSQL com schema por tenant (Drizzle), filas BullMQ/Redis, OAuth Google, assinaturas Stripe (cartão + PIX), domínio tipado em packages e testes no CI. Isolamento de dados e migrações públicas/tenant separadas."
          ]
        }
      ]
    },
    {
      "slug": "interruptor",
      "num": "04",
      "title": "Interruptor",
      "domain": "interruptor.jfernando.dev",
      "url": "https://interruptor.jfernando.dev/",
      "description": "App de menu bar no macOS que corta o sinal de monitores externos por software, sem desconectar cabo, com atalho gravável.",
      "stack": [
        "Swift",
        "AppKit",
        "macOS 14+",
        "Apple Silicon"
      ],
      "tags": [
        "Swift",
        "AppKit",
        "Menu Bar",
        "macOS",
        "Apple Silicon",
        "MIT"
      ],
      "chapters": [
        {
          "title": "O que é",
          "body": [
            "Utilitário nativo na barra de menus do Mac: soft disconnect de cada monitor externo. As janelas voltam sozinhas para o notebook enquanto a tela externa fica apagada."
          ]
        },
        {
          "title": "Problema",
          "body": [
            "Desligar monitor externo costuma significar puxar cabo ou abrir Ajustes do Sistema. No uso diário (reunião, foco, bateria) isso atrasa. O Interruptor resolve com um clique ou atalho."
          ]
        },
        {
          "title": "Detalhes",
          "body": [
            "Swift puro para Apple Silicon (macOS 14+), multi-monitor, atalho padrão ⌃⌥⌘I gravável, idioma PT/EN conforme o sistema. Instalação via script ou build local. Open source (MIT)."
          ]
        }
      ]
    }
  ],
  "jobs": [
    {
      "company": "Grupo NEPEN",
      "period": "Ago 2025 / Atual · São Paulo",
      "role": "Desenvolvedor Fullstack",
      "context": "ICT de monitoramento e gestão de dispositivos IoT. Opera com 8.000+ dispositivos em campo e ~3,8M eventos/dia. Decidia arquitetura e stack (com aprovação), respondia a incidentes em produção e orientava juniores.",
      "stack": "Java 17, Spring Boot, Spring Cloud, .NET, Vue 3, Vuetify, RabbitMQ, Eureka, API Gateway, JWT, SNMP, LwM2M, SOAP, PostgreSQL, MongoDB, MySQL, Oracle, Grafana.",
      "bullets": [
        "Desenvolvi e mantive microsserviços em Spring Boot e .NET com Eureka e API Gateway, autenticação via JWT e Basic Auth, incluindo manutenção de BFF (Backend for Frontend) para diferentes clientes.",
        "Projetei o pipeline de ingestão assíncrona que processa ~3,8M de eventos/dia (8.000+ dispositivos × ~480 mensagens cada), com integração SNMP, LwM2M e SOAP e mensageria RabbitMQ entre serviços.",
        "Implementei testes unitários, de integração e E2E com execução automática no CI antes de cada push.",
        "Atendimento direto a clientes: alinhamento de requisitos, validação de soluções e definição de escopo.",
        "Orientei desenvolvedores juniores: quebra de tarefas, fluxo de sprint e suporte técnico."
      ]
    },
    {
      "company": "Eficiência Fiscal",
      "period": "Mai 2023 / Ago 2025",
      "role": "Desenvolvedor Fullstack",
      "context": "Startup de automação fiscal e tributária para empresas de médio e grande porte.",
      "stack": "Laravel, PHP, Java, Python, Node.js, Electron, PostgreSQL, AWS (EC2, S3, RDS), Azure, Docker, SOAP, Papertrail.",
      "bullets": [
        "Desenvolvi aplicações desktop em Electron e Java para download e captura de documentos fiscais (NF-e, NFS-e, NFC-e) da nuvem para o computador do cliente, além de raspagem de certidões.",
        "Construí a suíte de testes automatizados da plataforma, estabelecendo o padrão de qualidade do time.",
        "Automatizei extração de dados fiscais via web scraping e SOAP: milhares de documentos por mês.",
        "Liderei a migração de ~4 TB em PostgreSQL do AWS RDS para a Azure: carga inicial + sincronização incremental, cutover em janela curta.",
        "Gerenciei infraestrutura em produção: EC2 e S3 na AWS, VMs na Azure, containers Docker, deploy e CI/CD automatizados.",
        "Prestei suporte técnico a clientes da plataforma fiscal."
      ]
    },
    {
      "company": "PROINFE / Instituto Federal de Rondônia",
      "period": "Ago 2023 / Ago 2024 · Rondônia",
      "role": "Desenvolvedor Fullstack",
      "context": "Projeto de pesquisa e extensão do IFRO com foco em ferramentas tecnológicas para a comunidade.",
      "stack": "Next.js, Nest.js, Node.js, Docker, Material UI.",
      "bullets": [
        "Construí o frontend responsivo em Next.js + Material UI da plataforma institucional.",
        "Desenhei o backend em microsserviços Nest.js com API RESTful.",
        "Containerizei os serviços com Docker, padronizando ambientes de desenvolvimento e deploy."
      ]
    }
  ],
  "stackGroups": [
    {
      "role": "Linguagens",
      "items": "Java, PHP, TypeScript, JavaScript, Python, Go, Swift, Rust, C# (.NET), Node.js"
    },
    {
      "role": "Frameworks",
      "items": "Spring Boot, Spring Cloud, Laravel, Nest.js, Hono, Vue 3, Next.js, React 19, SvelteKit, Electron, Expo, Tauri"
    },
    {
      "role": "Backend e mensageria",
      "items": "RabbitMQ, Redis, BullMQ, REST, JWT, OAuth2, API Gateway, Eureka, SOAP"
    },
    {
      "role": "Bancos de dados",
      "items": "PostgreSQL, MongoDB, MySQL, Oracle, SQLite, Drizzle"
    },
    {
      "role": "Infra e DevOps",
      "items": "AWS (EC2, S3, RDS), Azure, Docker, Turborepo, Bun, CI/CD, Git"
    },
    {
      "role": "IoT e automação",
      "items": "SNMP, LwM2M, Web Scraping, AppKit"
    },
    {
      "role": "Observabilidade",
      "items": "Grafana, Papertrail"
    },
    {
      "role": "IA",
      "items": "Spec-driven development (SDD), Skills por projeto, ADRs"
    }
  ],
  "practices": [
    {
      "t": "Microsserviços",
      "d": "Spring Boot e .NET atrás de Eureka e API Gateway. Domínio delimitado, deploy independente por serviço."
    },
    {
      "t": "Mensageria assíncrona",
      "d": "RabbitMQ entre serviços. Retry com backoff; dead-letter para falha definitiva."
    },
    {
      "t": "IoT em escala",
      "d": "SNMP e LwM2M na telemetria de mais de 8.000 dispositivos em campo."
    },
    {
      "t": "Web scraping em produção",
      "d": "Filas, idempotência e observabilidade. Milhares de documentos fiscais por mês, mesmo quando o portal muda."
    },
    {
      "t": "Migração de banco",
      "d": "Carga em fases, validação contínua, cutover curto. ~4 TB sem impacto para o cliente."
    },
    {
      "t": "Entrega contínua",
      "d": "Docker e CI/CD com ambiente reproduzível. Deploy que não depende da máquina de quem desenvolve."
    }
  ],
  "about": [
    "Comecei aos 4 anos desmontando computadores e não parei. Autodidata: aprendo na prática, desmontando, testando e vendo o que acontece por baixo.",
    "Desenvolvedor Fullstack com passagem por automação fiscal e monitoramento IoT. Na Eficiência Fiscal, migrei cerca de 4 TB com downtime curto e automatizei a captura de milhares de documentos fiscais por mês. Na NEPEN, projetei microsserviços que monitoram mais de 8.000 dispositivos em tempo real.",
    "Antes de escolher ferramenta, leio o problema. A stack segue a restrição, não a moda."
  ],
  "education": [
    {
      "period": "2024 / prev. Jul 2027",
      "text": "Análise e Desenvolvimento de Sistemas · Universidade Cruzeiro do Sul",
      "status": "em andamento"
    },
    {
      "period": "Jan 2023 / 2024",
      "text": "Curso Superior de Tecnologia (CST), Análise e Desenvolvimento de Sistemas · IFRO",
      "status": "transferido"
    },
    {
      "period": "2020 / 2022",
      "text": "Curso Técnico Integrado em Informática · IFRO",
      "status": "concluído"
    }
  ],
  "languages": [
    {
      "name": "Português",
      "level": "nativo"
    },
    {
      "name": "Inglês",
      "level": "intermediário"
    }
  ]
}