Files
portifolio-evandrodevbr/lib/site-content.ts
T

719 lines
37 KiB
TypeScript

export const siteUrl = "https://evandro.dev.br";
export const siteName = "Evandro.dev.br";
export const intentCtas = {
hiring: {
label: "Avaliar perfil para contratação",
href: "/curriculo",
},
consulting: {
label: "Solicitar consultoria técnica",
href: "/#contact",
},
} as const;
export type CtaIntent = keyof typeof intentCtas;
export const regionCities = [
"Garuva",
"Joinville",
"São Francisco do Sul",
"Itapoá",
"Balneário Barra do Sul",
"Barra Velha",
"Jaraguá do Sul",
"Curitiba",
];
export interface EvidenceSource {
id: string;
label: string;
url: string;
}
export interface SourcedStatement {
text: string;
sourceIds: string[];
}
export interface CaseStudyDetail {
answer: SourcedStatement;
challenge: SourcedStatement;
implementation: SourcedStatement[];
boundaries: SourcedStatement[];
sources: EvidenceSource[];
}
export interface ServicePageContent {
slug: string;
navLabel: string;
eyebrow: string;
seoTitle: string;
metaDescription: string;
headline: string;
intro: string;
answer: string;
audience: string[];
outcomes: string[];
process: string[];
stack: string[];
ctaIntent: "consulting";
ctaLabel: string;
ctaHref: string;
relatedCaseIds: string[];
faq?: { question: string; answer: string }[];
}
export interface CaseStudyContent {
id: string;
title: string;
subtitle: string;
summary: string;
impact: string;
stack: string[];
demoUrl?: string | null;
githubUrl?: string | null;
detail?: CaseStudyDetail;
}
export const servicePages: ServicePageContent[] = [
{
slug: "criacao-de-sites",
navLabel: "Criação de Sites",
eyebrow: "Presença digital",
seoTitle: "Criação de Sites e Sistemas Web com Next.js",
metaDescription:
"Criação de sites institucionais e sistemas web responsivos, com acessibilidade, performance e SEO técnico considerados desde a implementação.",
headline: "Criação de sites institucionais e sistemas web com Next.js.",
answer:
"Crio sites institucionais e sistemas web em Next.js, com escopo definido por objetivos, páginas, integrações e requisitos de acessibilidade, performance e SEO técnico. Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota.",
intro:
"Desenvolvo sites e sistemas web responsivos com estrutura técnica para indexação e evolução do produto, sempre dentro do escopo acordado para conteúdo e integrações.",
audience: [
"Empresas e profissionais que ainda não têm site ou precisam substituir uma experiência lenta e desatualizada.",
"Negócios que precisam organizar conteúdo e fundamentos técnicos para busca orgânica sem criar páginas locais artificiais.",
"Marcas que precisam de um site institucional rápido, com boa performance e pronto para escalar para um sistema web completo.",
],
outcomes: [
"Site institucional rápido, responsivo e com boa nota em Core Web Vitals.",
"Estrutura de SEO técnico (title, metadata, dados estruturados e sitemap) desde o lançamento.",
"Presença digital pronta para captar clientes que pesquisam por serviços na sua cidade.",
"Base de código organizada, fácil de evoluir para loja, sistema ou painel administrativo.",
],
process: [
"Levantamento do objetivo do site, público local e páginas necessárias.",
"Definição de estrutura, conteúdo e palavras-chave locais relevantes.",
"Implementação em Next.js com foco em performance, acessibilidade e SEO.",
"Publicação, configuração de domínio e orientação sobre indexação no Google.",
],
stack: ["Next.js", "TypeScript", "Tailwind CSS", "SEO técnico", "Vercel"],
ctaIntent: "consulting",
ctaLabel: "Conversar sobre o projeto",
ctaHref: "/#contact",
relatedCaseIds: ["sc-plus", "nutriscan"],
faq: [
{
question: "Quanto custa um site profissional?",
answer:
"O custo de um site profissional depende do escopo: número de páginas, funcionalidades, integrações e exigências de SEO técnico e performance. Um site institucional enxuto custa menos do que um sistema web completo. Eu prefiro definir o orçamento depois de entender o objetivo do projeto, em uma conversa inicial sem compromisso.",
},
{
question: "Site sob medida ou WordPress: qual escolher?",
answer:
"Escolha WordPress quando o conteúdo muda toda semana e alguém da equipe precisa publicar sem ajuda técnica; escolha um site sob medida quando performance, SEO técnico e evolução futura pesam mais. Sites feitos sob medida em Next.js carregam mais rápido, têm menos superfície de manutenção e escalam para sistema web sem migração. Para muitos negócios locais, o sob medida compensa pela velocidade e pela longevidade.",
},
{
question: "Você faz manutenção de site depois do lançamento?",
answer:
"Sim. Além do lançamento, eu estruturo projetos pensando na manutenção do site: atualizações de dependências, ajustes de conteúdo, monitoramento de performance e evolução incremental de funcionalidades. Um site profissional não termina na publicação; ele precisa continuar rápido, seguro e bem posicionado. Por isso a entrega inclui orientação sobre indexação no Google e uma base de código organizada, fácil de evoluir.",
},
{
question: "Como funciona o atendimento local e remoto?",
answer:
"Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota. O trabalho segue conversa inicial, levantamento de escopo e entregas acompanhadas de perto; qualquer estratégia local é definida a partir da atuação real de cada negócio.",
},
],
},
{
slug: "engenharia-de-software",
navLabel: "Engenharia de Software",
eyebrow: "Serviço principal",
seoTitle: "Engenharia de Software para Produtos e Sistemas Críticos",
metaDescription:
"Engenharia de software para evolução de produtos, integrações complexas e sistemas críticos. Entrega ponta a ponta com foco em arquitetura clara, estabilidade e velocidade de execução.",
headline:
"Engenharia de software para evoluir produto sem aumentar o caos técnico.",
answer:
"Atuo no diagnóstico, arquitetura, implementação e sustentação de produtos e sistemas, com entregáveis e limites definidos pelo risco técnico e pelo recorte acordado. Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota.",
intro:
"Atuo em discovery, arquitetura, implementação e sustentação de software para equipes que precisam entregar com previsibilidade, sem sacrificar clareza técnica nem operação.",
audience: [
"Times que já tem produto em operação e precisam voltar a ganhar velocidade.",
"Empresas que sofrem com integrações, retrabalho e backlog técnico acumulado.",
"Operações em que confiabilidade e continuidade pesam mais do que velocidade teatral.",
],
outcomes: [
"Arquitetura mais legível para manter e escalar.",
"Entrega incremental com menos retrabalho entre produto e engenharia.",
"Integrações mais robustas entre sistemas, APIs e fluxos internos.",
"Base técnica preparada para crescer sem depender de improviso constante.",
],
process: [
"Diagnóstico do contexto técnico, do risco e do gargalo principal.",
"Definição do recorte de entrega com prioridades e trade-offs claros.",
"Implementação com rastreabilidade, code review e critério de produção.",
"Handoff ou continuidade com documentação e próximo ciclo recomendado.",
],
stack: ["Next.js", "TypeScript", "Node.js", "PostgreSQL", "APIs REST"],
ctaIntent: "consulting",
ctaLabel: "Conversar sobre o projeto",
ctaHref: "/#contact",
relatedCaseIds: ["nutriscan", "reddit-explorer", "sc-plus"],
faq: [
{
question:
"Como contratar um desenvolvedor para integração de sistemas?",
answer:
"Procure um desenvolvedor que comece pelo diagnóstico: entender os dois sistemas, os dados envolvidos e o impacto de falha antes de escrever código. Peça clareza sobre contratos de API, tratamento de erros e observabilidade, não apenas prazo. Na integração de sistemas, o critério principal é reduzir risco operacional; um profissional que explica trade-offs com honestidade costuma entregar com mais previsibilidade.",
},
{
question: "Quanto custa desenvolver um sistema sob medida?",
answer:
"O investimento em um sistema sob medida acompanha a complexidade: regras de negócio, integrações, volume de usuários e requisitos de confiabilidade. Antes de qualquer proposta, eu faço um diagnóstico do contexto para dimensionar o recorte certo e evitar pagar por complexidade desnecessária. Assim o orçamento reflete o problema real, e não uma estimativa genérica por hora ou por tela.",
},
{
question: "Você trabalha com sistemas legados?",
answer:
"Sim. Parte do trabalho de engenharia de software é justamente evoluir sistemas legados sem parar a operação: mapear acoplamentos, estabilizar pontos críticos e migrar aos poucos, com testes e rastreabilidade. Nem todo legado precisa ser reescrito; muitas vezes a decisão certa é isolar o que funciona e modernizar o que trava a entrega. O diagnóstico define esse recorte antes de qualquer refatoração.",
},
{
question: "Como funciona o início do trabalho com você?",
answer:
"Tudo começa com uma conversa objetiva sobre o contexto: o produto, o gargalo e o risco. Depois disso eu proponho um recorte de entrega com prioridades e trade-offs claros, e a implementação segue com code review e critério de produção. Você acompanha o progresso em ciclos curtos, com documentação e handoff estruturado ao final de cada etapa.",
},
],
},
{
slug: "consultoria-nextjs",
navLabel: "Consultoria Next.js",
eyebrow: "Stack especializada",
seoTitle: "Consultoria Next.js para Produtos, SEO e Performance",
metaDescription:
"Consultoria Next.js para App Router, SEO técnico, performance, arquitetura e evolução de produto. Ideal para projetos que precisam escalar sem perder clareza e Core Web Vitals.",
headline:
"Consultoria Next.js para produto, performance e SEO técnico sem gambiarra.",
answer:
"A consultoria Next.js cobre App Router, separação entre server e client, metadata, performance e arquitetura, com diagnóstico e implementação limitados ao escopo combinado. Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota.",
intro:
"Ajudo equipes a usar Next.js com mais critério arquitetural, melhor separação entre server e client, e foco real em performance, indexação e experiência de produto.",
audience: [
"Produtos em Next.js que perderam clareza com o crescimento da base.",
"Sites e plataformas que dependem de SEO técnico e performance para converter.",
"Times que precisam migrar, estabilizar ou revisar arquitetura App Router.",
],
outcomes: [
"Estrutura mais consistente para App Router, Server Components e dados.",
"Melhoras práticas em title, metadata, schema, semântica e links internos.",
"Redução de gargalos em renderização, bundle e fetch.",
"Base mais pronta para crescer sem regressão de SEO ou UX.",
],
process: [
"Auditoria de arquitetura, rotas, metadata e performance.",
"Priorização das correções de maior impacto comercial e técnico.",
"Implementação ou acompanhamento do time interno nas partes críticas.",
"Validação final com build, semântica e consistência entre páginas.",
],
stack: ["Next.js", "React", "TypeScript", "Tailwind CSS", "SEO técnico"],
ctaIntent: "consulting",
ctaLabel: "Solicitar consultoria",
ctaHref: "/#contact",
relatedCaseIds: ["nutriscan", "twins-lab", "sc-plus"],
faq: [
{
question: "Next.js vale a pena para site institucional?",
answer:
"Vale, principalmente quando o site institucional precisa competir por busca orgânica. Next.js entrega renderização no servidor, Core Web Vitals bons e controle fino de metadata e dados estruturados, fatores que pesam no ranking. Para um site simples demais, pode ser mais stack do que o necessário; para quem quer performance, SEO técnico e caminho para evoluir a plataforma, é uma escolha sólida.",
},
{
question: "Quando faz sentido contratar uma consultoria de Next.js?",
answer:
"Faz sentido quando o projeto cresceu e o time perdeu clareza: rotas confusas, mistura excessiva entre client e server, queda de performance ou regressão de SEO. Uma consultoria Next.js audita arquitetura e metadata, prioriza as correções de maior impacto e implementa junto com o time interno nas partes críticas. O retorno aparece em build mais previsível, indexação estável e menos retrabalho.",
},
{
question: "Quanto custa uma consultoria de Next.js?",
answer:
"Depende do formato de trabalho: uma auditoria pontual de arquitetura e performance tem peso diferente de um acompanhamento contínuo ou da implementação completa das correções. O que define o investimento é o tamanho da base, o número de rotas críticas e a urgência dos gargalos. Depois de uma leitura inicial do projeto, eu consigo propor um escopo com expectativa clara de esforço.",
},
{
question: "Como funciona a consultoria remota?",
answer:
"Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota. A consultoria à distância combina auditoria documentada, sessões de alinhamento com o time e implementação guiada nas partes críticas do escopo.",
},
],
},
{
slug: "tauri-rust",
navLabel: "Tauri + Rust",
eyebrow: "Desktop e performance",
seoTitle: "Desenvolvimento Tauri e Rust para Apps Desktop",
metaDescription:
"Desenvolvimento com Tauri e Rust para apps desktop mais leves, seguros e eficientes. Consultoria técnica para produtos que precisam de performance, integração local e distribuição confiável.",
headline:
"Tauri e Rust para apps desktop mais leves, seguros e prontos para operar.",
answer:
"Desenvolvo e avalio aplicativos desktop com Tauri, Rust e interface web quando integração local, distribuição e controle de recursos justificam essa arquitetura. Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota.",
intro:
"Uso Tauri e Rust quando o produto precisa de executável desktop com footprint menor, melhor controle do ambiente local e mais previsibilidade do que stacks mais pesadas.",
audience: [
"Produtos desktop que precisam integrar recursos do sistema operacional.",
"Ferramentas internas com demanda por distribuição leve e manutenção simples.",
"Times avaliando migração de stack desktop ou construindo um MVP técnico robusto.",
],
outcomes: [
"Aplicações desktop com melhor eficiência de recursos.",
"Fluxos locais e integrações nativas com critério técnico mais alto.",
"Arquitetura preparada para distribuição, atualização e manutenção.",
"Menos atrito entre interface moderna e motor de execução confiável.",
],
process: [
"Definição da necessidade real de desktop e do papel de Rust no produto.",
"Desenho da arquitetura entre frontend, camada nativa e distribuição.",
"Implementação dos fluxos críticos com foco em confiabilidade e ergonomia.",
"Empacotamento, validação e estratégia de evolução do aplicativo.",
],
stack: [
"Tauri",
"Rust",
"TypeScript",
"Desktop apps",
"System integration",
],
ctaIntent: "consulting",
ctaLabel: "Conversar sobre o projeto",
ctaHref: "/#contact",
relatedCaseIds: ["gcc-installer"],
faq: [
{
question: "Vale a pena criar app desktop com Tauri e Rust?",
answer:
"Vale quando o aplicativo precisa ser leve, seguro e próximo do sistema operacional. Apps desktop em Tauri usam o WebView do próprio sistema em vez de embutir um navegador inteiro, o que reduz bastante o tamanho do executável e o consumo de memória. Rust entra onde há processamento local crítico. Se o produto é só um formulário em janela, talvez uma web app resolva.",
},
{
question: "Tauri ou Electron: qual escolher?",
answer:
"Prefira Tauri quando distribuição leve, segurança e consumo de recursos importam: o executável final é muito menor porque reaproveita o WebView do sistema. Electron ainda faz sentido quando o time já domina Node.js e precisa de ecossistema maduro. Em projetos novos que exigem integração nativa e desempenho, eu costumo recomendar Tauri com lógica crítica em Rust e interface web moderna.",
},
{
question: "Rust é difícil de manter para times pequenos?",
answer:
"Rust tem curva de aprendizado real, mas a manutenção tende a ficar mais fácil no longo prazo: o compilador elimina categorias inteiras de bugs antes da produção. Para times pequenos, a estratégia é usar Rust apenas na camada que justifica o investimento, como integração com o sistema, performance e segurança, e manter a interface em TypeScript. Assim a complexidade fica onde traz retorno.",
},
{
question: "Como funciona o atendimento para aplicativos desktop?",
answer:
"Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota. O fluxo cobre arquitetura, definição do papel de Rust, implementação dos fluxos críticos e estratégia de distribuição e atualização do executável.",
},
],
},
{
slug: "integracao-hardware-software-iot",
navLabel: "Hardware + Software + IoT",
eyebrow: "Produtos conectados",
seoTitle: "Integração Hardware + Software e IoT",
metaDescription:
"Integração hardware + software, IoT e fluxos conectados para produtos e operações críticas. Da coleta de dados ao painel, com APIs, telemetria e arquitetura de software confiável.",
headline:
"Integração hardware + software para produtos conectados que precisam operar de verdade.",
answer:
"Estruturo integrações entre dispositivos, backend, banco e interfaces, com contratos, tratamento de falhas e documentação definidos para o fluxo necessário. Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota.",
intro:
"Atuo na camada que costuma quebrar primeiro: a fronteira entre dispositivo, backend, painel e operação. Estruturo esses fluxos para que dados, comando e observabilidade funcionem como produto, não como remendo.",
audience: [
"Empresas com dispositivos, sensores ou equipamentos conectados ao software.",
"Operações que dependem de telemetria, dashboards e troca de dados em tempo real.",
"Times que precisam ligar produto digital a processos físicos com confiabilidade.",
],
outcomes: [
"Fluxos mais robustos entre dispositivo, API, banco e interface.",
"Menos perda de contexto entre operação física e produto digital.",
"Arquitetura com observabilidade e manutenção mais previsível.",
"Base melhor para evoluir IA, automação ou analytics em cima dos dados.",
],
process: [
"Mapeamento de sinal, eventos, integrações e pontos de falha.",
"Definição de contratos entre hardware, backend e interfaces.",
"Implementação do fluxo com testes e tratamento de exceções relevantes.",
"Entrega com documentação de operação, limites e próximo passo.",
],
stack: [
"IoT",
"WebSockets",
"APIs",
"Dashboards",
"Integração de sistemas",
],
ctaIntent: "consulting",
ctaLabel: "Conversar sobre o projeto",
ctaHref: "/#contact",
relatedCaseIds: ["twins-lab"],
faq: [
{
question: "Como integrar equipamentos e sistemas legados?",
answer:
"Comece mapeando o que o equipamento realmente expõe: portas seriais, sinais digitais, arquivos, protocolos industriais ou APIs antigas. A partir desse inventário, eu desenho uma camada de integração com contratos claros entre hardware, backend e interfaces, com tratamento de falha e observabilidade desde o primeiro dia. Sistemas legados raramente precisam ser substituídos; quase sempre precisam ser conectados com segurança.",
},
{
question: "O que é integração hardware e software na prática?",
answer:
"É fazer o dado físico virar informação útil: o sensor registra, o backend valida e armazena, o painel mostra e o comando volta para o equipamento quando necessário. Na prática, isso envolve telemetria, WebSockets ou filas para tempo real, contratos de API e tratamento dos casos em que o dispositivo cai. Quando essa fronteira é bem desenhada, a operação física e o produto digital falam a mesma língua.",
},
{
question: "Vale a pena investir em IoT na indústria?",
answer:
"Vale quando existe dado físico hoje desperdiçado: leitura manual, planilha isolada ou decisão por estimativa. Projetos de IoT podem transformar esse dado em telemetria e painéis, mas o investimento só compensa quando a integração é tratada como produto, com observabilidade e manutenção previstas.",
},
{
question: "Como funciona um projeto de integração com você?",
answer:
"O projeto começa com o mapeamento de sinal, eventos, integrações existentes e pontos de falha. Em seguida eu defino os contratos entre hardware, backend e interfaces, implemento o fluxo com testes e tratamento das exceções relevantes, e entrego com documentação de operação, limites conhecidos e próximo passo recomendado. Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota.",
},
],
},
{
slug: "arquitetura-de-software",
navLabel: "Arquitetura de Software",
eyebrow: "Diagnóstico e decisão",
seoTitle: "Arquitetura de Software e Consultoria Técnica",
metaDescription:
"Arquitetura de software para reduzir complexidade, destravar evolução e organizar integrações críticas. Consultoria técnica para produtos que precisam de direção antes de mais código.",
headline:
"Arquitetura de software para times que precisam de clareza antes de acelerar.",
answer:
"Realizo diagnóstico de arquitetura com leitura da base, fluxos e integrações, seguido por riscos, trade-offs e um plano de transição executável para o escopo analisado. Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota.",
intro:
"Quando o problema não é falta de código, mas excesso de acoplamento, retrabalho e decisão mal distribuída, a arquitetura certa devolve velocidade, leitura e confiança ao time.",
audience: [
"Produtos que cresceram rápido e perderam legibilidade técnica.",
"Times travados entre refatorar tudo ou seguir acumulando dívida.",
"Operações com muitas dependências, integrações ou regras sensíveis.",
],
outcomes: [
"Mapa claro dos gargalos e do risco técnico real.",
"Prioridades de arquitetura ligadas a impacto de negócio.",
"Plano executável de refatoração, estabilização ou reestruturação.",
"Mais qualidade de decisão entre produto, engenharia e operação.",
],
process: [
"Leitura da base, fluxos, integrações e dores do time.",
"Diagnóstico escrito com pontos de risco, oportunidades e trade-offs.",
"Proposta de arquitetura alvo e plano de transição realista.",
"Acompanhamento da execução ou handoff estruturado para o time interno.",
],
stack: [
"Arquitetura de software",
"APIs",
"Performance",
"Integrações",
"Sistemas críticos",
],
ctaIntent: "consulting",
ctaLabel: "Solicitar diagnóstico",
ctaHref: "/#contact",
relatedCaseIds: ["nutriscan", "twins-lab", "reddit-explorer"],
faq: [
{
question: "Quando investir em arquitetura de software?",
answer:
"Invista quando o custo de mudança começou a crescer mais rápido que o valor entregue: toda feature demora, todo deploy assusta e a dívida técnica vira pauta constante. Arquitetura de software vale o investimento nesse ponto, porque organiza acoplamento, integrações e responsabilidades antes que o problema multiplique. Antes do primeiro produto validado, geralmente basta uma base simples e bem separada.",
},
{
question: "O que é dívida técnica e como resolver?",
answer:
"Dívida técnica é o acúmulo de decisões rápidas que hoje custam velocidade: código duplicado, acoplamento excessivo, falta de testes e integrações frágeis. Ela se resolve com diagnóstico antes de refatoração: mapear os gargalos reais, priorizar o que trava entrega e operação, e evoluir em incrementos seguros. Reescrever tudo raramente é a resposta; a maioria dos sistemas melhora com transição planejada.",
},
{
question: "Como funciona um diagnóstico de arquitetura?",
answer:
"Eu leio a base de código, os fluxos, as integrações e as dores do time, e devolvo um diagnóstico escrito com pontos de risco, oportunidades e trade-offs explícitos. A partir dele vem a proposta de arquitetura alvo e um plano de transição realista, priorizado por impacto de negócio. O formato funciona tanto para times internos quanto para fundadores técnicos conduzindo a própria evolução.",
},
{
question: "Como funciona a consultoria de arquitetura remota?",
answer:
"Base em Garuva, atendimento a projetos no Norte de Santa Catarina e atuação remota. O diagnóstico e o acompanhamento funcionam à distância com leitura técnica, alinhamentos e handoff documentado para o time responsável.",
},
],
},
];
export const caseStudies: CaseStudyContent[] = [
{
id: "nutriscan",
title: "NutriScan",
subtitle: "Consulta de produtos por nome e código de barras",
summary:
"Aplicação web para consultar produtos alimentícios por nome ou código de barras, combinando cache JSON com a API Open Food Facts.",
impact:
"Reduzir a dependência da API externa e manter um caminho explícito para buscas e consulta por código.",
stack: ["Next.js", "TypeScript", "Cache JSON", "Open Food Facts"],
demoUrl: "https://nutriscan.evandro.dev.br",
githubUrl: "https://github.com/evandrodevbr/nutriscan",
detail: {
answer: {
text: "Aplicação web para consultar produtos alimentícios por nome ou código de barras, combinando cache JSON com a API Open Food Facts.",
sourceIds: ["nutri-search", "nutri-barcode", "nutri-wrapper"],
},
challenge: {
text: "Reduzir a dependência da API externa e manter um caminho explícito para buscas e consulta por código.",
sourceIds: ["nutri-search", "nutri-barcode"],
},
implementation: [
{
text: "A busca consulta o cache primeiro, permite modo somente-cache e recorre ao Open Food Facts quando faltam resultados.",
sourceIds: ["nutri-search"],
},
{
text: "A consulta por código remove caracteres não numéricos, aceita de 8 a 13 dígitos, consulta cache e usa a API externa como fallback.",
sourceIds: ["nutri-barcode"],
},
{
text: "O wrapper cancela requisições após oito segundos e diferencia busca por nome de busca por código.",
sourceIds: ["nutri-wrapper"],
},
],
boundaries: [
{
text: "A página não afirma PWA, MongoDB, histórico de usuários, disponibilidade, volume de produtos ou resultado de saúde, porque as fontes atuais não sustentam esse conjunto de forma consistente.",
sourceIds: [
"nutri-search",
"nutri-barcode",
"nutri-wrapper",
"nutri-package",
"nutri-prisma",
"nutri-readme",
],
},
],
sources: [
{
id: "nutri-search",
label: "Rota de busca",
url: "https://github.com/evandrodevbr/nutriscan/blob/ef0e6d4eca1f8588bb6981c1cfa58e4b7db1302b/app/api/search/route.ts",
},
{
id: "nutri-barcode",
label: "Rota de consulta por código",
url: "https://github.com/evandrodevbr/nutriscan/blob/ef0e6d4eca1f8588bb6981c1cfa58e4b7db1302b/app/api/products/%5Bbarcode%5D/route.ts",
},
{
id: "nutri-wrapper",
label: "Wrapper Open Food Facts",
url: "https://github.com/evandrodevbr/nutriscan/blob/ef0e6d4eca1f8588bb6981c1cfa58e4b7db1302b/lib/openFoodFactsApi.ts",
},
{
id: "nutri-package",
label: "Manifesto do projeto",
url: "https://github.com/evandrodevbr/nutriscan/blob/ef0e6d4eca1f8588bb6981c1cfa58e4b7db1302b/package.json",
},
{
id: "nutri-prisma",
label: "Schema Prisma",
url: "https://github.com/evandrodevbr/nutriscan/blob/ef0e6d4eca1f8588bb6981c1cfa58e4b7db1302b/prisma/schema.prisma",
},
{
id: "nutri-readme",
label: "README do projeto",
url: "https://github.com/evandrodevbr/nutriscan/blob/ef0e6d4eca1f8588bb6981c1cfa58e4b7db1302b/README.md",
},
],
},
},
{
id: "twins-lab",
title: "Twins Lab",
subtitle: "Protótipo de gêmeo digital industrial com SSE",
summary:
"Protótipo de gêmeo digital industrial com autenticação, simulador de reator, persistência MongoDB e streaming de eventos do servidor.",
impact:
"Expor estados simulados do reator a uma interface autenticada e manter histórico/status do simulador.",
stack: ["Next.js", "TypeScript", "NextAuth", "MongoDB", "SSE"],
demoUrl: "https://twins.evandro.dev.br",
githubUrl: "https://github.com/evandrodevbr/twins-lab",
detail: {
answer: {
text: "Protótipo de gêmeo digital industrial com autenticação, simulador de reator, persistência MongoDB e streaming de eventos do servidor.",
sourceIds: ["twins-package", "twins-stream", "twins-simulator"],
},
challenge: {
text: "Expor estados simulados do reator a uma interface autenticada e manter histórico/status do simulador.",
sourceIds: ["twins-stream", "twins-simulator"],
},
implementation: [
{
text: "A rota exige sessão do NextAuth antes de abrir o stream.",
sourceIds: ["twins-stream"],
},
{
text: "A resposta usa `text/event-stream`, envia estados/dados/erros em intervalos de dois segundos e limita a conexão a dez minutos.",
sourceIds: ["twins-stream"],
},
{
text: "O simulador salva dados e estado no MongoDB e notifica clientes quando execução ou cenário mudam.",
sourceIds: ["twins-simulator"],
},
],
boundaries: [
{
text: "O case não usa as alegações de economia, ROI, precisão, manutenção preditiva futura, equipamento real, WebSocket, OpenRouter ou atualização sub-segundo.",
sourceIds: [
"twins-package",
"twins-stream",
"twins-simulator",
"twins-readme",
],
},
],
sources: [
{
id: "twins-package",
label: "Manifesto do projeto",
url: "https://github.com/evandrodevbr/twins-lab/blob/f83f99a7417f16ece0cd7fe4832ba122e7152d0c/package.json",
},
{
id: "twins-stream",
label: "Rota de streaming do reator",
url: "https://github.com/evandrodevbr/twins-lab/blob/f83f99a7417f16ece0cd7fe4832ba122e7152d0c/app/api/reactor/stream/route.ts",
},
{
id: "twins-simulator",
label: "Simulador do reator",
url: "https://github.com/evandrodevbr/twins-lab/blob/f83f99a7417f16ece0cd7fe4832ba122e7152d0c/simulators/reactor/reactor-simulator.ts",
},
{
id: "twins-readme",
label: "README do projeto",
url: "https://github.com/evandrodevbr/twins-lab/blob/f83f99a7417f16ece0cd7fe4832ba122e7152d0c/README.md",
},
],
},
},
{
id: "reddit-explorer",
title: "Reddit Posts Explorer",
subtitle: "Aplicação orientada a dados com API, cache e busca",
summary:
"Projeto em Astro e MongoDB para explorar conteúdo com filtros, ordenação e cache, mantendo boa experiência em consultas frequentes.",
impact:
"Mostra capacidade de desenhar consumo de API, camada de persistência e experiência de busca sem sobrecarregar a aplicação.",
stack: ["Astro.js", "MongoDB", "Mongoose", "TypeScript", "Reddit API"],
githubUrl: "https://github.com/evandrodevbr/reddit-search",
},
{
id: "sc-plus",
title: "SC Plus Aquicultura",
subtitle: "Site institucional em Next.js com foco em performance e SEO",
summary:
"Landing page em Next.js 15 otimizada para Core Web Vitals, metadata e estrutura técnica de indexação.",
impact:
"Exemplo de projeto em que clareza de mensagem, velocidade e SEO técnico trabalham juntos.",
stack: ["Next.js 15", "React 19", "Tailwind CSS 4", "TypeScript"],
demoUrl: "https://scplus.evandro.dev.br",
githubUrl: "https://github.com/evandrodevbr/scplus",
},
{
id: "gcc-installer",
title: "MinGW GCC Installer",
subtitle:
"Ferramenta desktop para automação de ambiente de desenvolvimento",
summary:
"Aplicação em Python para simplificar setup local no Windows, com download assíncrono, checagem de compatibilidade e integração com PATH.",
impact:
"Mostra familiaridade com software desktop, integração com sistema operacional e automação de setup técnico.",
stack: ["Python", "Tkinter", "Win32 API", "Threading", "7-Zip"],
githubUrl: "https://github.com/evandrodevbr/gcc-installer",
},
{
id: "as-servicos",
title: "AS Serviços",
subtitle: "Site institucional com cena 3D procedural",
summary:
"Site institucional em Next.js 16 que representa quatro frentes de engenharia com uma cena Three.js gerada em código: uma casa wireframe e uma placa-mãe ligadas ao progresso da rolagem.",
impact:
"Representar engenharia física e software na mesma narrativa visual sem depender de um modelo 3D pronto.",
stack: ["Next.js 16", "Three.js", "TypeScript"],
demoUrl: "https://asservicos.com",
githubUrl: "https://github.com/evandrodevbr/as-servicos",
detail: {
answer: {
text: "Site institucional em Next.js 16 que representa quatro frentes de engenharia com uma cena Three.js gerada em código: uma casa wireframe e uma placa-mãe ligadas ao progresso da rolagem.",
sourceIds: ["as-readme", "as-package", "as-engine"],
},
challenge: {
text: "Representar engenharia física e software na mesma narrativa visual sem depender de um modelo 3D pronto.",
sourceIds: ["as-readme", "as-engine"],
},
implementation: [
{
text: "O motor monta casa, instalação elétrica e placa-mãe com geometrias e linhas do Three.js.",
sourceIds: ["as-engine"],
},
{
text: "O canvas converte a rolagem em progresso de 0 a 1 e o entrega ao motor da cena.",
sourceIds: ["as-canvas"],
},
{
text: "A qualidade pode cair para `static`, `low`, `medium` ou `high` conforme WebGL, reduced motion, economia de dados, conexão e capacidade do dispositivo.",
sourceIds: ["as-engine"],
},
],
boundaries: [
{
text: "O case demonstra implementação e decisões técnicas; não atribui geração de leads, ranking ou ganho de performance.",
sourceIds: [],
},
],
sources: [
{
id: "as-readme",
label: "README do projeto",
url: "https://github.com/evandrodevbr/as-servicos/blob/abeb9946a704139336942bfd41ad163ccfe1e685/README.md",
},
{
id: "as-package",
label: "Manifesto do projeto",
url: "https://github.com/evandrodevbr/as-servicos/blob/abeb9946a704139336942bfd41ad163ccfe1e685/package.json",
},
{
id: "as-engine",
label: "Motor da cena Three.js",
url: "https://github.com/evandrodevbr/as-servicos/blob/abeb9946a704139336942bfd41ad163ccfe1e685/lib/three/engine.ts",
},
{
id: "as-canvas",
label: "Canvas e progresso da cena",
url: "https://github.com/evandrodevbr/as-servicos/blob/abeb9946a704139336942bfd41ad163ccfe1e685/components/scene/scene-canvas.tsx",
},
],
},
},
];
export const serviceHubLinks = servicePages.map((service) => ({
href: `/servicos/${service.slug}`,
label: service.navLabel,
description: service.metaDescription,
}));
export function getServicePage(slug: string) {
return servicePages.find((service) => service.slug === slug);
}
export function getRelatedCases(caseIds: string[]) {
return caseStudies.filter((caseStudy) => caseIds.includes(caseStudy.id));
}
export function getRelatedServices(caseId: string): ServicePageContent[] {
return servicePages.filter(({ relatedCaseIds }) =>
relatedCaseIds.includes(caseId),
);
}