O manequim
Tudo começou de uma lembrança. Em 2024 eu fui no Interação FURB, que é um evento da universidade aqui da minha cidade onde você pode ir nas oficinas e ver um pouco de cada curso. Na oficina de Ciência da Computação o professor apontou o celular pra um código que estava na camisa de um manequim, e na tela apareceu o corpo humano em 3D, por dentro, preso na camisa. Aquilo ficou na minha cabeça.
Dois anos depois resolvi fazer igual.
Um dia pro APK
Dia 23 de setembro eu sentei e fiz um grill-me da ideia, que é basicamente deixar a IA me sabatinar até eu saber o que eu queria de verdade. Não tinha prazo, não tinha cliente, era pra aprender AR nativa mesmo: ler um marcador impresso, ancorar um modelo 3D nele e entender como isso funciona por dentro. Fechei em Unity com AR Foundation e ARCore, só Android.
No dia 24 o APK estava pronto e funcionando. Um marcador impresso, um modelo de anatomia humana em cima, no celular. Era a cena do manequim.
A noite que o CEO passou na minha mesa
Nessa mesma noite o CEO passou por perto e eu chamei ele pra ver. Ele viu e gostou muito! Aí ele me lançou um desafio: fazer isso na web, pra qualquer pessoa conseguir abrir no celular sem ter o trabalho de instalar um app. O quanto antes. Se eu conseguisse, ele ia colocar no camarote da empresa no desfile da Oktoberfest.
Agarrei a oportunidade.
O problema é que eu não conhecia nenhuma ferramenta de AR pra navegador. Nenhuma. Então na mesma noite comecei a pesquisar com a ajuda da IA e cheguei em seis opções. Quatro caíram rápido: uma precisava de flag no Chrome, duas eram plataforma hospedada sem self-host, e WebXR nativo não roda no Safari do iPhone. Sobraram o MindAR e o 8th Wall open source. Fiquei com o 8th Wall porque é MIT, roda em Safari e Chrome, e eu podia hospedar na minha própria conta da AWS.
Aí tudo começou a andar de novo. Deixei o APK de lado e no dia 25 comecei a desenvolver tudo do zero.
Um dia pro site
Dia 25 de setembro foram 84 commits. Scaffolding em TypeScript, three.js e Vite, o portal com a logo da empresa saindo dele, o rastreamento da carta, a infra em S3 e CloudFront, o site publicado e testado num Galaxy S23 FE de verdade. Tudo entre nove da manhã e quatro da tarde.
Quando você aponta o celular pra carta, um portal se abre em cima dela, as peças da logo da empresa sobem lá de dentro, a logo brilha e uma órbita de ícones de serviços da AWS gira em volta, com um selo de parceiro. Tudo no navegador, sem instalar nada. A anatomia ficou pra trás: eu quis fazer algo pensado pra empresa, que fizesse ela se interessar, e por isso o que sai do portal é a logo dela.
O site está restrito por enquanto, então não deixo aqui o link nem a carta pra imprimir. O pedido do CEO era justamente que qualquer pessoa abrisse sem instalar nada, e é assim que ele funciona, só que fechado por ora.
Vale falar de como isso foi feito. O projeto inteiro, tanto o APK quanto o site, foi desenvolvido com o Claude Code. É 100% feito por IA. O que é meu são as skills de orquestração de agentes e de economia de token que eu uso em todos os meus projetos, e o briefing de cada tarefa. Meu trabalho foi decidir, testar no celular e devolver o que estava errado.
Dois números que saíram desse dia e que eu não teria se não tivesse medido:
- O portal tremia 1,10° em relação à carta parada, e a meta era 0,5°. Pra resolver usei um filtro One Euro, que suaviza forte quando o celular está parado e solta quando ele se mexe rápido, pra não dar atraso. Numa simulação o tremor caiu pra 0,33°, com um atraso de 0,88° num giro rápido. Esse número veio da simulação, não do celular.
- A primeira visita do site pesa 6,48 MB, e quase 5 MB são o motor do 8th Wall. O orçamento era 10 MB, pensando no 4G de um camarote lotado.
Sobre o 8th Wall: o pacote que eu uso é MIT e não inclui SLAM. O SLAM existe só num binário com licença própria, e eu deixei o rastreamento de mundo desligado.
A carta é a parte difícil
Eu achava que o difícil ia ser o 3D. Era a carta.
A primeira carta com QR foi cancelada uma hora depois de gerada. O QR ficou pequeno demais e dentro da área que o 8th Wall rastreia. O Claude me explicou que o QR tem muito padrão repetitivo, e isso atrapalha a ancoragem. O guia de imagens rastreadas do Google também desaconselha QR e código de barras. Eu não medi isso sozinho, foi o que o Claude me explicou e o que o guia diz. A solução foi tirar o QR do recorte rastreado e colocar numa faixa própria, embaixo.
Imprimi pelo menos umas quinze cartas diferentes pra testar ancoragem.
Coisas que só aparecem na mão de alguém
O primeiro protótipo tinha bastante som. Um deles era um zumbido em loop enquanto o portal ficava aberto. Eu achei que parecia helicóptero. Todo mundo pra quem eu mostrei achou que parecia helicóptero. Era ridículo. Foi removido.
Nada disso aparece pro agente. Aparece quando você aponta o celular.
Depois disso veio o Oktobercloud, outro projeto no mesmo repo: uma caneca de chopp que enche e brinda em cima de um porta-copo. O desafio virou outro, achar um modelo 3D gratuito decente e animar. A caneca eu fui atrás na mão, no Sketchfab, e os agentes fizeram uma pesquisa pesada de como manipular no Blender. A caneca saiu de 6,47 MB pra 252 kB. No fim ele não foi usado, mas ficou uma animação bem legal.
O que ficou
O desfile da Oktoberfest tem datas até 24 de outubro e ainda não tivemos retorno sobre o camarote em si.
O que ficou é o repo: 107 PRs, esteira de CI/CD com deploy automático e um Lab com receita e lição de cada efeito. É a coisa mais completa que eu já construí.
Aprendi bastante. Algumas horas de estudo e pesquisa com o Claude me ensinaram AR e, principalmente, modelagem 3D. Descobri ferramentas novas. Vi que, com as skills certas e ordens bem dadas, dá pra fazer o Claude gerar modelos 3D e 2D muito bons. E vi que existem ferramentas open source de AR muito boas, que funcionaram de verdade nesse projeto.
O APK ficou parado por enquanto. Quero voltar nele pra fazer coisas mais robustas.
Em 2024 eu era o cara olhando pro manequim. Em setembro fui eu que fiz o portal abrir.
Crédito: o modelo da caneca é o "Beer", do chiwei, no Sketchfab, licença CC BY 4.0, adaptado.







