{
  "version": "1.0",
  "generated": "2026-09-22T23:33:10.160Z",
  "site": {
    "title": "Rafael Pereira — Senior Software Engineer",
    "description": "Institutional portfolio and editorial hub of Rafael Pereira, senior software engineer: proof-first case studies, project artifacts, technical articles, experience narratives, resume, and contact.",
    "url": "https://imrafaeldev.site"
  },
  "documents": [
    {
      "url": "https://imrafaeldev.site",
      "title": "Rafael Pereira, engenheiro de software sênior",
      "description": "Portfólio institucional e hub editorial de Rafael Pereira. Trabalho nos pontos em que sistemas simples deixam de ser simples."
    },
    {
      "url": "https://imrafaeldev.site/articles/backend-performance-perto-dos-dados-en",
      "title": "Most backend performance problems start close to the data",
      "description": "Before adding machines, cache, or queues, measure the request's work. Execution plans, N+1, CAST on columns, and sequential loops.",
      "lastModified": "2026-09-09T17:26:35.861Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/backend-performance-perto-dos-dados-es",
      "title": "La mayoría de los problemas de performance de backend empieza cerca de los datos",
      "description": "Antes de subir máquina, caché o cola, mide el trabajo de la petición. Plan de ejecución, N+1, CAST en columna y loops secuenciales.",
      "lastModified": "2026-09-09T17:30:45.040Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/backend-performance-perto-dos-dados-pt-br",
      "title": "A maioria dos problemas de performance de backend começa perto dos dados",
      "description": "Antes de subir máquina, cache ou fila, meça o trabalho da requisição. Plano de execução, N+1, CAST em coluna e loops sequenciais.",
      "lastModified": "2026-09-09T12:38:18.834Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/derusting-logic-container-with-most-water-en",
      "title": "Derusting logic #02: Container With Most Water",
      "description": "LeetCode 11 in JavaScript: a neighbor-based attempt, the hypothesis review, and the two-pointer solution.",
      "lastModified": "2026-09-15T15:33:38.517Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/desenferrujando-logica-container-with-most-water-pt-br",
      "title": "Desenferrujando a lógica #02: Container With Most Water",
      "description": "LeetCode 11 em JavaScript: uma tentativa baseada nos vizinhos, a revisão da hipótese e a solução de dois ponteiros.",
      "lastModified": "2026-09-15T15:12:59.441Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/desenferrujando-logica-group-anagrams-en",
      "title": "Derusting logic #01: Group Anagrams",
      "description": "LeetCode 49 in Go: from sort-based keys to 26-letter counting, and the habit of keeping thinking after the code works.",
      "lastModified": "2026-09-09T17:26:13.531Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/desenferrujando-logica-group-anagrams-es",
      "title": "Desenoxidando la lógica #01: Group Anagrams",
      "description": "LeetCode 49 en Go: de la clave por sort al conteo de 26 letras, y el hábito de seguir pensando después de que el código funciona.",
      "lastModified": "2026-09-09T17:30:53.038Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/desenferrujando-logica-group-anagrams-pt-br",
      "title": "Desenferrujando a lógica #01: Group Anagrams",
      "description": "LeetCode 49 em Go: da chave por sort à contagem de 26 letras, e o hábito de continuar pensando depois que o código funciona.",
      "lastModified": "2026-09-09T12:48:19.575Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/desenoxidando-logica-container-with-most-water-es",
      "title": "Desenoxidando la lógica #02: Container With Most Water",
      "description": "LeetCode 11 en JavaScript: un intento basado en los vecinos, la revisión de la hipótesis y la solución de dos punteros.",
      "lastModified": "2026-09-15T15:33:43.841Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/design-patterns-adapter-en",
      "title": "Stop being hostage to dependencies. Say hello to the Adapter design pattern",
      "description": "With the Adapter, the service depends on a protocol and adapters translate MySQL, PostgreSQL, or mocks — without coupling business rules to the driver.",
      "lastModified": "2026-09-09T17:26:02.458Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/design-patterns-adapter-es",
      "title": "Deja de ser rehén de las dependencias. Saluda al patrón de diseño Adapter",
      "description": "Con el Adapter, el servicio depende de un protocolo y los adapters traducen MySQL, PostgreSQL o mocks — sin acoplar la regla de negocio al driver.",
      "lastModified": "2026-09-09T17:30:18.911Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/design-patterns-adapter-pt-br",
      "title": "Pare de ser refém das dependências. Diga olá ao Design Pattern Adapter",
      "description": "Com o Adapter, o serviço depende de um protocolo e os adapters traduzem MySQL, PostgreSQL ou mocks — sem acoplar a regra de negócio ao driver.",
      "lastModified": "2026-09-09T12:38:19.598Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/design-patterns-strategy-en",
      "title": "Design Patterns: Strategy",
      "description": "How the Strategy pattern encapsulates interchangeable algorithms and avoids fragile if/else chains, with a TypeScript calculator example.",
      "lastModified": "2026-09-09T17:26:07.562Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/design-patterns-strategy-es",
      "title": "Design Patterns: Strategy",
      "description": "Cómo el patrón Strategy encapsula algoritmos intercambiables y evita frágiles cadenas de if/else, con un ejemplo de calculadora en TypeScript.",
      "lastModified": "2026-09-09T17:31:01.154Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/design-patterns-strategy-pt-br",
      "title": "Design Patterns: Strategy",
      "description": "Como o padrão Strategy encapsula algoritmos intercambiáveis e evita cadeias frágeis de if/else, com um exemplo de calculadora em TypeScript.",
      "lastModified": "2026-09-09T12:38:20.623Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/go-intensive-en",
      "title": "Go intensive: concurrency, resilience, and distributed systems in 30 minutes",
      "description": "A practical Go backend review covering goroutines, context, backpressure, idempotency, Kubernetes, observability, and performance.",
      "lastModified": "2026-09-22T13:08:44.968Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/go-intensivo-es",
      "title": "Intensivo de Golang: concurrencia, resiliencia y sistemas distribuidos en 30 minutos",
      "description": "Revisión práctica de Go para backend: goroutines, context, backpressure, idempotencia, Kubernetes, observabilidad y rendimiento.",
      "lastModified": "2026-09-22T13:08:44.976Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/goroutines-vs-event-loop-en",
      "title": "Goroutines vs Event Loop: the wrong comparison between two concurrency models",
      "description": "Concurrency is not parallelism. When the Node.js Event Loop is enough for I/O and when Go goroutines fit CPU-bound load better.",
      "lastModified": "2026-09-09T17:26:23.408Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/goroutines-vs-event-loop-es",
      "title": "Goroutines vs Event Loop: la comparación equivocada entre dos modelos de concurrencia",
      "description": "Concurrencia no es paralelismo. Cuándo el Event Loop de Node.js basta para I/O y cuándo las goroutines en Go encajan mejor en carga CPU bound.",
      "lastModified": "2026-09-09T17:30:31.264Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/goroutines-vs-event-loop-pt-br",
      "title": "Goroutines vs Event Loop: a comparação errada entre dois modelos de concorrência",
      "description": "Concorrência não é paralelismo. Quando o Event Loop do Node.js basta para I/O e quando goroutines em Go encaixam melhor em carga CPU bound.",
      "lastModified": "2026-09-09T12:38:18.330Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/intensivao-go-pt-br",
      "title": "Intensivão Golang: concorrência, resiliência e sistemas distribuídos em 30 minutos",
      "description": "Revisão prática de Go para backend: goroutines, context, backpressure, idempotência, Kubernetes, observabilidade e performance.",
      "lastModified": "2026-09-22T13:08:44.957Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/intensivao-golang-avancado-pt-br",
      "title": "Intensivão Golang Avançado: aprofundamento em concorrência, arquitetura e trade-offs",
      "description": "Aprofundamento do roteiro de 30 minutos de Go: limites de concorrência, desenho de consumers, idempotência e trade-offs de produção.",
      "lastModified": "2026-09-22T19:17:26.580Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/typescript-cleanarch-en",
      "title": "TypeScript Clean Architecture: Core, Adapters, and Infra",
      "description": "A Clean Architecture derivation for TypeScript backends: Core with usecases and protocols, bidirectional Adapters, and NestJS Infra with dependency injection.",
      "lastModified": "2026-09-09T17:26:45.976Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/typescript-cleanarch-es",
      "title": "TypeScript Clean Architecture: Core, Adapters e Infra",
      "description": "Derivación de Clean Architecture para backend TypeScript: Core con usecases y protocols, Adapters bidireccionales e Infra NestJS con inyección de dependencias.",
      "lastModified": "2026-09-09T17:31:26.955Z"
    },
    {
      "url": "https://imrafaeldev.site/articles/typescript-cleanarch-pt-br",
      "title": "TypeScript Clean Architecture: Core, Adapters e Infra",
      "description": "Derivação da Clean Architecture para backend TypeScript: Core com usecases e protocols, Adapters bidirecionais e Infra NestJS com injeção de dependências.",
      "lastModified": "2026-09-09T12:38:20.624Z"
    },
    {
      "url": "https://imrafaeldev.site/artigos",
      "title": "Artigos",
      "description": "Padrões e decisões de engenharia em prosa técnica, com código."
    },
    {
      "url": "https://imrafaeldev.site/artigos/backend-performance-perto-dos-dados",
      "title": "A maioria dos problemas de performance de backend começa perto dos dados",
      "description": "Antes de subir máquina, cache ou fila, meça o trabalho da requisição. Plano de execução, N+1, CAST em coluna e loops sequenciais."
    },
    {
      "url": "https://imrafaeldev.site/artigos/desenferrujando-logica-container-with-most-water",
      "title": "Desenferrujando a lógica #02: Container With Most Water",
      "description": "LeetCode 11 em JavaScript: uma tentativa baseada nos vizinhos, a revisão da hipótese e a solução de dois ponteiros."
    },
    {
      "url": "https://imrafaeldev.site/artigos/desenferrujando-logica-group-anagrams",
      "title": "Desenferrujando a lógica #01: Group Anagrams",
      "description": "LeetCode 49 em Go: da chave por sort à contagem de 26 letras, e o hábito de continuar pensando depois que o código funciona."
    },
    {
      "url": "https://imrafaeldev.site/artigos/design-patterns-adapter",
      "title": "Pare de ser refém das dependências. Diga olá ao Design Pattern Adapter",
      "description": "Com o Adapter, o serviço depende de um protocolo e os adapters traduzem MySQL, PostgreSQL ou mocks — sem acoplar a regra de negócio ao driver."
    },
    {
      "url": "https://imrafaeldev.site/artigos/design-patterns-strategy",
      "title": "Design Patterns: Strategy",
      "description": "Como o padrão Strategy encapsula algoritmos intercambiáveis e evita cadeias frágeis de if/else, com um exemplo de calculadora em TypeScript."
    },
    {
      "url": "https://imrafaeldev.site/artigos/goroutines-vs-event-loop",
      "title": "Goroutines vs Event Loop: a comparação errada entre dois modelos de concorrência",
      "description": "Concorrência não é paralelismo. Quando o Event Loop do Node.js basta para I/O e quando goroutines em Go encaixam melhor em carga CPU bound."
    },
    {
      "url": "https://imrafaeldev.site/artigos/intensivao-go",
      "title": "Intensivão Golang: concorrência, resiliência e sistemas distribuídos em 30 minutos",
      "description": "Revisão prática de Go para backend: goroutines, context, backpressure, idempotência, Kubernetes, observabilidade e performance."
    },
    {
      "url": "https://imrafaeldev.site/artigos/intensivao-golang-avancado",
      "title": "Intensivão Golang Avançado: aprofundamento em concorrência, arquitetura e trade-offs",
      "description": "Aprofundamento do roteiro de 30 minutos de Go: limites de concorrência, desenho de consumers, idempotência e trade-offs de produção."
    },
    {
      "url": "https://imrafaeldev.site/artigos/typescript-cleanarch",
      "title": "TypeScript Clean Architecture: Core, Adapters e Infra",
      "description": "Derivação da Clean Architecture para backend TypeScript: Core com usecases e protocols, Adapters bidirecionais e Infra NestJS com injeção de dependências."
    },
    {
      "url": "https://imrafaeldev.site/cases/flapper-modernizacao-en",
      "title": "Flapper: discovering the domain before splitting the monolith",
      "description": "Incremental modernization of an undocumented PHP monolith at Flapper: database as discovery source, bounded contexts, and Strangler. The domain-based split reduced the table count by approximately 25%.",
      "lastModified": "2026-09-09T17:25:28.134Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/flapper-modernizacao-es",
      "title": "Flapper: descubrir el dominio antes de separar el monolito",
      "description": "Modernización incremental de un monolito PHP sin documentación en Flapper: base como fuente de descubrimiento, bounded contexts y Strangler. La separación por dominios redujo en aproximadamente el 25% el número de tablas.",
      "lastModified": "2026-09-09T17:29:45.858Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/flapper-modernizacao-pt-br",
      "title": "Flapper: descobrir o domínio antes de separar o monólito",
      "description": "Modernização incremental de um monólito PHP sem documentação na Flapper: banco como fonte de descoberta, bounded contexts e Strangler. A separação por domínios reduziu em aproximadamente 25% o número de tabelas.",
      "lastModified": "2026-09-09T06:57:19.218Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/infosistemas-mensageria-en",
      "title": "Infosistemas: a failure contract for RabbitMQ messaging",
      "description": "RabbitMQ messaging redesign at Infosistemas with durable queues, DLQ, retry, idempotency, and prefetch. The work reduced intermittent failures between microservices by about 98%.",
      "lastModified": "2026-09-09T17:25:19.929Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/infosistemas-mensageria-es",
      "title": "Infosistemas: contrato de fallo en la mensajería RabbitMQ",
      "description": "Rediseño de la mensajería RabbitMQ en Infosistemas con colas durables, DLQ, retry, idempotencia y prefetch. El trabajo redujo en cerca del 98% los fallos intermitentes entre microservicios.",
      "lastModified": "2026-09-09T17:29:34.830Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/infosistemas-mensageria-pt-br",
      "title": "Infosistemas: contrato de falha na mensageria RabbitMQ",
      "description": "Redesenho da mensageria RabbitMQ na Infosistemas com filas duráveis, DLQ, retry, idempotência e prefetch. O trabalho reduziu em cerca de 98% as falhas intermitentes entre microsserviços.",
      "lastModified": "2026-09-09T06:57:18.972Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/vbet-analytics-en",
      "title": "VBET: analytics on top of a SQL Server we could not change",
      "description": "Commission dashboard at VBET: external SQL Server, owned ETL, and cache. The measured line went from about seven minutes at peak to under one second with a warm cache.",
      "lastModified": "2026-09-09T17:25:24.359Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/vbet-analytics-es",
      "title": "VBET: analítica sobre un SQL Server que no podíamos cambiar",
      "description": "Dashboard de comisiones en VBET: SQL Server externo, ETL propio y caché. La línea medida fue de cerca de siete minutos en el pico hasta menos de un segundo con caché caliente.",
      "lastModified": "2026-09-09T17:29:42.267Z"
    },
    {
      "url": "https://imrafaeldev.site/cases/vbet-analytics-pt-br",
      "title": "VBET: analytics sobre um SQL Server que não podíamos mudar",
      "description": "Dashboard de comissões na VBET: SQL Server externo, ETL próprio e cache. A linha medida foi de cerca de sete minutos no pico até menos de um segundo com cache quente.",
      "lastModified": "2026-09-09T06:57:19.204Z"
    },
    {
      "url": "https://imrafaeldev.site/casos",
      "title": "Estudos de caso",
      "description": "Cada case documenta a restrição, a decisão, a alternativa descartada e o resultado medido. Também registra quando a decisão deve ser revista."
    },
    {
      "url": "https://imrafaeldev.site/casos/analytics-sql-server-externo",
      "title": "VBET: analytics sobre um SQL Server que não podíamos mudar",
      "description": "Dashboard de comissões na VBET: SQL Server externo, ETL próprio e cache. A linha medida foi de cerca de sete minutos no pico até menos de um segundo com cache quente."
    },
    {
      "url": "https://imrafaeldev.site/casos/mensageria-rabbitmq",
      "title": "Infosistemas: contrato de falha na mensageria RabbitMQ",
      "description": "Redesenho da mensageria RabbitMQ na Infosistemas com filas duráveis, DLQ, retry, idempotência e prefetch. O trabalho reduziu em cerca de 98% as falhas intermitentes entre microsserviços."
    },
    {
      "url": "https://imrafaeldev.site/casos/modernizacao-monolito-sem-documentacao",
      "title": "Flapper: descobrir o domínio antes de separar o monólito",
      "description": "Modernização incremental de um monólito PHP sem documentação na Flapper: banco como fonte de descoberta, bounded contexts e Strangler. A separação por domínios reduziu em aproximadamente 25% o número de tabelas."
    },
    {
      "url": "https://imrafaeldev.site/contato",
      "title": "Contato",
      "description": "Fale com Rafael Pereira pelo @imrafaeldev no LinkedIn, GitHub, Instagram e YouTube. Sem formulário: escolha o canal e chame direto."
    },
    {
      "url": "https://imrafaeldev.site/curriculo",
      "title": "Currículo",
      "description": "Currículo online de Rafael Pereira, engenheiro backend sênior com experiência em Node.js, Go e Java, e atuação complementar em React e Angular."
    },
    {
      "url": "https://imrafaeldev.site/en",
      "title": "Rafael Pereira, senior software engineer",
      "description": "Institutional portfolio and editorial hub for Rafael Pereira. I work at the points where simple systems stop being simple."
    },
    {
      "url": "https://imrafaeldev.site/en/articles",
      "title": "Articles",
      "description": "Engineering patterns and decisions in technical prose, with code."
    },
    {
      "url": "https://imrafaeldev.site/en/articles/backend-performance-close-to-data",
      "title": "Most backend performance problems start close to the data",
      "description": "Before adding machines, cache, or queues, measure the request"
    },
    {
      "url": "https://imrafaeldev.site/en/articles/derusting-logic-container-with-most-water",
      "title": "Derusting logic #02: Container With Most Water",
      "description": "LeetCode 11 in JavaScript: a neighbor-based attempt, the hypothesis review, and the two-pointer solution."
    },
    {
      "url": "https://imrafaeldev.site/en/articles/derusting-logic-group-anagrams",
      "title": "Derusting logic #01: Group Anagrams",
      "description": "LeetCode 49 in Go: from sort-based keys to 26-letter counting, and the habit of keeping thinking after the code works."
    },
    {
      "url": "https://imrafaeldev.site/en/articles/design-patterns-adapter",
      "title": "Stop being hostage to dependencies. Say hello to the Adapter design pattern",
      "description": "With the Adapter, the service depends on a protocol and adapters translate MySQL, PostgreSQL, or mocks — without coupling business rules to the driver."
    },
    {
      "url": "https://imrafaeldev.site/en/articles/design-patterns-strategy",
      "title": "Design Patterns: Strategy",
      "description": "How the Strategy pattern encapsulates interchangeable algorithms and avoids fragile if/else chains, with a TypeScript calculator example."
    },
    {
      "url": "https://imrafaeldev.site/en/articles/go-intensive",
      "title": "Go intensive: concurrency, resilience, and distributed systems in 30 minutes",
      "description": "A practical Go backend review covering goroutines, context, backpressure, idempotency, Kubernetes, observability, and performance."
    },
    {
      "url": "https://imrafaeldev.site/en/articles/goroutines-vs-event-loop",
      "title": "Goroutines vs Event Loop: the wrong comparison between two concurrency models",
      "description": "Concurrency is not parallelism. When the Node.js Event Loop is enough for I/O and when Go goroutines fit CPU-bound load better."
    },
    {
      "url": "https://imrafaeldev.site/en/articles/typescript-clean-architecture",
      "title": "TypeScript Clean Architecture: Core, Adapters, and Infra",
      "description": "A Clean Architecture derivation for TypeScript backends: Core with usecases and protocols, bidirectional Adapters, and NestJS Infra with dependency injection."
    },
    {
      "url": "https://imrafaeldev.site/en/cases",
      "title": "Case studies",
      "description": "Each case documents the constraint, the decision, the discarded alternative, and the measured outcome. It also states when to revisit the decision."
    },
    {
      "url": "https://imrafaeldev.site/en/cases/external-sql-server-analytics",
      "title": "VBET: analytics on top of a SQL Server we could not change",
      "description": "Commission dashboard at VBET: external SQL Server, owned ETL, and cache. The measured line went from about seven minutes at peak to under one second with a warm cache."
    },
    {
      "url": "https://imrafaeldev.site/en/cases/rabbitmq-messaging",
      "title": "Infosistemas: a failure contract for RabbitMQ messaging",
      "description": "RabbitMQ messaging redesign at Infosistemas with durable queues, DLQ, retry, idempotency, and prefetch. The work reduced intermittent failures between microservices by about 98%."
    },
    {
      "url": "https://imrafaeldev.site/en/cases/undocumented-monolith-modernization",
      "title": "Flapper: discovering the domain before splitting the monolith",
      "description": "Incremental modernization of an undocumented PHP monolith at Flapper: database as discovery source, bounded contexts, and Strangler. The domain-based split reduced the table count by approximately 25%."
    },
    {
      "url": "https://imrafaeldev.site/en/contact",
      "title": "Contact",
      "description": "Talk to Rafael Pereira via @imrafaeldev on LinkedIn, GitHub, Instagram, and YouTube. No form: pick a channel and reach out directly."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/azify",
      "title": "Azify",
      "description": "My consulting work at Azify with settlement, BaaS, and financial services."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/braistech",
      "title": "Braistech",
      "description": "My experience at Braistech with product, microservices, and crypto assets."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/eds-policia-civil-rio",
      "title": "EDS and Rio de Janeiro Civil Police",
      "description": "My consulting experience on sensitive public systems."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/flapper",
      "title": "Flapper",
      "description": "My experience at Flapper with incremental modernization of a production legacy system."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/infosistemas",
      "title": "Infosistemas",
      "description": "My experience at Infosistemas with messaging, integrations, and mobility platforms."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/maxmilhas",
      "title": "Maxmilhas",
      "description": "My experience at Maxmilhas with post-sale automation and legacy integration."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/south-system-quiq-itau",
      "title": "South System, QUIQ, and Itaú",
      "description": "My experience with a white-label, multi-tenant marketplace for financial institutions."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/sustentec",
      "title": "Sustentec",
      "description": "My experience at Sustentec with research systems, APIs, and quality."
    },
    {
      "url": "https://imrafaeldev.site/en/experience/vbet",
      "title": "VBET",
      "description": "My experience at VBET with security, analytics, and performance at scale."
    },
    {
      "url": "https://imrafaeldev.site/en/projects",
      "title": "Projects",
      "description": "Artifacts with problem, constraints, and current repository state."
    },
    {
      "url": "https://imrafaeldev.site/en/projects/diffvision",
      "title": "DiffVision",
      "description": "Local-first npm CLI for reviewing Git diffs, with local UI, in-repo comments, Markdown/JSON export, and MCP server. Visual AI review remains a mock."
    },
    {
      "url": "https://imrafaeldev.site/en/projects/goc-mcp",
      "title": "goc_mcp",
      "description": "Local agent orchestration over MCP in Go: maestro, FIFO daemon, OpenCode workers, and SQLite. Delivery worked, but the cost and time hypothesis was not confirmed in this measurement."
    },
    {
      "url": "https://imrafaeldev.site/en/projects/md2cv",
      "title": "md2cv",
      "description": "Local-first desktop studio for professional profiles, Markdown resumes, immutable versions, ATS, and job matching with supervised agents. Data stays in the machine"
    },
    {
      "url": "https://imrafaeldev.site/en/projects/post-engine",
      "title": "Post Engine",
      "description": "Authorship-centered editorial workstation: interview, briefing, storyboard, and export after the gateway blocks fabricated content. Versioned prompts; isolated LLM workspace."
    },
    {
      "url": "https://imrafaeldev.site/en/projects/sms-manager",
      "title": "SMS Manager",
      "description": "Decoupled SMS campaigns: the Nest API persists and publishes, the queue delivers, and consumers in TypeScript, Go, or Rust record the result. Opaque token, Redis, and gRPC between services."
    },
    {
      "url": "https://imrafaeldev.site/en/resume",
      "title": "Resume",
      "description": "Rafael Pereira"
    },
    {
      "url": "https://imrafaeldev.site/es",
      "title": "Rafael Pereira, ingeniero de software sénior",
      "description": "Portafolio institucional y hub editorial de Rafael Pereira. Trabajo en los puntos en los que los sistemas simples dejan de ser simples."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos",
      "title": "Artículos",
      "description": "Patrones y decisiones de ingeniería en prosa técnica, con código."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/backend-performance-cerca-de-los-datos",
      "title": "La mayoría de los problemas de performance de backend empieza cerca de los datos",
      "description": "Antes de subir máquina, caché o cola, mide el trabajo de la petición. Plan de ejecución, N+1, CAST en columna y loops secuenciales."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/desenoxidando-logica-container-with-most-water",
      "title": "Desenoxidando la lógica #02: Container With Most Water",
      "description": "LeetCode 11 en JavaScript: un intento basado en los vecinos, la revisión de la hipótesis y la solución de dos punteros."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/desenoxidando-logica-group-anagrams",
      "title": "Desenoxidando la lógica #01: Group Anagrams",
      "description": "LeetCode 49 en Go: de la clave por sort al conteo de 26 letras, y el hábito de seguir pensando después de que el código funciona."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/design-patterns-adapter",
      "title": "Deja de ser rehén de las dependencias. Saluda al patrón de diseño Adapter",
      "description": "Con el Adapter, el servicio depende de un protocolo y los adapters traducen MySQL, PostgreSQL o mocks — sin acoplar la regla de negocio al driver."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/design-patterns-strategy",
      "title": "Design Patterns: Strategy",
      "description": "Cómo el patrón Strategy encapsula algoritmos intercambiables y evita frágiles cadenas de if/else, con un ejemplo de calculadora en TypeScript."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/go-intensivo",
      "title": "Intensivo de Golang: concurrencia, resiliencia y sistemas distribuidos en 30 minutos",
      "description": "Revisión práctica de Go para backend: goroutines, context, backpressure, idempotencia, Kubernetes, observabilidad y rendimiento."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/goroutines-vs-event-loop",
      "title": "Goroutines vs Event Loop: la comparación equivocada entre dos modelos de concurrencia",
      "description": "Concurrencia no es paralelismo. Cuándo el Event Loop de Node.js basta para I/O y cuándo las goroutines en Go encajan mejor en carga CPU bound."
    },
    {
      "url": "https://imrafaeldev.site/es/articulos/typescript-clean-architecture",
      "title": "TypeScript Clean Architecture: Core, Adapters e Infra",
      "description": "Derivación de Clean Architecture para backend TypeScript: Core con usecases y protocols, Adapters bidireccionales e Infra NestJS con inyección de dependencias."
    },
    {
      "url": "https://imrafaeldev.site/es/casos",
      "title": "Estudios de caso",
      "description": "Cada case documenta la restricción, la decisión, la alternativa descartada y el resultado medido. También indica cuándo conviene revisar la decisión."
    },
    {
      "url": "https://imrafaeldev.site/es/casos/analitica-sql-server-externo",
      "title": "VBET: analítica sobre un SQL Server que no podíamos cambiar",
      "description": "Dashboard de comisiones en VBET: SQL Server externo, ETL propio y caché. La línea medida fue de cerca de siete minutos en el pico hasta menos de un segundo con caché caliente."
    },
    {
      "url": "https://imrafaeldev.site/es/casos/mensajeria-rabbitmq",
      "title": "Infosistemas: contrato de fallo en la mensajería RabbitMQ",
      "description": "Rediseño de la mensajería RabbitMQ en Infosistemas con colas durables, DLQ, retry, idempotencia y prefetch. El trabajo redujo en cerca del 98% los fallos intermitentes entre microservicios."
    },
    {
      "url": "https://imrafaeldev.site/es/casos/modernizacion-monolito-sin-documentacion",
      "title": "Flapper: descubrir el dominio antes de separar el monolito",
      "description": "Modernización incremental de un monolito PHP sin documentación en Flapper: base como fuente de descubrimiento, bounded contexts y Strangler. La separación por dominios redujo en aproximadamente el 25% el número de tablas."
    },
    {
      "url": "https://imrafaeldev.site/es/contacto",
      "title": "Contacto",
      "description": "Habla con Rafael Pereira vía @imrafaeldev en LinkedIn, GitHub, Instagram y YouTube. Sin formulario: elige el canal y escribe directamente."
    },
    {
      "url": "https://imrafaeldev.site/es/curriculum",
      "title": "Currículum",
      "description": "Currículum online de Rafael Pereira, ingeniero backend senior con experiencia en Node.js, Go y Java, y trabajo complementario con React y Angular."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/azify",
      "title": "Azify",
      "description": "Mi consultoría en Azify con liquidación, BaaS y servicios financieros."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/braistech",
      "title": "Braistech",
      "description": "Mi experiencia en Braistech con producto, microservicios y criptoactivos."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/eds-policia-civil-rio",
      "title": "EDS y Policía Civil de Río de Janeiro",
      "description": "Mi experiencia de consultoría en sistemas públicos sensibles."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/flapper",
      "title": "Flapper",
      "description": "Mi experiencia en Flapper con modernización incremental de un legado en producción."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/infosistemas",
      "title": "Infosistemas",
      "description": "Mi experiencia en Infosistemas con mensajería, integraciones y plataformas de movilidad."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/maxmilhas",
      "title": "Maxmilhas",
      "description": "Mi experiencia en Maxmilhas con automatización posventa e integración de legado."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/south-system-quiq-itau",
      "title": "South System, QUIQ e Itaú",
      "description": "Mi experiencia con un marketplace white-label y multi-tenant para instituciones financieras."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/sustentec",
      "title": "Sustentec",
      "description": "Mi experiencia en Sustentec con sistemas de investigación, APIs y calidad."
    },
    {
      "url": "https://imrafaeldev.site/es/experiencias/vbet",
      "title": "VBET",
      "description": "Mi experiencia en VBET con seguridad, analítica y rendimiento a escala."
    },
    {
      "url": "https://imrafaeldev.site/es/proyectos",
      "title": "Proyectos",
      "description": "Artefactos con problema, restricciones y estado actual del repositorio."
    },
    {
      "url": "https://imrafaeldev.site/es/proyectos/diffvision",
      "title": "DiffVision",
      "description": "CLI npm local-first para revisar diffs Git, con UI local, comentarios en el repositorio, exportación en Markdown/JSON y servidor MCP. La revisión visual por IA permanece mock."
    },
    {
      "url": "https://imrafaeldev.site/es/proyectos/goc-mcp",
      "title": "goc_mcp",
      "description": "Orquestación local de agentes vía MCP en Go: maestro, daemon FIFO, workers OpenCode y SQLite. La entrega funcionó, pero la hipótesis de costo y tiempo no se confirmó en esta medición."
    },
    {
      "url": "https://imrafaeldev.site/es/proyectos/md2cv",
      "title": "md2cv",
      "description": "Estudio desktop local-first para perfil profesional, currículos Markdown, versiones inmutables, ATS y adaptación a vacantes con agentes supervisados. Los datos quedan en el SQLite de la máquina."
    },
    {
      "url": "https://imrafaeldev.site/es/proyectos/post-engine",
      "title": "Post Engine",
      "description": "Estación editorial centrada en autoría: entrevista, briefing, storyboard y exportación después de que el gateway bloquee contenido fabricado. Prompts versionados; workspace LLM aislado."
    },
    {
      "url": "https://imrafaeldev.site/es/proyectos/sms-manager",
      "title": "SMS Manager",
      "description": "Campañas de SMS desacopladas: la API Nest persiste y publica, la cola entrega y consumidores en TypeScript, Go o Rust graban el resultado. Token opaco, Redis y gRPC entre servicios."
    },
    {
      "url": "https://imrafaeldev.site/experiences/azify-en",
      "title": "Azify | Rafael Pereira",
      "description": "My consulting work at Azify with settlement, BaaS, and financial services.",
      "lastModified": "2026-09-09T18:56:27.619Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/azify-es",
      "title": "Azify | Rafael Pereira",
      "description": "Mi consultoría en Azify con liquidación, BaaS y servicios financieros.",
      "lastModified": "2026-09-09T18:57:33.548Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/azify-pt-br",
      "title": "Azify | Rafael Pereira",
      "description": "Minha consultoria na Azify com liquidação, BaaS e serviços financeiros.",
      "lastModified": "2026-09-09T18:54:08.300Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/braistech-en",
      "title": "Braistech | Rafael Pereira",
      "description": "My experience at Braistech with product, microservices, and crypto assets.",
      "lastModified": "2026-09-09T18:56:27.625Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/braistech-es",
      "title": "Braistech | Rafael Pereira",
      "description": "Mi experiencia en Braistech con producto, microservicios y criptoactivos.",
      "lastModified": "2026-09-09T18:57:33.579Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/braistech-pt-br",
      "title": "Braistech | Rafael Pereira",
      "description": "Minha experiência na Braistech com produto, microsserviços e criptoativos.",
      "lastModified": "2026-09-09T18:54:08.348Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/eds-policia-civil-rio-en",
      "title": "EDS and Rio de Janeiro Civil Police | Rafael Pereira",
      "description": "My consulting experience on sensitive public systems.",
      "lastModified": "2026-09-09T18:56:27.617Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/eds-policia-civil-rio-es",
      "title": "EDS y Policía Civil de Río de Janeiro | Rafael Pereira",
      "description": "Mi experiencia de consultoría en sistemas públicos sensibles.",
      "lastModified": "2026-09-09T18:57:33.547Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/eds-policia-civil-rio-pt-br",
      "title": "EDS e Polícia Civil do Rio de Janeiro | Rafael Pereira",
      "description": "Minha experiência de consultoria em sistemas públicos sensíveis.",
      "lastModified": "2026-09-09T18:54:08.287Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/flapper-en",
      "title": "Flapper | Rafael Pereira",
      "description": "My experience at Flapper with incremental modernization of a production legacy system.",
      "lastModified": "2026-09-09T18:56:27.624Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/flapper-es",
      "title": "Flapper | Rafael Pereira",
      "description": "Mi experiencia en Flapper con modernización incremental de un legado en producción.",
      "lastModified": "2026-09-09T18:57:33.570Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/flapper-pt-br",
      "title": "Flapper | Rafael Pereira",
      "description": "Minha experiência na Flapper com modernização incremental de um legado em produção.",
      "lastModified": "2026-09-09T18:54:08.335Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/infosistemas-en",
      "title": "Infosistemas | Rafael Pereira",
      "description": "My experience at Infosistemas with messaging, integrations, and mobility platforms.",
      "lastModified": "2026-09-09T18:56:27.602Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/infosistemas-es",
      "title": "Infosistemas | Rafael Pereira",
      "description": "Mi experiencia en Infosistemas con mensajería, integraciones y plataformas de movilidad.",
      "lastModified": "2026-09-09T18:57:33.539Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/infosistemas-pt-br",
      "title": "Infosistemas | Rafael Pereira",
      "description": "Minha experiência na Infosistemas com mensageria, integrações e plataformas de mobilidade.",
      "lastModified": "2026-09-09T18:54:08.281Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/maxmilhas-en",
      "title": "Maxmilhas | Rafael Pereira",
      "description": "My experience at Maxmilhas with post-sale automation and legacy integration.",
      "lastModified": "2026-09-09T18:56:27.621Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/maxmilhas-es",
      "title": "Maxmilhas | Rafael Pereira",
      "description": "Mi experiencia en Maxmilhas con automatización posventa e integración de legado.",
      "lastModified": "2026-09-09T18:57:33.550Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/maxmilhas-pt-br",
      "title": "Maxmilhas | Rafael Pereira",
      "description": "Minha experiência na Maxmilhas com automação de pós-venda e legado.",
      "lastModified": "2026-09-09T18:54:08.302Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/south-system-quiq-itau-en",
      "title": "South System, QUIQ, and Itaú | Rafael Pereira",
      "description": "My experience with a white-label, multi-tenant marketplace for financial institutions.",
      "lastModified": "2026-09-09T18:56:27.622Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/south-system-quiq-itau-es",
      "title": "South System, QUIQ e Itaú | Rafael Pereira",
      "description": "Mi experiencia con un marketplace white-label y multi-tenant para instituciones financieras.",
      "lastModified": "2026-09-09T18:57:33.568Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/south-system-quiq-itau-pt-br",
      "title": "South System, QUIQ e Itaú | Rafael Pereira",
      "description": "Minha experiência com marketplace white-label e multi-tenant para instituições financeiras.",
      "lastModified": "2026-09-09T18:54:08.318Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/sustentec-en",
      "title": "Sustentec | Rafael Pereira",
      "description": "My experience at Sustentec with research systems, APIs, and quality.",
      "lastModified": "2026-09-09T18:56:27.624Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/sustentec-es",
      "title": "Sustentec | Rafael Pereira",
      "description": "Mi experiencia en Sustentec con sistemas de investigación, APIs y calidad.",
      "lastModified": "2026-09-09T18:57:33.578Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/sustentec-pt-br",
      "title": "Sustentec | Rafael Pereira",
      "description": "Minha experiência na Sustentec com sistemas de pesquisa, APIs e qualidade.",
      "lastModified": "2026-09-09T18:54:08.347Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/vbet-en",
      "title": "VBET | Rafael Pereira",
      "description": "My experience at VBET with security, analytics, and performance at scale.",
      "lastModified": "2026-09-09T18:56:27.620Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/vbet-es",
      "title": "VBET | Rafael Pereira",
      "description": "Mi experiencia en VBET con seguridad, analítica y rendimiento a escala.",
      "lastModified": "2026-09-09T18:57:33.549Z"
    },
    {
      "url": "https://imrafaeldev.site/experiences/vbet-pt-br",
      "title": "VBET | Rafael Pereira",
      "description": "Minha experiência na VBET com segurança, analytics e performance em escala.",
      "lastModified": "2026-09-09T18:54:08.301Z"
    },
    {
      "url": "https://imrafaeldev.site/experiencias/azify",
      "title": "Azify",
      "description": "Minha consultoria na Azify com liquidação, BaaS e serviços financeiros."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/braistech",
      "title": "Braistech",
      "description": "Minha experiência na Braistech com produto, microsserviços e criptoativos."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/eds-policia-civil-rio",
      "title": "EDS e Polícia Civil do Rio de Janeiro",
      "description": "Minha experiência de consultoria em sistemas públicos sensíveis."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/flapper",
      "title": "Flapper",
      "description": "Minha experiência na Flapper com modernização incremental de um legado em produção."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/infosistemas",
      "title": "Infosistemas",
      "description": "Minha experiência na Infosistemas com mensageria, integrações e plataformas de mobilidade."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/maxmilhas",
      "title": "Maxmilhas",
      "description": "Minha experiência na Maxmilhas com automação de pós-venda e legado."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/south-system-quiq-itau",
      "title": "South System, QUIQ e Itaú",
      "description": "Minha experiência com marketplace white-label e multi-tenant para instituições financeiras."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/sustentec",
      "title": "Sustentec",
      "description": "Minha experiência na Sustentec com sistemas de pesquisa, APIs e qualidade."
    },
    {
      "url": "https://imrafaeldev.site/experiencias/vbet",
      "title": "VBET",
      "description": "Minha experiência na VBET com segurança, analytics e performance em escala."
    },
    {
      "url": "https://imrafaeldev.site/fundacao",
      "title": "Verificação da fundação",
      "description": "Página temporária, sem índice, usada para validar a troca de idioma quando não há variante publicada."
    },
    {
      "url": "https://imrafaeldev.site/google59795d012238450d",
      "title": "/google59795d012238450d"
    },
    {
      "url": "https://imrafaeldev.site/pages/home-en",
      "title": "Rafael Pereira, senior software engineer",
      "description": "Institutional portfolio and editorial hub for Rafael Pereira. I work at the points where simple systems stop being simple.",
      "lastModified": "2026-09-09T06:46:50.369Z"
    },
    {
      "url": "https://imrafaeldev.site/pages/home-es",
      "title": "Rafael Pereira, ingeniero de software sénior",
      "description": "Portafolio institucional y hub editorial de Rafael Pereira. Trabajo en los puntos en los que los sistemas simples dejan de ser simples.",
      "lastModified": "2026-09-09T06:46:50.373Z"
    },
    {
      "url": "https://imrafaeldev.site/pages/home-pt-br",
      "title": "Rafael Pereira, engenheiro de software sênior",
      "description": "Portfólio institucional e hub editorial de Rafael Pereira. Trabalho nos pontos em que sistemas simples deixam de ser simples.",
      "lastModified": "2026-09-09T06:46:50.364Z"
    },
    {
      "url": "https://imrafaeldev.site/pages/probe-pt-br",
      "title": "Verificação da fundação",
      "description": "Página temporária, sem índice, usada para validar a troca de idioma quando não há variante publicada.",
      "lastModified": "2026-09-02T09:00:33.628Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/diffvision-en",
      "title": "DiffVision",
      "description": "Local-first npm CLI for reviewing Git diffs, with local UI, in-repo comments, Markdown/JSON export, and MCP server. Visual AI review remains a mock.",
      "lastModified": "2026-09-09T17:25:43.460Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/diffvision-es",
      "title": "DiffVision",
      "description": "CLI npm local-first para revisar diffs Git, con UI local, comentarios en el repositorio, exportación en Markdown/JSON y servidor MCP. La revisión visual por IA permanece mock.",
      "lastModified": "2026-09-17T10:24:52.602Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/diffvision-pt-br",
      "title": "DiffVision",
      "description": "CLI npm local-first para revisar diffs Git, com UI local, comentários no repositório, exportação em Markdown/JSON e servidor MCP. A revisão visual por IA permanece mock.",
      "lastModified": "2026-09-08T18:37:00.760Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/goc-mcp-en",
      "title": "goc_mcp",
      "description": "Local agent orchestration over MCP in Go: maestro, FIFO daemon, OpenCode workers, and SQLite. Delivery worked, but the cost and time hypothesis was not confirmed in this measurement.",
      "lastModified": "2026-09-09T17:25:37.032Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/goc-mcp-es",
      "title": "goc_mcp",
      "description": "Orquestación local de agentes vía MCP en Go: maestro, daemon FIFO, workers OpenCode y SQLite. La entrega funcionó, pero la hipótesis de costo y tiempo no se confirmó en esta medición.",
      "lastModified": "2026-09-17T10:25:00.809Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/goc-mcp-pt-br",
      "title": "goc_mcp",
      "description": "Orquestração local de agentes via MCP em Go: maestro, daemon FIFO, workers OpenCode e SQLite. A entrega funcionou, mas a hipótese de custo e tempo não foi confirmada nesta medição.",
      "lastModified": "2026-09-08T18:36:47.398Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/md2cv-en",
      "title": "md2cv",
      "description": "Local-first desktop studio for professional profiles, Markdown resumes, immutable versions, ATS, and job matching with supervised agents. Data stays in the machine's SQLite.",
      "lastModified": "2026-09-09T17:25:40.741Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/md2cv-es",
      "title": "md2cv",
      "description": "Estudio desktop local-first para perfil profesional, currículos Markdown, versiones inmutables, ATS y adaptación a vacantes con agentes supervisados. Los datos quedan en el SQLite de la máquina.",
      "lastModified": "2026-09-17T10:25:03.667Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/md2cv-pt-br",
      "title": "md2cv",
      "description": "Estúdio desktop local-first para perfil profissional, currículos Markdown, versões imutáveis, ATS e adaptação a vagas com agentes supervisionados. Os dados ficam no SQLite da máquina.",
      "lastModified": "2026-09-08T18:36:57.846Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/post-engine-en",
      "title": "Post Engine",
      "description": "Authorship-centered editorial workstation: interview, briefing, storyboard, and export after the gateway blocks fabricated content. Versioned prompts; isolated LLM workspace.",
      "lastModified": "2026-09-09T17:25:48.054Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/post-engine-es",
      "title": "Post Engine",
      "description": "Estación editorial centrada en autoría: entrevista, briefing, storyboard y exportación después de que el gateway bloquee contenido fabricado. Prompts versionados; workspace LLM aislado.",
      "lastModified": "2026-09-17T10:25:06.134Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/post-engine-pt-br",
      "title": "Post Engine",
      "description": "Workstation editorial centrada em autoria: entrevista, briefing, storyboard e exportação após o gateway barrar conteúdo fabricado. Prompts versionados; workspace LLM isolado.",
      "lastModified": "2026-09-08T18:37:02.386Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/sms-manager-en",
      "title": "SMS Manager",
      "description": "Decoupled SMS campaigns: the Nest API persists and publishes, the queue delivers, and consumers in TypeScript, Go, or Rust record the result. Opaque token, Redis, and gRPC between services.",
      "lastModified": "2026-09-09T17:25:34.064Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/sms-manager-es",
      "title": "SMS Manager",
      "description": "Campañas de SMS desacopladas: la API Nest persiste y publica, la cola entrega y consumidores en TypeScript, Go o Rust graban el resultado. Token opaco, Redis y gRPC entre servicios.",
      "lastModified": "2026-09-17T10:25:08.935Z"
    },
    {
      "url": "https://imrafaeldev.site/projects/sms-manager-pt-br",
      "title": "SMS Manager",
      "description": "Campanhas de SMS desacopladas: a API Nest persiste e publica, a fila entrega e consumidores em TypeScript, Go ou Rust gravam o resultado. Token opaco, Redis e gRPC entre serviços.",
      "lastModified": "2026-09-08T18:36:46.784Z"
    },
    {
      "url": "https://imrafaeldev.site/projetos",
      "title": "Projetos",
      "description": "Artefatos com problema, restrições e estado atual do repositório."
    },
    {
      "url": "https://imrafaeldev.site/projetos/diffvision",
      "title": "DiffVision",
      "description": "CLI npm local-first para revisar diffs Git, com UI local, comentários no repositório, exportação em Markdown/JSON e servidor MCP. A revisão visual por IA permanece mock."
    },
    {
      "url": "https://imrafaeldev.site/projetos/goc-mcp",
      "title": "goc_mcp",
      "description": "Orquestração local de agentes via MCP em Go: maestro, daemon FIFO, workers OpenCode e SQLite. A entrega funcionou, mas a hipótese de custo e tempo não foi confirmada nesta medição."
    },
    {
      "url": "https://imrafaeldev.site/projetos/md2cv",
      "title": "md2cv",
      "description": "Estúdio desktop local-first para perfil profissional, currículos Markdown, versões imutáveis, ATS e adaptação a vagas com agentes supervisionados. Os dados ficam no SQLite da máquina."
    },
    {
      "url": "https://imrafaeldev.site/projetos/post-engine",
      "title": "Post Engine",
      "description": "Workstation editorial centrada em autoria: entrevista, briefing, storyboard e exportação após o gateway barrar conteúdo fabricado. Prompts versionados; workspace LLM isolado."
    },
    {
      "url": "https://imrafaeldev.site/projetos/sms-manager",
      "title": "SMS Manager",
      "description": "Campanhas de SMS desacopladas: a API Nest persiste e publica, a fila entrega e consumidores em TypeScript, Go ou Rust gravam o resultado. Token opaco, Redis e gRPC entre serviços."
    },
    {
      "url": "https://imrafaeldev.site/resumes/curriculo-pt-br",
      "title": "Currículo | Rafael Pereira",
      "description": "Currículo online de Rafael Pereira, engenheiro backend sênior com experiência em Node.js, Go e Java, e atuação complementar em React e Angular.",
      "lastModified": "2026-09-09T18:52:57.079Z"
    },
    {
      "url": "https://imrafaeldev.site/resumes/curriculum-es",
      "title": "Currículum | Rafael Pereira",
      "description": "Currículum online de Rafael Pereira, ingeniero backend senior con experiencia en Node.js, Go y Java, y trabajo complementario con React y Angular.",
      "lastModified": "2026-09-09T18:52:57.091Z"
    },
    {
      "url": "https://imrafaeldev.site/resumes/resume-en",
      "title": "Resume | Rafael Pereira",
      "description": "Rafael Pereira's online resume: a senior backend engineer with experience in Node.js, Go, and Java, plus complementary work with React and Angular.",
      "lastModified": "2026-09-09T18:52:57.091Z"
    },
    {
      "url": "https://imrafaeldev.site/visual-projects/gabriel-nutricao-en",
      "title": "Gabriel | Sports Nutrition",
      "description": "Institutional site for Gabriel, focused on sports nutrition for people who train.",
      "lastModified": "2026-09-09T17:25:53.074Z"
    },
    {
      "url": "https://imrafaeldev.site/visual-projects/gabriel-nutricao-es",
      "title": "Gabriel | Nutrición Deportiva",
      "description": "Sitio institucional para Gabriel, enfocado en nutrición deportiva para quienes entrenan.",
      "lastModified": "2026-09-09T17:30:02.016Z"
    },
    {
      "url": "https://imrafaeldev.site/visual-projects/gabriel-nutricao-pt-br",
      "title": "Gabriel | Nutrição Esportiva",
      "description": "Site institucional para Gabriel, com foco em nutrição esportiva para quem treina.",
      "lastModified": "2026-09-09T15:27:50.600Z"
    },
    {
      "url": "https://imrafaeldev.site/visual-projects/gran-goias-en",
      "title": "Gran Goiás",
      "description": "Institutional site for Gran Goiás, with stone execution for large-scale works.",
      "lastModified": "2026-09-09T17:25:50.589Z"
    },
    {
      "url": "https://imrafaeldev.site/visual-projects/gran-goias-es",
      "title": "Gran Goiás",
      "description": "Sitio institucional para Gran Goiás, con ejecución en piedra para obras de escala.",
      "lastModified": "2026-09-09T17:30:06.316Z"
    },
    {
      "url": "https://imrafaeldev.site/visual-projects/gran-goias-pt-br",
      "title": "Gran Goiás",
      "description": "Site institucional para a Gran Goiás, com execução em pedra para obras de escala.",
      "lastModified": "2026-09-09T15:19:17.597Z"
    }
  ],
  "metadata": {
    "totalDocuments": 185,
    "generator": "aeo.js",
    "generatorUrl": "https://aeojs.org"
  }
}