{"id":567,"date":"2026-07-31T13:49:15","date_gmt":"2026-07-31T16:49:15","guid":{"rendered":"https:\/\/carloslopes.programandosolucoes.com.br\/index.php\/portfolio-backend\/"},"modified":"2026-08-05T17:05:12","modified_gmt":"2026-08-05T20:05:12","slug":"portfolio-backend","status":"publish","type":"page","link":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/portfolio-backend\/","title":{"rendered":"Portf\u00f3lio \u2014 Backend"},"content":{"rendered":"<style>\n.pf-wrap{max-width:1100px;margin:0 auto;font-size:16px;line-height:1.65}\n.pf-chamada{font-size:1.15rem;opacity:.85;margin:0 0 2rem}\n.pf-grade{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem}\n.pf-card{border:1px solid rgba(128,128,128,.3);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;transition:transform .15s ease,box-shadow .15s ease}\n.pf-card:hover{transform:translateY(-3px);box-shadow:0 8px 24px rgba(0,0,0,.12)}\n.pf-card img{width:100%;height:180px;object-fit:cover;display:block;background:rgba(128,128,128,.12)}\n.pf-card-corpo{padding:1rem 1.1rem 1.2rem;display:flex;flex-direction:column;gap:.6rem;flex:1}\n.pf-card h3{margin:0;font-size:1.05rem;line-height:1.35}\n.pf-card p{margin:0;font-size:.92rem;opacity:.85;flex:1}\n.pf-chips{display:flex;flex-wrap:wrap;gap:.35rem}\n.pf-chip{font-size:.75rem;padding:.18rem .55rem;border-radius:999px;border:1px solid rgba(128,128,128,.35);opacity:.9}\n.pf-meta{font-size:.8rem;opacity:.7}\n.pf-cadeado{font-size:.8rem;opacity:.75}\n.pf-hero{margin:0 0 1.5rem}\n.pf-hero h1{margin:0 0 .4rem;line-height:1.2}\n.pf-secao{margin:2rem 0}\n.pf-secao h2{font-size:1.15rem;margin:0 0 .6rem;text-transform:uppercase;letter-spacing:.06em;opacity:.75}\n.pf-galeria{display:grid;gap:1.2rem;margin:2rem 0}\n.pf-galeria figure{margin:0}\n.pf-galeria img{width:100%;border:1px solid rgba(128,128,128,.3);border-radius:8px;display:block}\n.pf-galeria figcaption{font-size:.85rem;opacity:.75;margin-top:.4rem}\n.pf-repo{border:1px solid rgba(128,128,128,.35);border-left-width:4px;border-radius:8px;padding:1rem 1.2rem;margin:2rem 0}\n.pf-repo h2{margin:0 0 .5rem;font-size:1rem;text-transform:uppercase;letter-spacing:.06em}\n.pf-repo pre{background:rgba(128,128,128,.12);padding:.7rem .9rem;border-radius:6px;overflow-x:auto;margin:.6rem 0;font-size:.85rem}\n.pf-contato{margin:2rem 0;padding-top:1.2rem;border-top:1px solid rgba(128,128,128,.3);font-size:.95rem}\n.pf-voltar{display:inline-block;margin-bottom:1rem;font-size:.9rem}\n@media (max-width:600px){.pf-card img{height:150px}}\n<\/style>\n<div class=\"pf-wrap\">\n<p class=\"pf-chamada\">Sistemas que rodam por baixo: telefonia, processamento de sinais, integra\u00e7\u00f5es e infraestrutura.<\/p>\n<div class=\"pf-grade\">\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-discador\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/discador-01-painel.png\" alt=\"Painel de opera\u00e7\u00e3o: campanhas, mailing e estado do discador\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-discador\/\">Plataforma de Discador VoIP para Call Center<\/a><\/h3>\n<p>Plataforma completa de discagem para call center: painel de opera\u00e7\u00e3o, motor de discagem horizontal e uma linguagem pr\u00f3pria de fluxo de IVR.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">Flask 3.1<\/span><span class=\"pf-chip\">PostgreSQL 17<\/span><span class=\"pf-chip\">Asterisk PJSIP<\/span><\/div>\n<div class=\"pf-meta\">01\/2025 &#8211; 07\/2026 \u00b7 12 a 18 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-omnichannel\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/omnichannel-01-chat.png\" alt=\"Atendimento unificado: WhatsApp, e-mail e v\u00eddeo na mesma caixa\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-omnichannel\/\">Plataforma de Atendimento Omnichannel Multi-tenant<\/a><\/h3>\n<p>Plataforma de atendimento omnichannel multi-tenant, implementada duas vezes: primeiro em Node e TypeScript, depois reescrita inteira em Laravel.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP 8.2<\/span><span class=\"pf-chip\">Laravel 12<\/span><span class=\"pf-chip\">React 18<\/span><span class=\"pf-chip\">TypeScript<\/span><\/div>\n<div class=\"pf-meta\">02\/2026 &#8211; 07\/2026 \u00b7 5 a 6 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-pedagio\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/pedagio-01-api.png\" alt=\"API de processamento de leitura, documentada em OpenAPI\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-pedagio\/\">Arquiteto de Software (Hands-On) &#8211; Retaguarda de Ped\u00e1gio Eletr\u00f4nico<\/a><\/h3>\n<p>Retaguarda de ped\u00e1gio eletr\u00f4nico free-flow: l\u00ea o transponder do ve\u00edculo, decifra o payload e entrega para a concession\u00e1ria em tr\u00eas formatos diferentes.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">FastAPI<\/span><span class=\"pf-chip\">uvicorn<\/span><span class=\"pf-chip\">cryptography<\/span><\/div>\n<div class=\"pf-meta\">12\/2025 &#8211; 01\/2026 \u00b7 2 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-analise-audio\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/analise-audio-01-relatorio.png\" alt=\"Relat\u00f3rio de an\u00e1lise: eventos de picote e dropout por chamada\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-analise-audio\/\">An\u00e1lise de Qualidade de Chamadas por Processamento de Sinais<\/a><\/h3>\n<p>Detecta picote, dropout e falha de \u00e1udio em grava\u00e7\u00f5es de chamadas por processamento de sinais \u2014 sem depender de transcri\u00e7\u00e3o.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python 3.14<\/span><span class=\"pf-chip\">NumPy<\/span><span class=\"pf-chip\">FFT<\/span><span class=\"pf-chip\">ITU-T G.107<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 &#8211; atual \u00b7 3 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-sipproxy\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/sipproxy-01-arquitetura.png\" alt=\"Sinaliza\u00e7\u00e3o e m\u00eddia atravessando o NAT\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-sipproxy\/\">SIP Proxy e SBC para FusionPBX<\/a><\/h3>\n<p>SIP proxy e SBC em Kamailio para FusionPBX, com foco em atravessar NAT sem quebrar a m\u00eddia.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Kamailio<\/span><span class=\"pf-chip\">rtpengine<\/span><span class=\"pf-chip\">SIP<\/span><span class=\"pf-chip\">SIPp<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 &#8211; atual \u00b7 3 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-rpa\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/rpa-01-arquitetura.png\" alt=\"Um n\u00facleo comum, um adaptador por site\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-rpa\/\">Motor de Automa\u00e7\u00e3o Aut\u00f4noma de Intera\u00e7\u00e3o Web (RPA)<\/a><\/h3>\n<p>Motor gen\u00e9rico de automa\u00e7\u00e3o de intera\u00e7\u00e3o web: adaptadores por site sobre um n\u00facleo \u00fanico, com decis\u00e3o assistida por IA e evid\u00eancia em imagem.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Node.js<\/span><span class=\"pf-chip\">Puppeteer 25<\/span><span class=\"pf-chip\">Prisma 5.22<\/span><span class=\"pf-chip\">SQLite<\/span><\/div>\n<div class=\"pf-meta\">06\/2026 &#8211; atual \u00b7 3 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-painel-git\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/painel-git-01-repos.png\" alt=\"Painel de administra\u00e7\u00e3o com os reposit\u00f3rios hospedados\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-painel-git\/\">Plataforma Pr\u00f3pria de Hospedagem Git<\/a><\/h3>\n<p>Alternativa self-hosted a GitHub e GitLab, escrita em PHP puro, sem nenhuma depend\u00eancia de runtime.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP 8.2<\/span><span class=\"pf-chip\">Git Smart HTTP<\/span><span class=\"pf-chip\">WebDAV RFC 4918<\/span><span class=\"pf-chip\">AES-256-GCM<\/span><\/div>\n<div class=\"pf-meta\">08\/2025 &#8211; atual \u00b7 9 a 11 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-evoluai\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/evoluai-01-arquitetura.png\" alt=\"Da grava\u00e7\u00e3o no PABX \u00e0 an\u00e1lise de qualidade\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-evoluai\/\">Plataforma de An\u00e1lise de Intera\u00e7\u00f5es com IA<\/a><\/h3>\n<p>Coleta grava\u00e7\u00f5es de PABX e de reuni\u00f5es, transcreve e gera an\u00e1lise de qualidade de atendimento assistida por IA.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Bun<\/span><span class=\"pf-chip\">Turborepo<\/span><span class=\"pf-chip\">Hono<\/span><span class=\"pf-chip\">tRPC 11<\/span><\/div>\n<div class=\"pf-meta\">05\/2026 &#8211; atual \u00b7 3 meses<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-email-cleanup\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/email-cleanup-01-ciclo.png\" alt=\"Ciclo aut\u00f4nomo em execu\u00e7\u00e3o, com a classifica\u00e7\u00e3o por mensagem\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-email-cleanup\/\">Bot Aut\u00f4nomo de Limpeza de Caixa Postal<\/a><\/h3>\n<p>Bot que classifica e limpa caixa postal em massa por IA, em ciclo aut\u00f4nomo sobre IMAP.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Node.js<\/span><span class=\"pf-chip\">IMAP<\/span><span class=\"pf-chip\">imap-simple<\/span><span class=\"pf-chip\">mailparser<\/span><\/div>\n<div class=\"pf-meta\">06\/2026 &#8211; atual \u00b7 2 meses<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-asterisk-lab\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/asterisk-lab-01-arquitetura.png\" alt=\"Topologia do laborat\u00f3rio e o caminho da m\u00eddia\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-asterisk-lab\/\">Laborat\u00f3rio de Asterisk como Servidor de M\u00eddia<\/a><\/h3>\n<p>Laborat\u00f3rio que avalia o Asterisk como servidor de m\u00eddia \u2014 relay, NAT, grava\u00e7\u00e3o e transcodifica\u00e7\u00e3o \u2014 para decidir uma troca de arquitetura.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Asterisk<\/span><span class=\"pf-chip\">Docker Compose<\/span><span class=\"pf-chip\">SIPp<\/span><span class=\"pf-chip\">RTP<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 \u00b7 1 m\u00eas<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-vitalpbx-whatsapp\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/vitalpbx-whatsapp-01-arquitetura.png\" alt=\"Sinaliza\u00e7\u00e3o pela Graph API e m\u00eddia por SIP\/RTP\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-vitalpbx-whatsapp\/\">WhatsApp Calling da Meta integrado a PBX<\/a><\/h3>\n<p>Integra\u00e7\u00e3o da chamada de voz do WhatsApp com um PBX Asterisk\/VitalPBX, incluindo o levantamento de como a Meta realmente sinaliza.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Asterisk<\/span><span class=\"pf-chip\">VitalPBX<\/span><span class=\"pf-chip\">WhatsApp Calling<\/span><span class=\"pf-chip\">Meta Graph API<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 \u00b7 1 m\u00eas<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-pfsense-api\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/pfsense-api-01-patch.png\" alt=\"O diff da corre\u00e7\u00e3o, com o teste do projeto ajustado junto\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-pfsense-api\/\">Corre\u00e7\u00e3o na API REST do pfSense<\/a><\/h3>\n<p>Corre\u00e7\u00e3o de um falso positivo de conflito ao criar reserva DHCP est\u00e1tica dentro do pool principal, na API REST do pfSense.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP<\/span><span class=\"pf-chip\">pfSense<\/span><span class=\"pf-chip\">API REST<\/span><span class=\"pf-chip\">DHCP<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 \u00b7 pontual<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-pfsense-suporte-ia\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/pfsense-ia-01-execucao.png\" alt=\"Da pergunta \u00e0 resposta: lista de permiss\u00e3o fechada, execu\u00e7\u00e3o e sa\u00edda completa na conversa\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-pfsense-suporte-ia\/\">Addon de Suporte com IA para pfSense<\/a><\/h3>\n<p>Suporte de primeiro n\u00edvel com IA instalado dentro do pfSense: responde em portugu\u00eas, executa o diagn\u00f3stico no pr\u00f3prio firewall e mostra o que executou.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP 8.3<\/span><span class=\"pf-chip\">pfSense<\/span><span class=\"pf-chip\">FreeBSD<\/span><span class=\"pf-chip\">API REST<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 &#8211; atual \u00b7 em andamento<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-auditor-amd\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/auditor-amd-01-painel.png\" alt=\"As cinco categorias de diverg\u00eancia, com filtro por empresa e por tronco\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-auditor-amd\/\">Auditoria de Classificador de Secret\u00e1ria Eletr\u00f4nica (AMD)<\/a><\/h3>\n<p>Audita o classificador de secret\u00e1ria eletr\u00f4nica de uma plataforma de discagem e mostra, chamada a chamada, onde ele erra.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">Flask<\/span><span class=\"pf-chip\">SQLite<\/span><span class=\"pf-chip\">NumPy<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 &#8211; atual \u00b7 1 m\u00eas<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-amd-dsp\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/amd-dsp-01-cadencia.png\" alt=\"A decis\u00e3o por cad\u00eancia: o que separa um al\u00f4 de uma sauda\u00e7\u00e3o de caixa postal\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-amd-dsp\/\">Detector de Secret\u00e1ria Eletr\u00f4nica por Processamento de Sinais<\/a><\/h3>\n<p>Detecta secret\u00e1ria eletr\u00f4nica por cad\u00eancia de fala, sem IA, sem modelo e sem treino \u2014 com o resultado medido em 80 chamadas reais.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">NumPy<\/span><span class=\"pf-chip\">ffmpeg<\/span><span class=\"pf-chip\">Goertzel<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 1 semana<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-vtiger-crm\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/vtiger-crm-01-diagnostico.png\" alt=\"O diagn\u00f3stico: 11 v\u00ednculos de menu onde deveriam existir 38\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-vtiger-crm\/\">Recupera\u00e7\u00e3o e Opera\u00e7\u00e3o de CRM vtiger em Produ\u00e7\u00e3o<\/a><\/h3>\n<p>Diagn\u00f3stico e corre\u00e7\u00e3o de uma instala\u00e7\u00e3o de vtiger CRM que sobe com o menu quebrado \u2014 com scripts idempotentes e ambiente de demonstra\u00e7\u00e3o.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP<\/span><span class=\"pf-chip\">MySQL<\/span><span class=\"pf-chip\">vtiger CRM 8.4<\/span><span class=\"pf-chip\">Apache<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 1 semana<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-vtiger-assistente-ia\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/vtiger-ia-01-ferramentas.png\" alt=\"As quatro ferramentas expostas ao modelo e as quatro travas de seguran\u00e7a\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-vtiger-assistente-ia\/\">Assistente de IA com Acesso aos Dados do CRM<\/a><\/h3>\n<p>Addon de vtiger que responde perguntas consultando os dados do pr\u00f3prio CRM, com a fronteira de seguran\u00e7a desenhada antes da funcionalidade.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP<\/span><span class=\"pf-chip\">MySQL<\/span><span class=\"pf-chip\">vtiger CRM<\/span><span class=\"pf-chip\">JavaScript<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 3 dias<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-vtiger-eventos-discador\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/vtiger-eventos-01-fluxo.png\" alt=\"Os dois sentidos: callback do PABX para o CRM e Click2Call do CRM para o PABX\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-vtiger-eventos-discador\/\">Integra\u00e7\u00e3o Bidirecional entre CRM e PABX<\/a><\/h3>\n<p>Callback de chamadas e Click2Call ligando CRM e PABX nos dois sentidos, com motor de regras e PABX simulado para teste.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP<\/span><span class=\"pf-chip\">MySQL<\/span><span class=\"pf-chip\">Asterisk AMI<\/span><span class=\"pf-chip\">Docker<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 1 semana<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-migrador-email\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/migrador-email-01-etapas.png\" alt=\"As duas etapas retom\u00e1veis e o \u00edndice que impede duplicar mensagem\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-migrador-email\/\">Migrador de Caixa Postal IMAP para Outlook<\/a><\/h3>\n<p>Aplicativo de mesa que migra uma conta IMAP inteira para o Outlook com backup em mbox, retom\u00e1vel, s\u00f3 com a biblioteca padr\u00e3o do Python.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">Tkinter<\/span><span class=\"pf-chip\">IMAP<\/span><span class=\"pf-chip\">OAuth2<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 1 semana<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-airllm\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/airllm-01-offloading.png\" alt=\"Uma camada por vez: como um modelo de 235B roda em 6 GB de VRAM\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-airllm\/\">Servidor de LLM de 235B em GPU de 6 GB<\/a><\/h3>\n<p>Servidor local compat\u00edvel com a API da OpenAI que roda modelos de 235B em GPU modesta, carregando uma camada por vez.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">FastAPI<\/span><span class=\"pf-chip\">PyTorch<\/span><span class=\"pf-chip\">AirLLM<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 \u00b7 2 semanas<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-skills-hub\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/skills-hub-01-fluxo.png\" alt=\"Baixar, consolidar e instalar: um acervo, quatro destinos\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-skills-hub\/\">Acervo de Skills de Agentes de IA Multi-CLI<\/a><\/h3>\n<p>Acervo consolidado de ~2.060 skills de agentes de IA instalado em quatro CLIs de uma vez, com o custo de contexto medido.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">Bash<\/span><span class=\"pf-chip\">Git<\/span><span class=\"pf-chip\">PageRank<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 3 dias<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-touchtypingtrainer\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/touchtyping-01-recuperacao.png\" alt=\"Do execut\u00e1vel ao fonte verificado, com a confer\u00eancia instru\u00e7\u00e3o a instru\u00e7\u00e3o\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-touchtypingtrainer\/\">Recupera\u00e7\u00e3o de C\u00f3digo-Fonte a partir de Execut\u00e1vel<\/a><\/h3>\n<p>Fonte de um programa recuperado do execut\u00e1vel com verifica\u00e7\u00e3o por bytecode, reorganizado em m\u00f3dulos e estendido com exerc\u00edcios por IA.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">PyInstaller<\/span><span class=\"pf-chip\">bytecode<\/span><span class=\"pf-chip\">engenharia reversa<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 1 semana<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-transcricao-diarizacao\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/transcricao-01-pipeline.png\" alt=\"Do v\u00eddeo \u00e0 legenda com falante, com os dois caminhos de diariza\u00e7\u00e3o\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-transcricao-diarizacao\/\">Pipeline de Transcri\u00e7\u00e3o e Separa\u00e7\u00e3o de Falantes<\/a><\/h3>\n<p>Transcreve reuni\u00f5es em portugu\u00eas e separa os falantes, com dois m\u00e9todos de diariza\u00e7\u00e3o e queda autom\u00e1tica para CPU.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Python<\/span><span class=\"pf-chip\">faster-whisper<\/span><span class=\"pf-chip\">pyannote.audio<\/span><span class=\"pf-chip\">Resemblyzer<\/span><\/div>\n<div class=\"pf-meta\">07\/2026 \u00b7 1 semana<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-latex-resume-builder\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/latex-builder-01-arquitetura.png\" alt=\"A compila\u00e7\u00e3o no navegador e as duas variantes de implanta\u00e7\u00e3o\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-latex-resume-builder\/\">Editor Web de Curr\u00edculos em LaTeX<\/a><\/h3>\n<p>Editor de curr\u00edculos em LaTeX com compila\u00e7\u00e3o no navegador, entregue tamb\u00e9m em variante PHP para hospedagem compartilhada.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">React<\/span><span class=\"pf-chip\">TypeScript<\/span><span class=\"pf-chip\">PHP<\/span><span class=\"pf-chip\">SQLite<\/span><\/div>\n<div class=\"pf-meta\">08\/2026 \u00b7 2 semanas<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"pf-card\">\n      <a href=\"\/index.php\/portfolio-zabbix-ptbr\/\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/zabbix-ptbr-01-cobertura.png\" alt=\"O que foi traduzido, o que n\u00e3o podia ser tocado, e a cobertura do acervo\" loading=\"lazy\"><br \/>\n      <\/a><\/p>\n<div class=\"pf-card-corpo\">\n<h3><a href=\"\/index.php\/portfolio-zabbix-ptbr\/\">Tradu\u00e7\u00e3o dos Templates do Zabbix para Portugu\u00eas<\/a><\/h3>\n<p>Acervo de 35 templates de monitoramento do Zabbix traduzidos para portugu\u00eas, com as chaves de coleta preservadas.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">Zabbix<\/span><span class=\"pf-chip\">XML<\/span><span class=\"pf-chip\">SNMP<\/span><span class=\"pf-chip\">monitoramento<\/span><\/div>\n<div class=\"pf-meta\">12\/2015 \u00b7 contribui\u00e7\u00e3o pontual<\/div>\n<div class=\"pf-cadeado\">\ud83d\udd12 reposit\u00f3rio privado<\/div>\n<\/p><\/div>\n<\/article><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Sistemas que rodam por baixo: telefonia, processamento de sinais, integra\u00e7\u00f5es e infraestrutura. Plataforma de Discador VoIP para Call Center Plataforma completa de discagem para call center: painel de opera\u00e7\u00e3o, motor de discagem horizontal e uma linguagem pr\u00f3pria de fluxo de IVR. PythonFlask 3.1PostgreSQL 17Asterisk PJSIP 01\/2025 &#8211; 07\/2026 \u00b7 12 a 18 meses \ud83d\udd12 reposit\u00f3rio [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-567","page","type-page","status-publish","hentry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"br","enabled_languages":["en","br","it"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"br":{"title":false,"content":false,"excerpt":false},"it":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages\/567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/comments?post=567"}],"version-history":[{"count":5,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages\/567\/revisions"}],"predecessor-version":[{"id":636,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages\/567\/revisions\/636"}],"wp:attachment":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/media?parent=567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}