Compare commits

...

10 Commits

Author SHA1 Message Date
avanzato 41312945d9 Release PROD: Atualização e correção de diretorios
Deploy PROD Avanzato / deploy-prod (push) Successful in 30s
2026-05-30 19:30:29 -03:00
avanzato bb73783e9f Merge remote-tracking branch 'origin/develop' 2026-05-30 19:30:26 -03:00
avanzato 146652ab10 Log release HML: Correção de sub pastas
Deploy HML Avanzato / deploy-hml (push) Successful in 33s
2026-05-30 19:03:06 -03:00
avanzato 246d860ce4 Correção de sub pastas 2026-05-30 19:03:06 -03:00
avanzato 87fe58944d Log release HML: Commit V1.1.1
Deploy HML Avanzato / deploy-hml (push) Successful in 34s
2026-05-30 16:39:05 -03:00
avanzato 38723c5a61 Commit V1.1.1 2026-05-30 16:39:05 -03:00
avanzato d420717053 Log release HML: corrigindo scrpit
Deploy HML Avanzato / deploy-hml (push) Successful in 33s
2026-05-30 16:32:48 -03:00
avanzato 81598abe19 corrigindo scrpit 2026-05-30 16:32:48 -03:00
avanzato 56e8d9d0bf Log release HML: Commit V1.0.9
Deploy HML Avanzato / deploy-hml (push) Successful in 32s
2026-05-30 13:37:48 -03:00
avanzato b2a92d1a5b Commit V1.0.9 2026-05-30 13:37:48 -03:00
40 changed files with 475 additions and 6 deletions
+31
View File
@@ -0,0 +1,31 @@
# Release HML
Data: sáb 30 mai 2026 19:03:06 -03
Ambiente:
HML
Descrição:
Correção de sub pastas
Branch:
develop
Arquivos alterados antes do commit:
D infra/releases/2026-05-30_16-39-05_HML.md
M public/version.json
?? infra/releases/2026-05-30_19-03-06_HML.md
Status:
Preparado para publicação
Commit:
246d860
Arquivos no commit:
infra/releases/2026-05-30_16-39-05_HML.md
infra/releases/2026-05-30_19-03-06_HML.md
public/version.json
Status final:
Publicado no Gitea / aguardando pipeline HML
@@ -0,0 +1,24 @@
# Release PROD
Data: sáb 30 mai 2026 19:30:29 -03
Ambiente:
PROD
Descrição:
Atualização e correção de diretorios
Branch:
main
Commit:
bb73783
Último commit develop:
146652a
Arquivos alterados no último commit:
Status:
Preparado para publicação em produção
+36
View File
@@ -51,6 +51,7 @@
"react": "^19.2.0", "react": "^19.2.0",
"react-day-picker": "^9.13.0", "react-day-picker": "^9.13.0",
"react-dom": "^19.2.0", "react-dom": "^19.2.0",
"react-helmet-async": "^3.0.0",
"react-hook-form": "^7.70.0", "react-hook-form": "^7.70.0",
"react-resizable-panels": "^4.2.2", "react-resizable-panels": "^4.2.2",
"react-router-dom": "^7.14.0", "react-router-dom": "^7.14.0",
@@ -6744,6 +6745,15 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.0.0"
}
},
"node_modules/is-binary-path": { "node_modules/is-binary-path": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -7668,6 +7678,26 @@
"react": "^19.2.3" "react": "^19.2.3"
} }
}, },
"node_modules/react-fast-compare": {
"version": "3.2.2",
"resolved": "https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==",
"license": "MIT"
},
"node_modules/react-helmet-async": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/react-helmet-async/-/react-helmet-async-3.0.0.tgz",
"integrity": "sha512-nA3IEZfXiclgrz4KLxAhqJqIfFDuvzQwlKwpdmzZIuC1KNSghDEIXmyU0TKtbM+NafnkICcwx8CECFrZ/sL/1w==",
"license": "Apache-2.0",
"dependencies": {
"invariant": "^2.2.4",
"react-fast-compare": "^3.2.2",
"shallowequal": "^1.1.0"
},
"peerDependencies": {
"react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
"node_modules/react-hook-form": { "node_modules/react-hook-form": {
"version": "7.70.0", "version": "7.70.0",
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.70.0.tgz", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.70.0.tgz",
@@ -8131,6 +8161,12 @@
"integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/shallowequal": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz",
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
"license": "MIT"
},
"node_modules/shebang-command": { "node_modules/shebang-command": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+1
View File
@@ -53,6 +53,7 @@
"react": "^19.2.0", "react": "^19.2.0",
"react-day-picker": "^9.13.0", "react-day-picker": "^9.13.0",
"react-dom": "^19.2.0", "react-dom": "^19.2.0",
"react-helmet-async": "^3.0.0",
"react-hook-form": "^7.70.0", "react-hook-form": "^7.70.0",
"react-resizable-panels": "^4.2.2", "react-resizable-panels": "^4.2.2",
"react-router-dom": "^7.14.0", "react-router-dom": "^7.14.0",
+2 -2
View File
@@ -1,5 +1,5 @@
{ {
"version": "1.0.9", "version": "1.1.1",
"date": "2026-05-29", "date": "2026-05-31",
"environment": "development" "environment": "development"
} }
+89
View File
@@ -0,0 +1,89 @@
#!/bin/bash
# ============================================================================
# Script Post-Build - Gera paginas estaticas para rotas React
# ============================================================================
# Isso permite que URLs como /avaliacao funcionem diretamente,
# mesmo em servidores sem try_files configurado.
#
# Uso: bash scripts/build-static-routes.sh (executa automaticamente apos build)
# ============================================================================
set -e
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}[Post-Build]${NC} Gerando paginas estaticas para rotas..."
DIST_DIR="${1:-dist}"
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
if [ ! -d "$DIST_DIR" ]; then
echo -e "${YELLOW}Pasta dist/ nao encontrada. Execute npm run build primeiro.${NC}"
exit 1
fi
# Lista de todas as rotas do site
ROUTES=(
"sobre"
"contato"
"cases"
"blog"
"avaliacao"
"tecnologias"
"tecnologia-para-condominios"
"ti-para-contabilidades"
"ti-para-advocacias"
"monitoramento-empresarial"
"firewall-pfsense-empresarial"
"backup-corporativo"
"voip-empresarial"
"servicos/ti-gerenciada"
"servicos/cloud-computing"
"servicos/seguranca"
"servicos/suporte"
"servicos/redes"
"servicos/pabx"
"servicos/backup"
"servicos/servidores"
"servicos/consultoria"
"servicos/noc"
"suporte-windows-server"
"suporte-linux-empresas"
"suporte-pfsense"
"suporte-proxmox"
"suporte-vmware"
"suporte-sharepoint"
"suporte-redes-cisco"
"privacidade"
"termos"
)
# Copiar index.html como base
cp "$DIST_DIR/index.html" "$DIST_DIR/index.html.bak"
# Gerar pagina para cada rota
for route in "${ROUTES[@]}"; do
mkdir -p "$DIST_DIR/$route"
cp "$DIST_DIR/index.html" "$DIST_DIR/$route/index.html"
done
echo -e "${GREEN}OK${NC} ${#ROUTES[@]} rotas estaticas criadas"
# Criar 404.html (copia do index.html para fallback)
cp "$DIST_DIR/index.html" "$DIST_DIR/404.html"
echo -e "${GREEN}OK${NC} 404.html criado"
# Limpar backup
rm -f "$DIST_DIR/index.html.bak"
echo ""
echo -e "${GREEN}Post-build concluido!${NC}"
echo ""
echo "Estrutura gerada:"
echo " dist/index.html (home)"
echo " dist/404.html (pagina nao encontrada)"
echo " dist/{rota}/index.html (${#ROUTES[@]} paginas estaticas)"
echo ""
+15
View File
@@ -47,6 +47,13 @@ show_banner() {
echo "" echo ""
} }
# Post-build: gerar paginas estaticas para rotas
run_post_build() {
local dist_dir="${1:-dist}"
echo -e "${BLUE}[Post-Build]${NC} Gerando paginas estaticas para rotas..."
bash "${SCRIPT_DIR}/build-static-routes.sh" "$dist_dir"
}
# Verificar dependencias # Verificar dependencias
check_deps() { check_deps() {
if ! command -v node &> /dev/null; then if ! command -v node &> /dev/null; then
@@ -86,6 +93,10 @@ cmd_build() {
echo -e "${BLUE}[2/2]${NC} Configurando robots.txt para producao..." echo -e "${BLUE}[2/2]${NC} Configurando robots.txt para producao..."
cp "${PROJECT_DIR}/public/robots-producao.txt" "${DIST_DIR}/robots.txt" cp "${PROJECT_DIR}/public/robots-producao.txt" "${DIST_DIR}/robots.txt"
echo -e "${GREEN}OK${NC} - Build de producao pronto em dist/" echo -e "${GREEN}OK${NC} - Build de producao pronto em dist/"
# Gerar paginas estaticas para rotas
run_post_build "$DIST_DIR"
echo "" echo ""
echo -e "Para preview: ${CYAN}bash scripts/dev.sh preview${NC}" echo -e "Para preview: ${CYAN}bash scripts/dev.sh preview${NC}"
} }
@@ -101,6 +112,10 @@ cmd_build_hom() {
echo -e "${YELLOW}[2/2]${NC} Configurando anti-indexacao..." echo -e "${YELLOW}[2/2]${NC} Configurando anti-indexacao..."
# robots.txt ja esta com noindex por padrao # robots.txt ja esta com noindex por padrao
echo -e "${GREEN}OK${NC} - Build de homologacao pronto em dist/" echo -e "${GREEN}OK${NC} - Build de homologacao pronto em dist/"
# Gerar paginas estaticas para rotas
run_post_build "$DIST_DIR"
echo "" echo ""
echo -e "Para deploy: ${CYAN}bash scripts/dev.sh deploy-hom${NC}" echo -e "Para deploy: ${CYAN}bash scripts/dev.sh deploy-hom${NC}"
} }
+120
View File
@@ -0,0 +1,120 @@
// ============================================================================
// 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,
},
})),
});
+4 -1
View File
@@ -1,10 +1,13 @@
import { StrictMode } from 'react' import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client' import { createRoot } from 'react-dom/client'
import { HelmetProvider } from 'react-helmet-async'
import './index.css' import './index.css'
import App from './App.tsx' import App from './App.tsx'
createRoot(document.getElementById('root')!).render( createRoot(document.getElementById('root')!).render(
<StrictMode> <StrictMode>
<App /> <HelmetProvider>
<App />
</HelmetProvider>
</StrictMode>, </StrictMode>,
) )
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
@@ -132,6 +133,10 @@ const Blog = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -199,6 +200,10 @@ const Cases = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Schema.org JSON-LD */}
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../components/SEO';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { sendLeadToMautic, sendLeadViaMailto, trackConversion, trackFacebookPixel } from '../config/mautic'; import { sendLeadToMautic, sendLeadViaMailto, trackConversion, trackFacebookPixel } from '../config/mautic';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
@@ -174,6 +175,10 @@ const Condominios = () => {
return ( return (
<div className="min-h-screen bg-[#0e0e0e]"> <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 */} {/* SEO Meta Tags - Injected via useEffect */}
<title>Tecnologia para Condomínios | VOIP e Infraestrutura | Avanzato</title> <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." /> <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,3 +1,4 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { Shield, Lock, Eye, FileText, User, Share2, Mail } from 'lucide-react'; import { Shield, Lock, Eye, FileText, User, Share2, Mail } from 'lucide-react';
@@ -137,6 +138,11 @@ const Privacidade = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -178,6 +179,10 @@ const Sobre = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero Section */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -105,6 +106,10 @@ const Tecnologias = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Schema.org JSON-LD */}
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
+6
View File
@@ -1,3 +1,4 @@
import SEO from '../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { FileText, CheckCircle, AlertCircle, Scale, Gavel, RefreshCw } from 'lucide-react'; import { FileText, CheckCircle, AlertCircle, Scale, Gavel, RefreshCw } from 'lucide-react';
@@ -123,6 +124,11 @@ const Termos = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -53,6 +54,10 @@ function FormSection() {
return ( return (
<div id="formulario" className="scroll-mt-20"> <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"> <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> <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> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -44,6 +45,10 @@ function FormSection() {
return ( return (
<div id="formulario" className="scroll-mt-20"> <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"> <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> <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> <p className="text-gray-400 mb-6">Avaliamos sua estrategia atual e identificamos falhas antes que seja tarde demais.</p>
+5 -2
View File
@@ -1,4 +1,5 @@
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import SEO from '../../components/SEO';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
import { import {
@@ -205,8 +206,10 @@ export default function ContabilidadePage() {
return ( return (
<div ref={pageRef} className="min-h-screen bg-[#0e0e0e]"> <div ref={pageRef} className="min-h-screen bg-[#0e0e0e]">
<title>TI para Escritorios Contabeis | Avanzato Tecnologia</title> <SEO
<meta name="description" content="TI especializada para escritorios contabeis. Seguranca para SPED, backup de dados, servidor otimizado e suporte tecnico especializado." /> 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]"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -44,6 +45,10 @@ function FormSection() {
return ( return (
<div id="formulario" className="scroll-mt-20"> <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"> <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> <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> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -46,6 +47,10 @@ function FormSection() {
return ( return (
<div id="formulario" className="scroll-mt-20"> <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"> <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> <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> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -46,6 +47,10 @@ function FormSection() {
return ( return (
<div id="formulario" className="scroll-mt-20"> <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"> <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> <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> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -39,6 +40,10 @@ const Backup = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -49,6 +50,10 @@ const CloudComputing = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -33,6 +34,10 @@ const Consultoria = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -38,6 +39,10 @@ const Noc = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -46,6 +47,10 @@ const Pabx = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -49,6 +50,10 @@ const Redes = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -49,6 +50,10 @@ const Seguranca = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -38,6 +39,10 @@ const Servidores = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -46,6 +47,10 @@ const Suporte = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -82,6 +83,10 @@ const TiGerenciada = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Hero */}
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <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" /> <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,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -77,6 +78,10 @@ const Cisco = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -77,6 +78,10 @@ const Linux = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -77,6 +78,10 @@ const PfSense = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -77,6 +78,10 @@ const Proxmox = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -77,6 +78,10 @@ const Sharepoint = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -77,6 +78,10 @@ const Vmware = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
<section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden"> <section ref={heroRef} className="pt-32 pb-20 relative overflow-hidden">
+5
View File
@@ -1,3 +1,4 @@
import SEO from '../../components/SEO';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { gsap } from 'gsap'; import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { ScrollTrigger } from 'gsap/ScrollTrigger';
@@ -83,6 +84,10 @@ const WindowsServer = () => {
return ( return (
<div className="bg-[#0e0e0e] min-h-screen"> <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 */} {/* Schema.org JSON-LD */}
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} /> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }} />
+1 -1
View File
@@ -20,7 +20,7 @@ const devNoIndexPlugin = () => ({
// https://vite.dev/config/ // https://vite.dev/config/
export default defineConfig({ export default defineConfig({
base: './', base: '/',
plugins: [ plugins: [
inspectAttr(), inspectAttr(),
react(), react(),