feat(site): blocos 3D da marca, novas ofertas e hero mais abrangente
CI / audit (push) Successful in 10m38s
CI / verify (push) Successful in 13m10s
CI / deploy (push) Successful in 1m50s
CI / e2e (push) Successful in 18m48s

Hero e movimento
- cena 3D em tempo real com os blocos da marca (kit feito no Blender, 3d/blocos.py):
  marca, tela, integrações e dados; segue a rolagem, tem vida em repouso, reage ao
  cursor e, parada no topo, passa sozinha pelos estados com legenda
- três níveis de aparelho (full, lite, static); sem WebGL fica o pôster
- título novo: "Sites e sistemas sob medida para o jeito que a sua empresa trabalha."
- faixa de clientes com o ramo, linha do primeiro passo, hero alinhado às seções
- rótulos digitados, entrada dos blocos, cortina de blocos entre páginas e capa
  compartilhada entre a lista de cases e o case

Ofertas
- atendimento no WhatsApp com IA e nota fiscal para a reforma tributária
  (páginas de serviço, cartões da home, formulário e aviso com data de validade)
- página /ia atualizada, com fontes
- peças 3D em loop nos cartões e topos de página (3d/pecas.py)

Design
- hover por papel (bloco nos botões, barra nos links), rótulos sem caixa alta
- um destino por rótulo: "Falar sobre meu projeto" leva ao formulário,
  "Chamar no WhatsApp" abre o WhatsApp
- logo montado em blocos, 404 redesenhado, grades sem célula vazia
- ícones do PWA e manifesto novos

Specs em specs/, contexto de design em DESIGN.md e PRODUCT.md.
This commit is contained in:
evandro committed 2026-11-10 03:48:25 -03:00
1 parent 4671837c44
commit c7d09d63d4
165 files changed
+7940 -3790

No files matched your search

+82 -14
View File
@@ -8,15 +8,16 @@ import {
import HoverPrefetchLink from "@/app/components/HoverPrefetchLink";
import WhatsAppLink from "@/app/components/WhatsAppLink";
import { safeJsonLd } from "@/lib/jsonld";
import { offerLabels } from "@/lib/offer-labels";
import { buildBreadcrumbList, buildPageSocialMetadata } from "@/lib/seo";
import { siteUrl } from "@/lib/site-content";
import { buttonLabels, siteUrl } from "@/lib/site-content";
import { IA_PAGE_LABEL } from "@/lib/site-navigation";
import { AI_REVIEW_SUBJECT } from "@/lib/whatsapp";
const pageUrl = `${siteUrl}/ia`;
/**
* Título para busca: até 44 caracteres, e 60 com o " | Evandro.dev.br" que o template de app/layout.tsx acrescenta. Cobre a oferta
* (revisão de sistema) e a busca por app feito com IA. O nome da oferta, o mesmo da home, é o da trilha e dos dados estruturados.
* (revisão de sistema) e a busca por app feito com IA. A trilha e os dados estruturados usam o rótulo da página no menu e no
* rodapé (`IA_PAGE_LABEL`); a oferta, nos cartões e no formulário, continua com o nome dela.
*/
const pageTitle = "Revisão de sistema e de app feito com IA";
const pageDescription =
@@ -121,7 +122,7 @@ const RESPONSIBILITIES = [
},
];
/** Três episódios de 2025, resumidos. Cada um traz o que foi relatado, o que não foi provado e o cuidado técnico. */
/** Episódios de 2025 e 2026, resumidos. Cada um traz o que foi relatado, o que não foi provado e o cuidado técnico. */
const INCIDENTS = [
{
title: "Lovable: dados expostos em aplicações criadas na plataforma",
@@ -163,6 +164,35 @@ const INCIDENTS = [
},
],
},
{
title:
"Lovable, 2026: conversas e código de projetos públicos ficaram abertos",
summary:
"Em abril de 2026, a Lovable informou que, de 3 de fevereiro a 20 de abril, o histórico de conversa e o código-fonte de projetos públicos podiam ser acessados por qualquer usuário da plataforma que tivesse o link do projeto. A causa foi uma alteração interna que desfez uma proteção anterior. Pesquisadores avisaram a partir de 22 de fevereiro e os avisos foram encerrados sem chegar à equipe de segurança. A empresa diz que projetos privados não foram afetados e não informou quantos projetos foram de fato vistos por terceiros.",
care: "não escrever senhas, chaves nem dados de clientes na conversa com a ferramenta e conferir quem pode ver o projeto, que é diferente de quem pode ver o site publicado.",
links: [
{
href: "https://lovable.dev/blog/our-response-to-the-april-2026-incident",
label: "Relato da Lovable (22/04/2026, em inglês)",
},
],
},
{
title: "RedAccess, 2026: aplicações internas abertas na internet",
summary:
"Em maio de 2026, a empresa de segurança RedAccess disse ter encontrado cerca de 380 mil aplicações e outros arquivos públicos criados com Lovable, Base44, Netlify e Replit, dos quais cerca de 5 mil continham informação sensível de empresas. O site Axios conferiu alguns exemplos, entre eles informações financeiras internas de um banco no Brasil e conversas de atendimento de uma loja. As plataformas contestam: dizem que aplicação pública acessível é o comportamento esperado e não prova invasão nem falha de segurança.",
care: "decidir antes de publicar quem precisa entrar em cada ferramenta interna e exigir login, em vez de confiar que ninguém vai achar o endereço.",
links: [
{
href: "https://securityboulevard.com/2026/05/thousands-of-vibe-coded-apps-exposing-corporate-personal-data-redaccess/",
label: "Reportagem do Security Boulevard (07/05/2026, em inglês)",
},
{
href: "https://www.axios.com/2026/05/07/loveable-replit-vibe-coding-privacy",
label: "Reportagem do Axios (em inglês)",
},
],
},
];
export default function AiPage() {
@@ -171,7 +201,7 @@ export default function AiPage() {
"@graph": [
buildBreadcrumbList(pageUrl, [
["Início", siteUrl],
[offerLabels.revisao.name, pageUrl],
[IA_PAGE_LABEL, pageUrl],
] as const),
],
};
@@ -185,12 +215,11 @@ export default function AiPage() {
<Breadcrumb
items={[
{ label: "Início", href: "/" },
{ label: offerLabels.revisao.name, href: "/ia" },
{ label: IA_PAGE_LABEL, href: "/ia" },
]}
/>
<div className="grid items-center gap-sp-8 lg:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)] lg:gap-sp-12">
<div className="min-w-0">
<p className="ds-eyebrow">IA no desenvolvimento</p>
<h1 className="ds-section-title max-w-[24ch] text-balance">
Seu app feito com IA está pronto para receber clientes? Eu testo
antes deles.
@@ -209,7 +238,7 @@ export default function AiPage() {
service={WHATSAPP_SERVICE}
placement="ia_hero"
>
Pedir a revisão do meu app
{buttonLabels.whatsapp}
</WhatsAppLink>
<a href="#ia-receber" className={textLinkDark}>
Ver como a revisão funciona
@@ -390,10 +419,10 @@ export default function AiPage() {
</summary>
<div className="pb-sp-8">
<p className="ds-copy max-w-[75ch]">
São episódios de 2025, não avaliações atuais das plataformas.
Eles mostram riscos de configuração, permissões e operação; não
provam que todo sistema feito com IA seja inseguro ou que um
profissional elimine qualquer risco.
São episódios de 2025 e 2026, não avaliações atuais das
plataformas. Eles mostram riscos de configuração, permissões e
operação; não provam que todo sistema feito com IA seja inseguro
ou que um profissional elimine qualquer risco.
</p>
<div className="mt-sp-6 grid gap-sp-6 lg:grid-cols-3">
{INCIDENTS.map((incident) => (
@@ -426,7 +455,7 @@ export default function AiPage() {
</section>
<section className="ds-section" aria-labelledby="ia-lgpd-title">
<div className="ds-section-shell grid gap-sp-6 lg:grid-cols-2">
<div className="ds-section-shell grid items-start gap-sp-6 lg:grid-cols-3">
<article className="ds-card">
<h2 id="ia-lgpd-title" className="ds-card-title !mt-0">
E a LGPD?
@@ -445,6 +474,14 @@ export default function AiPage() {
contratar desenvolvimento não equivale a uma certificação de
adequação.
</p>
<p className="ds-copy">
Se houver um incidente com dados pessoais que possa trazer risco
ou dano relevante, a empresa precisa comunicar a ANPD e as pessoas
afetadas em três dias úteis depois de saber do fato; agentes de
pequeno porte têm o prazo em dobro. Cumprir esse prazo depende de
ter cópia de segurança, registro de acessos e alguém que saiba
onde olhar.
</p>
<a
className="mt-sp-4 inline-flex min-h-11 items-center text-[15px] underline underline-offset-4"
href="https://www.gov.br/anpd/pt-br/acesso-a-informacao/institucional/atos-normativos/regulamentacoes_anpd/resolucao-cd-anpd-no-2-de-27-de-janeiro-de-2022"
@@ -453,6 +490,37 @@ export default function AiPage() {
>
ANPD: Resolução nº 2/2022, arts. 6º, 12 e 13
</a>
<a
className="mt-sp-4 inline-flex min-h-11 items-center text-[15px] underline underline-offset-4"
href="https://www.in.gov.br/en/web/dou/-/resolucao-cd/anpd-n-15-de-24-de-abril-de-2024-556243024"
target="_blank"
rel="noopener noreferrer"
>
ANPD: Resolução nº 15/2024, arts. 6º e 9º
</a>
</article>
<article className="ds-card">
<h2 className="ds-card-title !mt-0">
Quem responde pelo que a IA escreve?
</h2>
<p className="ds-copy">
Em março de 2026, a Sexta Turma do Tribunal Superior do Trabalho
multou uma empresa de telecomunicações e o advogado dela por
citarem, em um recurso, decisões que não existiam, atribuídas pelo
tribunal ao uso de inteligência artificial.
</p>
<p className="ds-copy">
O caso é de um processo, não de um sistema. A regra é a mesma:
quem assina responde pelo que entrega.
</p>
<a
className="mt-sp-4 inline-flex min-h-11 items-center text-[15px] underline underline-offset-4"
href="https://www.tst.jus.br/-/empresa-e-advogado-sao-multados-por-uso-de-ia-com-decisoes-falsas"
target="_blank"
rel="noopener noreferrer"
>
TST: notícia de 26/03/2026
</a>
</article>
<article className="ds-card">
<h2 className="ds-card-title !mt-0">
@@ -475,7 +543,7 @@ export default function AiPage() {
service={WHATSAPP_SERVICE}
placement="ia_closing"
>
Avaliar meu projeto
{buttonLabels.whatsapp}
</WhatsAppLink>
</div>
</article>