Revisão Logo, Favicon, Robots
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { HashRouter as Router, Routes, Route, useLocation } from 'react-router-dom';
|
||||
import { BrowserRouter as Router, Routes, Route, useLocation } from 'react-router-dom';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
import Navigation from './sections/Navigation';
|
||||
|
||||
@@ -1,31 +1,34 @@
|
||||
import { useState } from 'react';
|
||||
import { AlertTriangle, X } from 'lucide-react';
|
||||
import { IS_HOMOLOGATION } from '@/config/mautic';
|
||||
import { ENV_CONFIG, IS_PRODUCTION } from '../config/environment';
|
||||
|
||||
/**
|
||||
* Banner visual que aparece em ambiente de homologacao
|
||||
* Avisa que Mautic, Google Ads e Facebook Pixel estao em modo simulacao
|
||||
* Banner visual que aparece em ambiente NAO-producao
|
||||
* Avisa qual ambiente esta rodando
|
||||
*/
|
||||
export default function HomologationBanner() {
|
||||
export default function AmbientBanner() {
|
||||
const [dismissed, setDismissed] = useState(false);
|
||||
|
||||
if (!IS_HOMOLOGATION || dismissed) return null;
|
||||
// So mostra em producao
|
||||
if (IS_PRODUCTION || dismissed) return null;
|
||||
|
||||
const { bannerText, bannerColor } = ENV_CONFIG;
|
||||
|
||||
return (
|
||||
<div className="fixed bottom-4 right-4 z-[100] max-w-md">
|
||||
<div className="bg-amber-500 text-[#0e0e0e] rounded-xl shadow-2xl p-4 border-2 border-amber-400">
|
||||
<div className={`${bannerColor} text-[#0e0e0e] rounded-xl shadow-2xl p-4 border-2 border-white/20`}>
|
||||
<div className="flex items-start gap-3">
|
||||
<AlertTriangle className="w-5 h-5 shrink-0 mt-0.5" />
|
||||
<div className="flex-1">
|
||||
<p className="font-bold text-sm">Ambiente de Homologacao</p>
|
||||
<p className="font-bold text-sm">Ambiente: {bannerText}</p>
|
||||
<p className="text-xs mt-1 opacity-90">
|
||||
Mautic, Google Ads e Facebook Pixel estao em modo <strong>simulacao</strong>.
|
||||
Nenhum dado real e enviado. Verifique o console (F12) para ver o que seria enviado.
|
||||
Tracking desativado | SEO: noindex |
|
||||
Nenhum dado enviado a Mautic, GA4, Ads ou Pixel.
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
onClick={() => setDismissed(true)}
|
||||
className="shrink-0 p-1 hover:bg-amber-600 rounded-lg transition-colors"
|
||||
className="shrink-0 p-1 hover:bg-black/20 rounded-lg transition-colors"
|
||||
aria-label="Fechar"
|
||||
>
|
||||
<X className="w-4 h-4" />
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
// ============================================================================
|
||||
// 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';
|
||||
import { ENV_CONFIG } from '../config/environment';
|
||||
|
||||
interface SEOProps {
|
||||
title?: string;
|
||||
description?: string;
|
||||
keywords?: string;
|
||||
ogImage?: string;
|
||||
ogType?: string;
|
||||
noindex?: boolean; // Se true, forca noindex mesmo em producao
|
||||
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 - automatico por ambiente, override com prop noindex */}
|
||||
{noindex || !ENV_CONFIG.allowIndexing ? (
|
||||
<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,
|
||||
},
|
||||
})),
|
||||
});
|
||||
@@ -0,0 +1,73 @@
|
||||
// ============================================================================
|
||||
// DETECAO DE AMBIENTE - Automatico por hostname
|
||||
// ============================================================================
|
||||
// Um unico build serve todos os ambientes:
|
||||
// - PRODUCAO (avanzato.com.br): index, tracking ativo
|
||||
// - HOMOLOGACAO (hml.avanzato.com.br): noindex, tracking desativado
|
||||
// - DESENVOLVIMENTO (localhost): noindex, tracking desativado
|
||||
// ============================================================================
|
||||
|
||||
const hostname = typeof window !== 'undefined' ? window.location.hostname : '';
|
||||
|
||||
export type Environment = 'production' | 'homologation' | 'development';
|
||||
|
||||
function detectEnvironment(): Environment {
|
||||
// Producao: domínio principal
|
||||
if (hostname === 'avanzato.com.br' || hostname === 'www.avanzato.com.br') {
|
||||
return 'production';
|
||||
}
|
||||
|
||||
// Homologacao: subdominio hml
|
||||
if (hostname === 'hml.avanzato.com.br') {
|
||||
return 'homologation';
|
||||
}
|
||||
|
||||
// Desenvolvimento: localhost, 127.0.0.1, IPs locais, previews
|
||||
if (
|
||||
hostname === 'localhost' ||
|
||||
hostname === '127.0.0.1' ||
|
||||
hostname.startsWith('192.168.') ||
|
||||
hostname.startsWith('10.') ||
|
||||
hostname.startsWith('172.') ||
|
||||
hostname.includes('kimi.page') || // previews
|
||||
hostname === '' // SSR
|
||||
) {
|
||||
return 'development';
|
||||
}
|
||||
|
||||
// Fallback: se nao reconhece, trata como homologacao (seguro)
|
||||
return 'homologation';
|
||||
}
|
||||
|
||||
export const ENV = detectEnvironment();
|
||||
|
||||
// Helpers
|
||||
export const IS_PRODUCTION = ENV === 'production';
|
||||
export const IS_HOMOLOGATION = ENV === 'homologation';
|
||||
export const IS_DEVELOPMENT = ENV === 'development';
|
||||
|
||||
// Configuracoes por ambiente
|
||||
export const ENV_CONFIG = {
|
||||
// SEO / Indexacao
|
||||
allowIndexing: IS_PRODUCTION, // So producao permite Google indexar
|
||||
robotsMeta: IS_PRODUCTION ? 'index, follow' : 'noindex, nofollow',
|
||||
|
||||
// Tracking / Integracoes
|
||||
mauticActive: IS_PRODUCTION, // So envia leads reais em producao
|
||||
googleAnalytics: IS_PRODUCTION, // So trackeia em producao
|
||||
googleAds: IS_PRODUCTION, // So dispara conversões em producao
|
||||
facebookPixel: IS_PRODUCTION, // So dispara pixel em producao
|
||||
|
||||
// Visual
|
||||
showBanner: !IS_PRODUCTION, // Banner de ambiente em hom/dev
|
||||
bannerText: IS_HOMOLOGATION ? 'HOMOLOGACAO' : 'DESENVOLVIMENTO',
|
||||
bannerColor: IS_HOMOLOGATION ? 'bg-yellow-500' : 'bg-blue-500',
|
||||
} as const;
|
||||
|
||||
// Log para debug
|
||||
if (typeof window !== 'undefined') {
|
||||
console.log(`[Ambiente] ${ENV.toUpperCase()} | Host: ${hostname}`);
|
||||
if (!IS_PRODUCTION) {
|
||||
console.log('[Ambiente] Tracking desativado | SEO: noindex');
|
||||
}
|
||||
}
|
||||
+11
-16
@@ -1,12 +1,7 @@
|
||||
// Configuracao do Mautic - Avanzato
|
||||
// URL: https://mkt.avanzato.com.br
|
||||
|
||||
// --- DETECAO DE AMBIENTE ---
|
||||
// Em homologacao (localhost, IP, ou nao-producao), o Mautic fica em modo simulacao
|
||||
// Apenas loga no console, nao envia dados reais
|
||||
const hostname = typeof window !== 'undefined' ? window.location.hostname : '';
|
||||
const PROD_HOSTS = ['avanzato.com.br'];
|
||||
export const IS_HOMOLOGATION = !PROD_HOSTS.includes(hostname);
|
||||
import { IS_PRODUCTION } from './environment';
|
||||
|
||||
export const MAUTIC_CONFIG = {
|
||||
baseUrl: 'https://mkt.avanzato.com.br',
|
||||
@@ -17,8 +12,8 @@ export const MAUTIC_CONFIG = {
|
||||
contato: { id: '4', enabled: true },
|
||||
},
|
||||
|
||||
// Desativa envio real em homologacao
|
||||
enabled: !IS_HOMOLOGATION,
|
||||
// So envia dados reais em producao
|
||||
enabled: IS_PRODUCTION,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -37,9 +32,9 @@ export const sendLeadToMautic = (
|
||||
return false;
|
||||
}
|
||||
|
||||
// MODO HOMOLOGACAO: simula envio, nao manda dados reais
|
||||
if (IS_HOMOLOGATION) {
|
||||
console.log('%c[HOMOLOGACAO] Mautic em modo simulacao - dados NAO enviados ao servidor real', 'background:#f59e0b;color:#000;font-weight:bold;padding:4px 8px;border-radius:4px');
|
||||
// MODO NAO-PRODUCAO: simula envio, nao manda dados reais
|
||||
if (!IS_PRODUCTION) {
|
||||
console.log('%c[' + (window as any).__AVANZATO_ENV__?.toUpperCase() + '] Mautic em modo simulacao - dados NAO enviados', 'background:#f59e0b;color:#000;font-weight:bold;padding:4px 8px;border-radius:4px');
|
||||
console.log(`[Mautic] Form: ${formType} | Form ID: ${formConfig.id}`);
|
||||
console.log(`[Mautic] Dados que seriam enviados:`, JSON.stringify(formData, null, 2));
|
||||
console.log(`[Mautic] Em producao, enviaria para: ${MAUTIC_CONFIG.baseUrl}/form/submit?formId=${formConfig.id}`);
|
||||
@@ -123,8 +118,8 @@ export const sendLeadViaMailto = (formData: Record<string, string>): void => {
|
||||
* Desativado em homologacao para nao poluir dados
|
||||
*/
|
||||
export const trackConversion = (): void => {
|
||||
if (IS_HOMOLOGATION) {
|
||||
console.log('%c[HOMOLOGACAO] Google Ads conversion NAO disparado (ambiente de teste)', 'color:#f59e0b');
|
||||
if (!IS_PRODUCTION) {
|
||||
console.log('%c[' + (window as any).__AVANZATO_ENV__ + '] Google Ads conversion NAO disparado', 'color:#f59e0b');
|
||||
return;
|
||||
}
|
||||
if (typeof window !== 'undefined' && (window as any).gtag) {
|
||||
@@ -142,12 +137,12 @@ export const trackConversion = (): void => {
|
||||
* Desativado em homologacao
|
||||
*/
|
||||
export const trackFacebookPixel = (eventName: string = 'Lead', params?: Record<string, any>): void => {
|
||||
if (IS_HOMOLOGATION) {
|
||||
console.log(`%c[HOMOLOGACAO] Facebook Pixel "${eventName}" NAO disparado (ambiente de teste)`, 'color:#f59e0b', params);
|
||||
if (!IS_PRODUCTION) {
|
||||
console.log(`%c[${(window as any).__AVANZATO_ENV__}] Facebook Pixel "${eventName}" NAO disparado`, 'color:#f59e0b', params);
|
||||
return;
|
||||
}
|
||||
if (typeof window !== 'undefined' && (window as any).fbq) {
|
||||
(window as any).fbq('track', eventName, params || {});
|
||||
console.log(`[Facebook Pixel] Evento: ${eventName}`, params);
|
||||
}
|
||||
};
|
||||
};
|
||||
+9
-12
@@ -11,20 +11,17 @@
|
||||
// Opcao 2: URL da imagem (deixe svgInline vazio e preencha imageUrl)
|
||||
|
||||
export const LOGO = {
|
||||
// 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 1: SVG inline (deixe vazio se for usar imagem)
|
||||
svgInline: '',
|
||||
|
||||
// Se quiser usar imagem (PNG/JPG), coloque o arquivo em public/assets/
|
||||
// e defina: imageUrl: '/assets/logo.png'
|
||||
imageUrl: '',
|
||||
// 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',
|
||||
|
||||
// Texto ao lado do logo (deixe vazio se nao quiser texto)
|
||||
text: 'avanzato',
|
||||
textHighlight: '.', // O ponto verde apos o texto
|
||||
// Texto ao lado do logo (deixe vazio se o logo ja tiver texto)
|
||||
text: '',
|
||||
textHighlight: '',
|
||||
|
||||
// Link do logo (para onde vai quando clica)
|
||||
href: '/',
|
||||
|
||||
+4
-1
@@ -1,10 +1,13 @@
|
||||
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>
|
||||
<App />
|
||||
<HelmetProvider>
|
||||
<App />
|
||||
</HelmetProvider>
|
||||
</StrictMode>,
|
||||
)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { gsap } from 'gsap';
|
||||
@@ -132,6 +133,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -199,6 +200,10 @@ 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) }} />
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../components/SEO';
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import { sendLeadToMautic, sendLeadViaMailto, trackConversion, trackFacebookPixel } from '../config/mautic';
|
||||
import { gsap } from 'gsap';
|
||||
@@ -174,6 +175,10 @@ 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." />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
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';
|
||||
@@ -137,6 +138,11 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -178,6 +179,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -105,6 +106,10 @@ 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) }} />
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { FileText, CheckCircle, AlertCircle, Scale, Gavel, RefreshCw } from 'lucide-react';
|
||||
@@ -123,6 +124,11 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -53,6 +54,10 @@ 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>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -44,6 +45,10 @@ 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>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import SEO from '../../components/SEO';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
import {
|
||||
@@ -205,8 +206,10 @@ export default function ContabilidadePage() {
|
||||
|
||||
return (
|
||||
<div ref={pageRef} className="min-h-screen bg-[#0e0e0e]">
|
||||
<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." />
|
||||
<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."
|
||||
/>
|
||||
|
||||
<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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -44,6 +45,10 @@ 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>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -46,6 +47,10 @@ 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>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -46,6 +47,10 @@ 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>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -39,6 +40,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -49,6 +50,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -33,6 +34,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -38,6 +39,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -46,6 +47,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -49,6 +50,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -49,6 +50,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -38,6 +39,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -46,6 +47,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -82,6 +83,10 @@ 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" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -77,6 +78,10 @@ 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">
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -77,6 +78,10 @@ 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">
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -77,6 +78,10 @@ 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">
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -77,6 +78,10 @@ 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">
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -77,6 +78,10 @@ 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">
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -77,6 +78,10 @@ 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">
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import SEO from '../../components/SEO';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { gsap } from 'gsap';
|
||||
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
||||
@@ -83,6 +84,10 @@ 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) }} />
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
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';
|
||||
@@ -11,6 +12,15 @@ 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' });
|
||||
};
|
||||
@@ -161,6 +171,7 @@ const Footer = () => {
|
||||
<div className="flex flex-col md:flex-row items-center justify-between gap-4">
|
||||
<p className="text-gray-500 text-sm">
|
||||
© {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">
|
||||
|
||||
@@ -46,14 +46,8 @@ 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 gap-3">
|
||||
<Link to={LOGO.href} className="flex items-center">
|
||||
{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 */}
|
||||
|
||||
Reference in New Issue
Block a user