Revisão logo

This commit is contained in:
2026-05-30 23:52:07 -03:00
parent 2dc62486d7
commit b3b8917a96
103 changed files with 538 additions and 40886 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react';
import { BrowserRouter as Router, Routes, Route, useLocation } from 'react-router-dom';
import { HashRouter as Router, Routes, Route, useLocation } from 'react-router-dom';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
import Navigation from './sections/Navigation';
-120
View File
@@ -1,120 +0,0 @@
// ============================================================================
// SEO - Meta tags dinamicas por pagina
// ============================================================================
// Uso: <SEO title="..." description="..." />
//
// Cada pagina deve usar este componente com suas proprias tags.
// O canonical e gerado automaticamente a partir da URL atual.
// ============================================================================
import { Helmet } from 'react-helmet-async';
import { useLocation } from 'react-router-dom';
interface SEOProps {
title?: string;
description?: string;
keywords?: string;
ogImage?: string;
ogType?: string;
noindex?: boolean;
schema?: Record<string, any>;
}
const SITE_URL = 'https://avanzato.com.br';
const DEFAULT_TITLE = 'Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca';
const DEFAULT_DESC = 'Solucoes em TI Gerenciada, Cloud Computing e Seguranca da Informacao. +23 anos de experiencia, +500 clientes atendidos. Suporte 24/7 em Guarulhos e regiao.';
const DEFAULT_OG_IMAGE = 'https://avanzato.com.br/og-image.jpg';
export default function SEO({
title,
description,
keywords,
ogImage,
ogType = 'website',
noindex = false,
schema,
}: SEOProps) {
const location = useLocation();
const pathname = location.pathname;
const canonicalUrl = `${SITE_URL}${pathname}`;
const fullTitle = title ? `${title} | Avanzato` : DEFAULT_TITLE;
return (
<Helmet>
{/* Title */}
<title>{fullTitle}</title>
<meta name="title" content={fullTitle} />
{/* Description */}
{description && <meta name="description" content={description} />}
{!description && <meta name="description" content={DEFAULT_DESC} />}
{/* Keywords */}
{keywords && <meta name="keywords" content={keywords} />}
{/* Canonical - DINAMICO por pagina */}
<link rel="canonical" href={canonicalUrl} />
{/* Robots */}
{noindex ? (
<meta name="robots" content="noindex, nofollow" />
) : (
<meta name="robots" content="index, follow" />
)}
{/* Open Graph */}
<meta property="og:type" content={ogType} />
<meta property="og:url" content={canonicalUrl} />
<meta property="og:title" content={fullTitle} />
<meta property="og:description" content={description || DEFAULT_DESC} />
<meta property="og:image" content={ogImage || DEFAULT_OG_IMAGE} />
<meta property="og:locale" content="pt_BR" />
<meta property="og:site_name" content="Avanzato Tecnologia" />
{/* Twitter */}
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content={canonicalUrl} />
<meta property="twitter:title" content={fullTitle} />
<meta property="twitter:description" content={description || DEFAULT_DESC} />
<meta property="twitter:image" content={ogImage || DEFAULT_OG_IMAGE} />
{/* Schema.org */}
{schema && (
<script type="application/ld+json">
{JSON.stringify(schema)}
</script>
)}
</Helmet>
);
}
// Schema helpers
export const createServiceSchema = (name: string, description: string, urlPath: string) => ({
'@context': 'https://schema.org',
'@type': 'Service',
name,
description,
provider: {
'@type': 'Organization',
name: 'Avanzato Tecnologia',
url: SITE_URL,
},
url: `${SITE_URL}${urlPath}`,
areaServed: {
'@type': 'City',
name: 'Guarulhos',
},
});
export const createFAQSchema = (questions: Array<{q: string; a: string}>) => ({
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: questions.map(({q, a}) => ({
'@type': 'Question',
name: q,
acceptedAnswer: {
'@type': 'Answer',
text: a,
},
})),
});
+12 -9
View File
@@ -11,17 +11,20 @@
// Opcao 2: URL da imagem (deixe svgInline vazio e preencha imageUrl)
export const LOGO = {
// Opcao 1: SVG inline (deixe vazio se for usar imagem)
svgInline: '',
// Se quiser usar SVG inline, cole o codigo aqui entre as crases
// Exemplo: svgInline: `<svg ...>...</svg>`
svgInline: `<svg width="40" height="40" viewBox="0 0 100 100">
<path d="M50 15 L75 75 H60 L55 60 H45 L40 75 H25 L50 15 Z M48 48 H52 L50 40 L48 48 Z"
fill="#cbf400" stroke="#cbf400" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/>
</svg>`,
// Opcao 2: URL da imagem
// Use '/logo.png' para carregar da pasta public/ (funciona em qualquer ambiente)
// Use 'https://avanzato.com.br/logo.png' apenas se for carregar de servidor externo
imageUrl: '/logo.png',
// Se quiser usar imagem (PNG/JPG), coloque o arquivo em public/assets/
// e defina: imageUrl: '/assets/logo.png'
imageUrl: '',
// Texto ao lado do logo (deixe vazio se o logo ja tiver texto)
text: '',
textHighlight: '',
// Texto ao lado do logo (deixe vazio se nao quiser texto)
text: 'avanzato',
textHighlight: '.', // O ponto verde apos o texto
// Link do logo (para onde vai quando clica)
href: '/',
+1 -4
View File
@@ -1,13 +1,10 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { HelmetProvider } from 'react-helmet-async'
import './index.css'
import App from './App.tsx'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<HelmetProvider>
<App />
</HelmetProvider>
<App />
</StrictMode>,
)
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react';
import { Link } from 'react-router-dom';
import { gsap } from 'gsap';
@@ -133,10 +132,6 @@ const Blog = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Blog de Tecnologia"
description="Artigos e novidades sobre TI, seguranca da informacao, cloud computing e tecnologia para empresas."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -200,10 +199,6 @@ const Cases = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Cases de Sucesso"
description="Veja os cases de sucesso da Avanzato Tecnologia. Projetos realizados para empresas de diversos segmentos em Sao Paulo."
/>
{/* Schema.org JSON-LD */}
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../components/SEO';
import { useEffect, useRef, useState } from 'react';
import { sendLeadToMautic, sendLeadViaMailto, trackConversion, trackFacebookPixel } from '../config/mautic';
import { gsap } from 'gsap';
@@ -175,10 +174,6 @@ const Condominios = () => {
return (
<div className="min-h-screen bg-[#0e0e0e]">
<SEO
title="Tecnologia para Condominios"
description="Solucoes de TI para condominios: CFTV, controle de acesso, interfonia IP, internet, WiFi. Atendimento em Sao Paulo."
/>
{/* SEO Meta Tags - Injected via useEffect */}
<title>Tecnologia para Condomínios | VOIP e Infraestrutura | Avanzato</title>
<meta name="description" content="Reduza custos e tenha independência com VOIP e infraestrutura para condomínios. Diagnóstico gratuito com a Avanzato." />
-6
View File
@@ -1,4 +1,3 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { Shield, Lock, Eye, FileText, User, Share2, Mail } from 'lucide-react';
@@ -138,11 +137,6 @@ const Privacidade = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Politica de Privacidade"
description="Politica de Privacidade da Avanzato Tecnologia. Conformidade com a LGPD. Protecao de dados pessoais."
noindex
/>
{/* Hero */}
<section className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -179,10 +178,6 @@ const Sobre = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Sobre a Avanzato Tecnologia"
description="Conheca a Avanzato Tecnologia: +23 anos de experiencia em TI Gerenciada, Cloud e Seguranca. +500 clientes satisfeitos."
/>
{/* Hero Section */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -106,10 +105,6 @@ const Tecnologias = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Tecnologias que Trabalhamos"
description="Conheca as tecnologias que a Avanzato domina: Cisco, VMware, Microsoft, Linux, pfSense, Proxmox e muito mais."
/>
{/* Schema.org JSON-LD */}
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
-6
View File
@@ -1,4 +1,3 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { FileText, CheckCircle, AlertCircle, Scale, Gavel, RefreshCw } from 'lucide-react';
@@ -124,11 +123,6 @@ const Termos = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Termos de Uso"
description="Termos de Uso do site da Avanzato Tecnologia. Condicoes de acesso e utilizacao dos servicos."
noindex
/>
{/* Hero */}
<section className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -54,10 +53,6 @@ function FormSection() {
return (
<div id="formulario" className="scroll-mt-20">
<SEO
title="TI para Escritorios de Advocacia"
description="TI para advocacias: seguranca de processos, LGPD para clientes, backup de documentos juridicos. PJe e e-SAJ."
/>
<div className="bg-[#1a1a1a] border border-[#333] rounded-2xl p-8 sticky top-24">
<h3 className="text-2xl font-bold text-white mb-2">Diagnostico gratuito para seu escritorio</h3>
<p className="text-gray-400 mb-6">Avaliamos a seguranca da sua infraestrutura e entregamos um relatorio de conformidade para a OAB.</p>
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -45,10 +44,6 @@ function FormSection() {
return (
<div id="formulario" className="scroll-mt-20">
<SEO
title="Backup Corporativo em Nuvem"
description="Backup empresarial automatizado: local, nuvem e hibrido. Protecao contra ransomware. Recuperacao rapida de dados."
/>
<div className="bg-[#1a1a1a] border border-[#333] rounded-2xl p-8 sticky top-24">
<h3 className="text-2xl font-bold text-white mb-2">Diagnostico de backup gratuito</h3>
<p className="text-gray-400 mb-6">Avaliamos sua estrategia atual e identificamos falhas antes que seja tarde demais.</p>
+2 -5
View File
@@ -1,5 +1,4 @@
import { useEffect, useRef, useState } from 'react';
import SEO from '../../components/SEO';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
import {
@@ -206,10 +205,8 @@ export default function ContabilidadePage() {
return (
<div ref={pageRef} className="min-h-screen bg-[#0e0e0e]">
<SEO
title="TI para Escritorios de Contabilidade"
description="Solucoes de TI especializadas para contabilidades: seguranca de dados fiscais, backup de obrigacoes, NF-e. SPED e ECD."
/>
<title>TI para Escritorios Contabeis | Avanzato Tecnologia</title>
<meta name="description" content="TI especializada para escritorios contabeis. Seguranca para SPED, backup de dados, servidor otimizado e suporte tecnico especializado." />
<section className="relative min-h-[90vh] flex items-center bg-[#0e0e0e]">
<div className="absolute inset-0 bg-[url('https://images.unsplash.com/photo-1554224155-8d04cb21cd6c?w=1920&q=80')] bg-cover bg-center opacity-10" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -45,10 +44,6 @@ function FormSection() {
return (
<div id="formulario" className="scroll-mt-20">
<SEO
title="Firewall pfSense Empresarial"
description="Implementacao e configuracao de firewall pfSense e OPNsense. Seguranca de rede, VPN, filtro de conteudo."
/>
<div className="bg-[#1a1a1a] border border-[#333] rounded-2xl p-8 sticky top-24">
<h3 className="text-2xl font-bold text-white mb-2">Avaliacao gratuita de firewall</h3>
<p className="text-gray-400 mb-6">Analisamos sua rede e indicamos a melhor configuracao de firewall para sua empresa.</p>
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -47,10 +46,6 @@ function FormSection() {
return (
<div id="formulario" className="scroll-mt-20">
<SEO
title="Monitoramento Empresarial com CFTV"
description="Sistemas de CFTV e monitoramento por camera para empresas. IP cameras, NVR, DVR, acesso remoto via celular."
/>
<div className="bg-[#1a1a1a] border border-[#333] rounded-2xl p-8 sticky top-24">
<h3 className="text-2xl font-bold text-white mb-2">Diagnostico gratuito de CFTV</h3>
<p className="text-gray-400 mb-6">Avaliamos sua estrutura e indicamos a melhor solucao de cameras e monitoramento para seu espaco.</p>
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -47,10 +46,6 @@ function FormSection() {
return (
<div id="formulario" className="scroll-mt-20">
<SEO
title="VoIP Empresarial e PABX IP"
description="Telefonia VoIP para empresas: PABX IP, chamadas ilimitadas, integracao com CRM. Reducao de 70% na conta telefonica."
/>
<div className="bg-[#1a1a1a] border border-[#333] rounded-2xl p-8 sticky top-24">
<h3 className="text-2xl font-bold text-white mb-2">Orcamento de PABX VOIP</h3>
<p className="text-gray-400 mb-6">Preencha os dados e receba uma proposta de migracao para VOIP em ate 4 horas.</p>
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -40,10 +39,6 @@ const Backup = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Backup Corporativo e Disaster Recovery"
description="Backup automatizado em nuvem e local. Disaster Recovery, recuperacao de dados. Protecao contra ransomware."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -50,10 +49,6 @@ const CloudComputing = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Cloud Computing e Virtualizacao"
description="Solucoes em Cloud Computing: AWS, Azure, Google Cloud. Migracao, gestao e otimizacao de infraestrutura em nuvem."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -34,10 +33,6 @@ const Consultoria = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Consultoria em TI"
description="Consultoria estrategica em tecnologia: planejamento, gestao de projetos, outsourcing de TI. Diagnostico gratuito."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -39,10 +38,6 @@ const Noc = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="NOC - Network Operations Center"
description="Monitoramento 24/7 de redes e servidores. NOC proprio com equipe especializada. Alertas em tempo real."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -47,10 +46,6 @@ const Pabx = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="PABX IP e VoIP Empresarial"
description="Solucoes de telefonia IP e VoIP: PABX virtual, central telefonica, integracao com CRM. Reducao de custos em ate 60%."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -50,10 +49,6 @@ const Redes = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Redes e Infraestrutura de TI"
description="Projetos de rede cabeada e wireless, switches, roteadores Cisco. Infraestrutura completa de TI para empresas."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -50,10 +49,6 @@ const Seguranca = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Seguranca da Informacao"
description="Protecao completa para sua empresa: firewall, antivirus, backup, LGPD. Seguranca de rede e dados com suporte 24/7."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -39,10 +38,6 @@ const Servidores = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Servidores e Data Center"
description="Venda e manutencao de servidores Dell, HP, IBM. Virtualizacao VMware, Hyper-V. Data Center em Guarulhos."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -47,10 +46,6 @@ const Suporte = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte Tecnico 24/7"
description="Suporte tecnico empresarial 24 horas. Help desk, atendimento remoto e presencial em Guarulhos e regiao."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[600px] h-[600px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -83,10 +82,6 @@ const TiGerenciada = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="TI Gerenciada para Empresas"
description="TI Gerenciada completa para empresas em Guarulhos e Sao Paulo. Suporte 24/7, monitoramento em tempo real e equipe especializada."
/>
{/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
<div className="absolute top-0 right-0 w-[800px] h-[800px] bg-[#cbf400]/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/3" />
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -78,10 +77,6 @@ const Cisco = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte Redes Cisco"
description="Configuracao e suporte Cisco: switches, roteadores, firewalls ASA, Wireless. CCNA e CCNP certificados."
/>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -78,10 +77,6 @@ const Linux = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte Linux para Empresas"
description="Suporte Linux empresarial: Ubuntu, CentOS, Red Hat, Debian. Servidores, seguranca, monitoramento. Especialistas certificados."
/>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -78,10 +77,6 @@ const PfSense = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte pfSense e OPNsense"
description="Configuracao e suporte pfSense/OPNsense: firewall, VPN, load balancing, HA, multi-WAN. Especialistas certificados."
/>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -78,10 +77,6 @@ const Proxmox = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte Proxmox VE"
description="Implementacao e suporte Proxmox VE: virtualizacao, containers LXC, clusters HA, Ceph storage, backups."
/>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -78,10 +77,6 @@ const Sharepoint = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte Microsoft SharePoint"
description="Implementacao e suporte SharePoint Online e on-premises: intranet, workflows, gestao documental. Microsoft 365."
/>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -78,10 +77,6 @@ const Vmware = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte VMware vSphere"
description="Consultoria e suporte VMware vSphere: ESXi, vCenter, vMotion, HA, DRS. Licenciamento e otimizacao."
/>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
-5
View File
@@ -1,4 +1,3 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -84,10 +83,6 @@ const WindowsServer = () => {
return (
<div className="bg-[#0e0e0e] min-h-screen">
<SEO
title="Suporte Windows Server"
description="Suporte especializado Windows Server 2012, 2016, 2019, 2022. Active Directory, Exchange, IIS. Administracao completa."
/>
{/* Schema.org JSON-LD */}
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
-11
View File
@@ -1,4 +1,3 @@
import { useState, useEffect } from 'react';
import { Link } from 'react-router-dom';
import { Facebook, Youtube, Linkedin, Instagram, ArrowUp, MapPin } from 'lucide-react';
import { LOGO, SOCIAL_LINKS, ADDRESSES, FOOTER_LINKS, COMPANY } from '../config/site';
@@ -12,15 +11,6 @@ const socialIcons: Record<string, React.ReactNode> = {
};
const Footer = () => {
const [version, setVersion] = useState('');
useEffect(() => {
fetch('/version.json?t=' + Date.now())
.then(r => r.json())
.then(data => setVersion(data.version))
.catch(() => setVersion(''));
}, []);
const scrollToTop = () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
};
@@ -171,7 +161,6 @@ const Footer = () => {
<div className="flex flex-col md:flex-row items-center justify-between gap-4">
<p className="text-gray-500 text-sm">
&copy; {new Date().getFullYear()} {COMPANY.name}. Todos os direitos reservados.
{version && <span className="ml-2 text-gray-600 text-xs">v{version}</span>}
</p>
<div className="flex items-center gap-6">
+7 -1
View File
@@ -46,8 +46,14 @@ const Navigation = () => {
<div className="container-custom">
<div className="flex items-center justify-between h-20">
{/* Logo - importado de config/site.ts */}
<Link to={LOGO.href} className="flex items-center">
<Link to={LOGO.href} className="flex items-center gap-3">
{renderLogo()}
{LOGO.text && (
<span className="text-2xl font-bold text-white tracking-tight">
{LOGO.text}
<span className="text-[#cbf400]">{LOGO.textHighlight}</span>
</span>
)}
</Link>
{/* Desktop Navigation - importado de config/site.ts */}