718 lines
37 KiB
TypeScript
718 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"],
|
|
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),
|
|
);
|
|
}
|