Merge remote-tracking branch 'origin/develop'
This commit is contained in:
@@ -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
|
||||
Generated
+36
@@ -51,6 +51,7 @@
|
||||
"react": "^19.2.0",
|
||||
"react-day-picker": "^9.13.0",
|
||||
"react-dom": "^19.2.0",
|
||||
"react-helmet-async": "^3.0.0",
|
||||
"react-hook-form": "^7.70.0",
|
||||
"react-resizable-panels": "^4.2.2",
|
||||
"react-router-dom": "^7.14.0",
|
||||
@@ -6744,6 +6745,15 @@
|
||||
"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": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||
@@ -7668,6 +7678,26 @@
|
||||
"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": {
|
||||
"version": "7.70.0",
|
||||
"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==",
|
||||
"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": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
"react": "^19.2.0",
|
||||
"react-day-picker": "^9.13.0",
|
||||
"react-dom": "^19.2.0",
|
||||
"react-helmet-async": "^3.0.0",
|
||||
"react-hook-form": "^7.70.0",
|
||||
"react-resizable-panels": "^4.2.2",
|
||||
"react-router-dom": "^7.14.0",
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "1.0.9",
|
||||
"date": "2026-05-29",
|
||||
"version": "1.1.1",
|
||||
"date": "2026-05-31",
|
||||
"environment": "development"
|
||||
}
|
||||
|
||||
@@ -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 ""
|
||||
@@ -47,6 +47,13 @@ show_banner() {
|
||||
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
|
||||
check_deps() {
|
||||
if ! command -v node &> /dev/null; then
|
||||
@@ -86,6 +93,10 @@ cmd_build() {
|
||||
echo -e "${BLUE}[2/2]${NC} Configurando robots.txt para producao..."
|
||||
cp "${PROJECT_DIR}/public/robots-producao.txt" "${DIST_DIR}/robots.txt"
|
||||
echo -e "${GREEN}OK${NC} - Build de producao pronto em dist/"
|
||||
|
||||
# Gerar paginas estaticas para rotas
|
||||
run_post_build "$DIST_DIR"
|
||||
|
||||
echo ""
|
||||
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..."
|
||||
# robots.txt ja esta com noindex por padrao
|
||||
echo -e "${GREEN}OK${NC} - Build de homologacao pronto em dist/"
|
||||
|
||||
# Gerar paginas estaticas para rotas
|
||||
run_post_build "$DIST_DIR"
|
||||
|
||||
echo ""
|
||||
echo -e "Para deploy: ${CYAN}bash scripts/dev.sh deploy-hom${NC}"
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
})),
|
||||
});
|
||||
@@ -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>
|
||||
<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
-1
@@ -20,7 +20,7 @@ const devNoIndexPlugin = () => ({
|
||||
|
||||
// https://vite.dev/config/
|
||||
export default defineConfig({
|
||||
base: './',
|
||||
base: '/',
|
||||
plugins: [
|
||||
inspectAttr(),
|
||||
react(),
|
||||
|
||||
Reference in New Issue
Block a user