738 lines
37 KiB
TypeScript
738 lines
37 KiB
TypeScript
export const siteUrl = "https://evandro.dev.br";
|
|
export const siteName = "Evandro.dev.br";
|
|
|
|
export const intentCtas = {
|
|
project: {
|
|
label: "Conversar sobre meu projeto",
|
|
href: "/#contact",
|
|
},
|
|
consulting: {
|
|
label: "Conhecer as soluções",
|
|
href: "/servicos",
|
|
},
|
|
} 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[];
|
|
examples: string[];
|
|
technicalDetails: 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: "Sites profissionais",
|
|
eyebrow: "Presença digital",
|
|
seoTitle: "Criação de Sites Profissionais e Institucionais",
|
|
metaDescription:
|
|
"Sites profissionais para apresentar serviços, produtos e canais de contato. Desenvolvimento responsivo com acessibilidade e SEO técnico, em escopo definido.",
|
|
headline: "Um site que explica seu negócio.",
|
|
answer:
|
|
"Crio sites para apresentar sua empresa, mostrar o que você oferece e facilitar o contato. O projeto considera leitura no celular e no computador, conteúdo, páginas e funcionalidades combinadas antes do desenvolvimento.",
|
|
intro:
|
|
"Apresente seu negócio na internet com um site profissional: serviços, produtos, portfólio e caminhos claros para entrar em contato.",
|
|
audience: [
|
|
"Empresas e profissionais que ainda não têm site ou precisam substituir uma presença desatualizada.",
|
|
"Negócios que querem explicar seus serviços sem depender apenas das redes sociais.",
|
|
"Equipes que precisam organizar páginas, conteúdo e contato em um endereço próprio.",
|
|
],
|
|
outcomes: [
|
|
"Páginas com uma sequência clara: o que você faz, para quem e como entrar em contato.",
|
|
"Layout adaptado a celular e computador, com atenção à leitura e à navegação.",
|
|
"Publicação e orientação de uso dentro do escopo; domínio, hospedagem, produção de conteúdo e manutenção são combinados na proposta.",
|
|
],
|
|
examples: [
|
|
"Um site institucional para uma prestadora de serviços, com apresentação, áreas de atuação e contato.",
|
|
"Um catálogo para mostrar produtos e receber consultas, sem assumir uma loja com pagamento on-line.",
|
|
"Uma página de campanha para explicar uma oferta e orientar o próximo passo.",
|
|
],
|
|
process: [
|
|
"Conversamos sobre o negócio, o público e o que o visitante precisa conseguir fazer.",
|
|
"Combinamos páginas, conteúdo, referências visuais, responsabilidades e orçamento.",
|
|
"Você acompanha a construção e revisa conteúdo e navegação em etapas.",
|
|
"Publicamos após a revisão e definimos o que entra em suporte ou evolução posterior.",
|
|
],
|
|
technicalDetails: [
|
|
"Implementação com Next.js e TypeScript, escolhendo renderização e carregamento conforme o conteúdo e as integrações.",
|
|
"HTML semântico, navegação por teclado, imagens dimensionadas e avaliação de carregamento orientam acessibilidade e performance.",
|
|
"Metadados, URLs canônicas, sitemap e dados estruturados quando aplicáveis ajudam a interpretação do site pelos buscadores; não garantem posição no Google.",
|
|
],
|
|
stack: ["Next.js", "TypeScript", "Tailwind CSS", "SEO técnico", "Vercel"],
|
|
ctaIntent: "consulting",
|
|
ctaLabel: "Conversar sobre meu site",
|
|
ctaHref: "/#contact",
|
|
relatedCaseIds: ["sc-plus", "nutriscan"],
|
|
faq: [
|
|
{
|
|
question: "Quanto custa e o que preciso ter pronto?",
|
|
answer:
|
|
"O orçamento depende das páginas, conteúdo, funcionalidades e integrações. Podemos começar com uma conversa sobre seu negócio; nela definimos quem fornece textos, imagens e acessos, além dos custos de domínio e hospedagem.",
|
|
},
|
|
{
|
|
question: "O site também funciona no celular?",
|
|
answer:
|
|
"Sim, a proposta considera um site responsivo, acessado pelo navegador no celular e no computador. Isso não equivale a um aplicativo instalado; se você precisa de um app, avaliamos esse escopo separadamente.",
|
|
},
|
|
{
|
|
question: "Posso contratar melhorias depois da publicação?",
|
|
answer:
|
|
"Sim. Ajustes de conteúdo, novas páginas, manutenção e novas funcionalidades podem ser combinados em continuidade. O que está incluído na entrega inicial e no suporte fica definido na proposta.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: "engenharia-de-software",
|
|
navLabel: "Sistemas web e aplicativos mobile",
|
|
eyebrow: "Engenharia de software",
|
|
seoTitle: "Desenvolvimento de Sistemas Web e Aplicativos Mobile",
|
|
metaDescription:
|
|
"Sistemas web e aplicativos mobile sob medida, integração entre ferramentas e evolução de software existente. Escopo, plataformas e entregas definidos por projeto.",
|
|
headline: "Sistemas e apps para o seu trabalho.",
|
|
answer:
|
|
"Desenvolvo sistemas web, usados no navegador, e aplicativos mobile para celular. Também conecto ferramentas e evoluo sistemas existentes. Definimos juntos os usuários, as funções, as plataformas atendidas e a primeira entrega útil para o negócio.",
|
|
intro:
|
|
"Organize a operação com um sistema web ou aplicativo mobile sob medida. Conecte ferramentas, reduza tarefas repetidas ou melhore um sistema que já existe.",
|
|
audience: [
|
|
"Empresas que controlam processos em planilhas, mensagens e ferramentas que não conversam entre si.",
|
|
"Negócios que precisam de um sistema interno, área de clientes ou aplicativo para uso no celular.",
|
|
"Equipes com software em operação que precisam corrigir problemas e continuar evoluindo.",
|
|
],
|
|
outcomes: [
|
|
"Uma primeira versão com as funções prioritárias, em vez de tentar resolver toda a operação de uma vez.",
|
|
"Fluxos para consultar, registrar e compartilhar informações, com acessos definidos por perfil.",
|
|
"Escopo explícito para web ou mobile: dispositivos, sistemas operacionais, uso sem internet e distribuição são avaliados na proposta, não presumidos.",
|
|
],
|
|
examples: [
|
|
"Um sistema web para acompanhar pedidos e atendimentos em uma única tela.",
|
|
"Um aplicativo mobile para uma equipe consultar tarefas e registrar visitas pelo celular.",
|
|
"Uma integração para transferir dados entre o sistema de vendas e outra ferramenta, sem digitação duplicada.",
|
|
],
|
|
process: [
|
|
"Entendemos a rotina atual, quem usa o sistema e onde estão as dificuldades.",
|
|
"Escolhemos o primeiro fluxo a entregar e combinamos plataformas, integrações e critérios de aceitação.",
|
|
"Construímos em etapas curtas, com demonstrações e revisão de quem vai usar.",
|
|
"Validamos no ambiente combinado e entregamos orientações para operação, manutenção e próximos passos.",
|
|
],
|
|
technicalDetails: [
|
|
"A arquitetura parte das regras do negócio, dos limites entre módulos e dos contratos de API. Migrações e integrações consideram os dados e o sistema já em uso.",
|
|
"Autorização por perfil, validação no servidor, tratamento de falhas e testes dos fluxos críticos entram conforme os riscos do projeto.",
|
|
"A experiência profissional declarada inclui Web e Mobile. A tecnologia mobile é definida após avaliar dispositivos e recursos necessários; os cases abaixo não comprovam um framework mobile específico.",
|
|
],
|
|
stack: ["Next.js", "TypeScript", "Node.js", "PostgreSQL", "APIs REST"],
|
|
ctaIntent: "consulting",
|
|
ctaLabel: "Conversar sobre meu sistema ou app",
|
|
ctaHref: "/#contact",
|
|
relatedCaseIds: ["nutriscan", "reddit-explorer", "sc-plus"],
|
|
faq: [
|
|
{
|
|
question: "Preciso saber qual tecnologia usar?",
|
|
answer:
|
|
"Não. Começamos pelo que as pessoas precisam fazer. Um sistema web pode resolver o uso pelo navegador; um aplicativo mobile pode fazer sentido quando a rotina exige recursos do celular. A escolha vem depois de entender o contexto.",
|
|
},
|
|
{
|
|
question: "Você também trabalha com sistemas que já existem?",
|
|
answer:
|
|
"Sim. Posso diagnosticar problemas, integrar ferramentas, corrigir fluxos e implementar novas funções. Primeiro avaliamos a base atual e os riscos para definir uma mudança que não dependa de reescrever tudo.",
|
|
},
|
|
{
|
|
question: "O aplicativo inclui publicação em lojas?",
|
|
answer:
|
|
"A forma de distribuição precisa ser avaliada no projeto. Plataformas, contas, requisitos de terceiros e eventual publicação são definidos antes da contratação; não fazem parte de uma promessa genérica de entrega.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: "consultoria-nextjs",
|
|
navLabel: "Melhorias em sites e sistemas Next.js",
|
|
eyebrow: "Consultoria Next.js",
|
|
seoTitle: "Consultoria Next.js para Sites e Sistemas",
|
|
metaDescription:
|
|
"Diagnóstico e melhorias em sites e sistemas Next.js: carregamento, navegação, SEO técnico e manutenção. Prioridades explicadas e implementação em escopo definido.",
|
|
headline: "Seu projeto Next.js pode funcionar melhor.",
|
|
answer:
|
|
"Analiso sites e sistemas feitos em Next.js para entender lentidão, falhas ou dificuldades de manutenção. Você recebe prioridades explicadas, um plano de correção e, quando contratado, a implementação das melhorias.",
|
|
intro:
|
|
"Seu site ou sistema Next.js está lento, apresenta falhas ou ficou difícil de manter? Identifique a causa e organize as melhorias antes de investir em mais mudanças.",
|
|
audience: [
|
|
"Empresas com um site ou sistema em Next.js que não está atendendo bem seus usuários.",
|
|
"Equipes que precisam de apoio para investigar falhas, carregamento ou indexação.",
|
|
"Responsáveis por um produto que precisam entender o que corrigir primeiro e por quê.",
|
|
],
|
|
outcomes: [
|
|
"Diagnóstico com problemas observados, impacto para o usuário e prioridades.",
|
|
"Plano de correção que distingue ajustes pontuais de mudanças maiores.",
|
|
"Implementação ou acompanhamento do time, conforme a contratação; metas de performance dependem da medição e do contexto, sem promessa de ranking.",
|
|
],
|
|
examples: [
|
|
"Investigar por que uma página demora a abrir no celular.",
|
|
"Corrigir navegação e informações de páginas que não são interpretadas corretamente pelos buscadores.",
|
|
"Ajudar uma equipe a incluir novas funções sem tornar o sistema mais difícil de manter.",
|
|
],
|
|
process: [
|
|
"Você apresenta os sintomas, o objetivo e os acessos necessários para a análise.",
|
|
"Investigo o projeto e explico as causas encontradas e suas consequências.",
|
|
"Combinamos prioridades e o formato: diagnóstico, correções ou apoio ao time.",
|
|
"Reavaliamos os fluxos alterados e registramos as orientações de continuidade.",
|
|
],
|
|
technicalDetails: [
|
|
"Revisão de App Router, fronteiras entre Server e Client Components, estratégias de renderização, cache e busca de dados.",
|
|
"Investigação de Core Web Vitals, tamanho do JavaScript, imagens e requisições; correções são comparadas com medições do cenário afetado.",
|
|
"Auditoria de metadados, canônicas, sitemap, dados estruturados e links internos, preservando URLs e requisitos de indexação nas mudanças.",
|
|
],
|
|
stack: ["Next.js", "React", "TypeScript", "Tailwind", "SEO técnico"],
|
|
ctaIntent: "consulting",
|
|
ctaLabel: "Conversar sobre meu projeto Next.js",
|
|
ctaHref: "/#contact",
|
|
relatedCaseIds: ["nutriscan", "twins-lab", "sc-plus"],
|
|
faq: [
|
|
{
|
|
question: "Não sei se meu site usa Next.js. Posso conversar?",
|
|
answer:
|
|
"Sim. Traga o endereço do site e o problema percebido. Identificamos o contexto e se essa consultoria é adequada antes de combinar uma análise mais profunda.",
|
|
},
|
|
{
|
|
question: "A consultoria inclui corrigir o código?",
|
|
answer:
|
|
"Pode incluir. Um diagnóstico pontual, a implementação das correções e o acompanhamento de um time são formatos diferentes. A proposta deixa claro quais deles entram e como a entrega será avaliada.",
|
|
},
|
|
{
|
|
question: "Precisa substituir o site inteiro?",
|
|
answer:
|
|
"Não necessariamente. A análise busca a causa do problema e o menor conjunto de mudanças que atende ao objetivo. Uma migração só é recomendada quando os benefícios e os riscos justificam o trabalho.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: "tauri-rust",
|
|
navLabel: "Aplicativos desktop para Windows e Linux",
|
|
eyebrow: "Aplicativos desktop",
|
|
seoTitle: "Aplicativos Desktop para Windows e Linux com Tauri e Rust",
|
|
metaDescription:
|
|
"Desenvolvimento de aplicativos desktop para Windows e Linux com Tauri e Rust. Ferramentas locais, arquivos e integrações com compatibilidade definida por projeto.",
|
|
headline: "Aplicativos para Windows e Linux.",
|
|
answer:
|
|
"Desenvolvo aplicativos desktop para trabalhar no computador, lidar com arquivos e integrar recursos locais. Windows e Linux são plataformas oferecidas; as versões, distribuições e funções compatíveis são definidas e validadas no escopo de cada projeto.",
|
|
intro:
|
|
"Crie uma ferramenta para Windows ou Linux: organize arquivos, execute rotinas locais ou conecte o computador aos sistemas da empresa.",
|
|
audience: [
|
|
"Empresas que precisam de uma ferramenta instalada, em vez de depender apenas do navegador.",
|
|
"Equipes que trabalham com arquivos, processamento local ou recursos do computador.",
|
|
"Produtos que precisam avaliar uma aplicação desktop nova ou a evolução de uma ferramenta existente.",
|
|
],
|
|
outcomes: [
|
|
"Uma interface para executar as tarefas locais prioritárias e entender o resultado de cada operação.",
|
|
"Compatibilidade acordada para Windows e/ou Linux, incluindo versões, distribuições e dependências necessárias.",
|
|
"Instalação, atualizações, permissões e uso sem internet tratados no escopo; suportar uma plataforma não significa compatibilidade automática com todas as outras.",
|
|
],
|
|
examples: [
|
|
"Um aplicativo para conferir e organizar arquivos antes de enviá-los a outro sistema.",
|
|
"Uma ferramenta interna que executa uma rotina no computador e mostra seu andamento.",
|
|
"Uma interface local para acessar dados ou recursos que não estão disponíveis em um site comum.",
|
|
],
|
|
process: [
|
|
"Entendemos a tarefa e confirmamos se um aplicativo instalado faz mais sentido que um sistema web.",
|
|
"Definimos Windows e/ou Linux, ambientes de uso, acesso a arquivos e integrações necessárias.",
|
|
"Construímos e demonstramos os fluxos principais nos ambientes combinados.",
|
|
"Validamos instalação e operação e entregamos as instruções e a estratégia de atualização acordadas.",
|
|
],
|
|
technicalDetails: [
|
|
"Tauri conecta uma interface web a comandos nativos em Rust. Permissões e acesso a arquivos devem ser limitados ao necessário, com validação na fronteira entre interface e sistema.",
|
|
"Empacotamento e dependências do WebView variam por sistema. Integrações nativas precisam ser verificadas por alvo; o mesmo código não elimina trabalho específico de Windows ou Linux.",
|
|
"O case GCC Installer abaixo é uma referência de automação desktop em Python/Tkinter e Win32 API no Windows. Não é uma implementação em Tauri/Rust nem comprovação de implantação em Linux.",
|
|
],
|
|
stack: [
|
|
"Tauri",
|
|
"Rust",
|
|
"TypeScript",
|
|
"Desktop Apps",
|
|
"System Integration",
|
|
],
|
|
ctaIntent: "consulting",
|
|
ctaLabel: "Conversar sobre meu aplicativo desktop",
|
|
ctaHref: "/#contact",
|
|
relatedCaseIds: ["gcc-installer"],
|
|
faq: [
|
|
{
|
|
question: "O mesmo aplicativo pode funcionar em Windows e Linux?",
|
|
answer:
|
|
"Pode ser projetado para os dois, mas isso precisa fazer parte do escopo. Versões, distribuições Linux, recursos locais e dependências são definidos e testados separadamente. Não presumo que uma entrega para Windows já esteja pronta para Linux.",
|
|
},
|
|
{
|
|
question: "O aplicativo funciona sem internet?",
|
|
answer:
|
|
"Funções locais podem ser projetadas para isso. Login remoto, sincronização e serviços externos podem continuar dependendo de conexão. Identificamos cada necessidade antes de prometer operação sem internet.",
|
|
},
|
|
{
|
|
question: "Você já tem um case desktop público?",
|
|
answer:
|
|
"Sim: GCC Installer, uma ferramenta Windows feita em Python, Tkinter e Win32 API. Ela demonstra trabalho com rotinas locais e instalação, não uma entrega anterior em Tauri, Rust ou Linux.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: "integracao-hardware-software-iot",
|
|
navLabel: "Integração de equipamentos e sistemas",
|
|
eyebrow: "Hardware, software e IoT",
|
|
seoTitle: "Integração de Equipamentos, Sistemas e IoT",
|
|
metaDescription:
|
|
"Integração entre equipamentos e software para consultar dados e acompanhar operações. Viabilidade, interfaces e tratamento de falhas definidos por projeto.",
|
|
headline: "Dados dos equipamentos no seu sistema.",
|
|
answer:
|
|
"Conecto equipamentos e software para transformar leituras e eventos em informação útil para a operação. Primeiro avaliamos o que cada dispositivo permite acessar; a integração depende dessas interfaces e dos requisitos de segurança e funcionamento.",
|
|
intro:
|
|
"Leve informações de equipamentos para um sistema ou painel. Acompanhe leituras e eventos sem depender apenas de registros manuais.",
|
|
audience: [
|
|
"Operações que registram manualmente informações disponíveis em sensores ou equipamentos.",
|
|
"Empresas que precisam reunir dados físicos e informações de seus sistemas.",
|
|
"Equipes que querem avaliar a viabilidade de um produto conectado antes de ampliar o projeto.",
|
|
],
|
|
outcomes: [
|
|
"Um caminho definido entre a informação do equipamento e a tela de quem precisa usá-la.",
|
|
"Tratamento combinado para falta de conexão, leituras inválidas e outras falhas relevantes.",
|
|
"Escopo condicionado a protocolos, documentação e acesso ao equipamento; compra de hardware, instalação física e certificações não são presumidas.",
|
|
],
|
|
examples: [
|
|
"Um painel para consultar leituras de sensores compatíveis.",
|
|
"Um registro de eventos de uma máquina para apoiar o acompanhamento da operação.",
|
|
"Uma prova de conceito para verificar se um equipamento consegue trocar dados com o sistema existente.",
|
|
],
|
|
process: [
|
|
"Mapeamos equipamentos, dados disponíveis e a decisão que essas informações precisam apoiar.",
|
|
"Verificamos documentação, formas de conexão e limites do ambiente.",
|
|
"Implementamos um fluxo delimitado e avaliamos as falhas relevantes com os acessos combinados.",
|
|
"Entregamos instruções de operação, limites conhecidos e próximos passos.",
|
|
],
|
|
technicalDetails: [
|
|
"A descoberta identifica APIs, arquivos, portas seriais ou protocolos expostos pelo equipamento; a escolha depende da interface realmente disponível.",
|
|
"Contratos de dados, validação, persistência, reconexão e rastreamento de falhas organizam o fluxo entre dispositivo, backend e painel. WebSockets entram apenas quando há necessidade de atualização contínua.",
|
|
"Twins Lab é um simulador/protótipo documentado. Ele ilustra uma interface para processo físico, mas não comprova integração com equipamento real, WebSockets ou resultado industrial.",
|
|
],
|
|
stack: [
|
|
"IoT",
|
|
"WebSockets",
|
|
"APIs",
|
|
"Dashboards",
|
|
"Integração de sistemas",
|
|
],
|
|
ctaIntent: "consulting",
|
|
ctaLabel: "Avaliar minha integração",
|
|
ctaHref: "/#contact",
|
|
relatedCaseIds: ["twins-lab"],
|
|
faq: [
|
|
{
|
|
question: "Qualquer equipamento pode ser conectado?",
|
|
answer:
|
|
"Não é possível garantir sem avaliar. Precisamos saber quais dados e interfaces ele disponibiliza, se há documentação e quais restrições existem no ambiente. Essa avaliação pode concluir que a integração não é viável no escopo pretendido.",
|
|
},
|
|
{
|
|
question: "É necessário trocar os sistemas existentes?",
|
|
answer:
|
|
"Nem sempre. Podemos avaliar uma camada de integração que aproveita o que já funciona. O caminho depende das interfaces disponíveis, da confiabilidade exigida e dos riscos para a operação.",
|
|
},
|
|
{
|
|
question: "É possível começar pequeno?",
|
|
answer:
|
|
"Sim. Um equipamento, uma leitura ou um fluxo pode servir para avaliar viabilidade antes de ampliar o projeto. Os critérios dessa avaliação são combinados para não confundir um protótipo com uma solução pronta para toda a operação.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: "arquitetura-de-software",
|
|
navLabel: "Diagnóstico e arquitetura de software",
|
|
eyebrow: "Diagnóstico e decisão",
|
|
seoTitle: "Diagnóstico e Arquitetura de Software",
|
|
metaDescription:
|
|
"Diagnóstico de software para entender falhas, organizar prioridades e planejar evolução. Arquitetura com riscos, alternativas e plano de mudança explicado.",
|
|
headline: "Entenda o problema antes de mudar tudo.",
|
|
answer:
|
|
"Analiso como um sistema está organizado e por que ficou difícil de manter ou evoluir. Você recebe um diagnóstico explicado, prioridades e um plano de mudança para decidir o que corrigir, preservar ou substituir.",
|
|
intro:
|
|
"Quando cada mudança no sistema vira um problema, obtenha um diagnóstico e um plano para evoluir sem decidir no escuro ou reescrever tudo por impulso.",
|
|
audience: [
|
|
"Empresas que dependem de um sistema e não conseguem entender o custo ou o risco das mudanças.",
|
|
"Equipes que enfrentam falhas recorrentes, integrações frágeis ou dificuldade para entregar novas funções.",
|
|
"Responsáveis por um produto que precisam comparar caminhos antes de investir numa migração.",
|
|
],
|
|
outcomes: [
|
|
"Um mapa dos problemas encontrados e de como afetam o produto e a operação.",
|
|
"Alternativas com benefícios, limitações e riscos explicados para apoiar a decisão.",
|
|
"Plano de execução por prioridades; implementar as mudanças ou acompanhar o time depende do formato contratado.",
|
|
],
|
|
examples: [
|
|
"Investigar por que alterar uma função provoca falhas em outras partes do sistema.",
|
|
"Comparar manter, modernizar aos poucos ou substituir uma ferramenta antiga.",
|
|
"Organizar um plano para conectar novos sistemas sem aumentar a confusão da operação.",
|
|
],
|
|
process: [
|
|
"Conversamos com quem usa e mantém o sistema e reunimos os acessos e materiais necessários.",
|
|
"Analiso a base e os fluxos relevantes para o problema, sem ampliar a investigação sem motivo.",
|
|
"Apresento o diagnóstico e comparo as alternativas com o time e os responsáveis pelo negócio.",
|
|
"Entrego o plano priorizado e, se combinado, acompanho sua execução.",
|
|
],
|
|
technicalDetails: [
|
|
"Análise de dependências, fronteiras entre módulos, contratos de API, fluxos de dados e pontos de falha para localizar acoplamento e riscos.",
|
|
"A arquitetura proposta considera carga, consistência de dados, operação, segurança e capacidade real do time, evitando distribuir um sistema sem necessidade.",
|
|
"Migrações são divididas em etapas verificáveis, com estratégia de transição e reversão quando aplicável. As decisões registram os trade-offs, não apenas um diagrama final.",
|
|
],
|
|
stack: [
|
|
"Arquitetura de software",
|
|
"APIs",
|
|
"Performance",
|
|
"Integrações",
|
|
"Sistemas críticos",
|
|
],
|
|
ctaIntent: "consulting",
|
|
ctaLabel: "Conversar sobre um diagnóstico",
|
|
ctaHref: "/#contact",
|
|
relatedCaseIds: ["nutriscan", "twins-lab", "reddit-explorer"],
|
|
faq: [
|
|
{
|
|
question: "Preciso ter uma equipe técnica para contratar?",
|
|
answer:
|
|
"Não, mas a análise precisa de acesso ao sistema e às pessoas ou materiais que expliquem seu funcionamento. O resultado é apresentado com consequências para o negócio e detalhes que uma equipe técnica possa usar.",
|
|
},
|
|
{
|
|
question: "O diagnóstico sempre recomenda reescrever o sistema?",
|
|
answer:
|
|
"Não. Preservar o que funciona e mudar pontos específicos pode ser o caminho mais adequado. As alternativas são comparadas com base nos problemas observados, nos riscos e na capacidade de executar a mudança.",
|
|
},
|
|
{
|
|
question: "O que é entregue ao final?",
|
|
answer:
|
|
"Um diagnóstico documentado com problemas, prioridades, alternativas e plano de mudança para o escopo analisado. Profundidade, reuniões e eventual acompanhamento da implementação são definidos na proposta.",
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
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.intro,
|
|
}));
|
|
|
|
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),
|
|
);
|
|
}
|