Como eu construi um site que faz entrevistas por mim (e porque você deveria pensar no seu portfolio como um produto)
Vou contar uma história que começou com frustração e terminou com um avatar meu respondendo recrutadores em 3 idiomas.
O problema
Todo profissional de tecnologia já passou por isso: você tem 10 anos de experiência, trabalhou em projetos reais com resultados concretos, mas seu currículo é um PDF estático que não conta nem 5% da história. Recrutadores mandam mensagens no LinkedIn com vagas que não tem nada a ver com seu perfil. Outros pedem "30 minutos do seu tempo" para entender se a vaga faz sentido — e você gasta 2 horas na semana com calls que não dão em nada.
Eu decidi resolver isso do jeito que sei: construindo.
A ideia
E se meu portfolio não fosse só um site bonito, mas um produto que trabalha por mim? Algo que:
- Recebe o recrutador ou cliente
- Entende o que ele precisa
- Conecta com minha experiência relevante
- Qualifica o lead automaticamente
- E só me chama quando realmente vale a pena conversar
Parece ambicioso? Era. Mas fui fazendo por fases.
Fase 1: O básico que ninguém faz direito
Comecei com o que todo dev faz: montar o site. Mas com decisões que iam me ajudar depois:
- Monorepo com Turborepo — frontend e backend no mesmo repo, tipos compartilhados
- Next.js 15 com App Router — SSG pro blog, ISR pro conteúdo dinâmico
- NestJS 11 no backend — modular, testável, Swagger automático
- Trilíngue desde o dia 1 (en/pt/es) — porque meus clientes estão no Brasil, EUA e LATAM
A diferença aqui foi pensar no portfolio como um SaaS de uma pessoa só. Cada seção vem de um CMS que eu controlo. Quero mudar minha experiência? Edito no admin, o site atualiza em 5 minutos.
Fase 2-5: O admin que eu queria
Aqui a coisa ficou interessante. Além do portfolio público, construí um dashboard admin completo:
- Blog CMS com geração de draft por IA, tradução automática para 3 idiomas, e geração de post pro LinkedIn
- Kanban com drag & drop e geração de cards por IA
- Google Calendar integrado (OAuth2, CRUD de eventos, views Month/Week/Day)
- Finance tracker com contas PF/PJ, categorias, importação de CSV
- Analytics com dashboard GA4 (trends, top pages, sources, devices)
- News aggregator com 10+ feeds RSS e sumarização por IA
- AI Assistant com 37 tools — consigo gerenciar tudo por chat
O assistant é a peça que junta tudo. Eu falo "crie um card urgente no kanban sobre otimizar o deploy" e ele cria. "Qual foi minha receita esse mês?" e ele consulta o finance. "Traduz o último artigo para espanhol" e ele faz.
Fase 6: Onde as coisas ficaram loucas
Aqui foi onde eu me empolguei — e o resultado ficou melhor do que eu imaginava.
O sistema de entrevista por IA
Construí um sistema progressivo de entrevista:
Nível 1: Chat texto — A IA responde como se fosse eu (usando meu perfil completo, minha experiência, meus projetos). Ela qualifica o lead silenciosamente, dando uma nota de 0 a 100 em 4 dimensões: budget, timeline, fit técnico e engajamento.
Nível 2: Voz — Clonei minha voz no ElevenLabs. O visitante grava áudio, o Deepgram transcreve, a IA responde, e o ElevenLabs sintetiza a resposta com a minha voz. O recrutador literalmente "conversa" comigo.
Nível 3: Avatar — Integrei o SimliAI para lip-sync. Um avatar meu responde com movimento labial sincronizado com a voz. E tudo roda no browser do visitante — sem servidor de vídeo.
Nível 4: Transfer ao vivo — Quando a conversa fica boa, o visitante clica "Talk to Real JV", o sistema cria uma sala no Daily.co e me notifica. Eu entro na call e o avatar some, dando lugar à minha câmera real.
Os desafios técnicos
Fazer isso funcionar em celular foi a parte mais difícil:
- Safari não suporta audio/webm — tive que detectar o MIME type e mandar como audio/mp4
- Mobile bloqueia áudio sem gesto do usuário — criei um Audio element persistente e toco um buffer silencioso no momento do tap
- Áudio duplo no modo avatar — o áudio tocava localmente E no SimliAI. Resolvi com um flag dinâmico baseado no estado real da conexão do avatar
- Avatar não carregava na primeira visita — race condition no socket.io. Troquei por uma chamada REST para buscar a config
Cada bug desses levou horas de debug com DevTools mobile. Mas o resultado é que funciona em Chrome, Safari e Firefox — desktop e mobile.
Os números
| Recurso | Métrica |
|---|---|
| Módulos backend | 15 |
| Endpoints REST | 130+ |
| Componentes React | 69 |
| Tools do AI Assistant | 37 |
| Tabelas no banco | 30+ |
| Idiomas | 3 |
| Schemas Zod | 40+ |
| Custo mensal estimado | ~$45 (5h de sessões) |
O backend roda em uma VM Oracle Cloud de 1GB de RAM. Sim, 1GB. O segredo: a VM só orquestra — o áudio pesado vai direto para as APIs cloud (Deepgram, ElevenLabs, SimliAI). Build local + rsync do dist.
O que aprendi
- Portfolio é produto — Trate como tal. Versione, monitore, itere.
- IA não substitui, amplifica — A IA não faz minha entrevista melhor que eu. Ela faz as 20 entrevistas que eu não tenho tempo de fazer.
- Mobile first não é opcional — 60%+ dos visitantes vêm pelo celular. Se o áudio não funciona no Safari, perdeu o recrutador.
- Fallback em tudo — Claude cai? OpenAI assume. API do CMS falha? Dados estáticos carregam. Avatar não conecta? Voice mode continua.
- Custo importa — Usei Deepgram ao invés de Whisper ($0.007/min vs $0.006/min mas streaming nativo), SimliAI ao invés de HeyGen (10x mais barato), Daily.co free tier.
Stack final
| Camada | Tecnologia |
|---|---|
| Frontend | Next.js 15, React 19, Tailwind v4, TypeScript |
| Backend | NestJS 11, Socket.io, TypeScript |
| Database | PostgreSQL (Supabase) com RLS |
| LLM | Claude Sonnet 4 + GPT-4o fallback |
| STT | Deepgram Nova-2 |
| TTS | ElevenLabs (voice clone) |
| Avatar | SimliAI (browser-side lip-sync) |
| Video | Daily.co (live transfer) |
| Deploy | Vercel (front) + Oracle Cloud VM (back) |
| CI/CD | GitHub Actions |
| Monitoring | Sentry |
Próximo passo
Agora esse site é um projeto no meu portfolio. Meta, não? O site que eu construí para mostrar meus projetos virou ele mesmo um dos projetos mais completos que eu já fiz.
Se você é dev e seu portfolio ainda é um HTML estático ou um template do Vercel... pensa no seguinte: o melhor case study que você pode ter é o seu próprio site. Ninguém vai questionar se o projeto é real — porque ele tá ali, funcionando, acessível por qualquer um.
JV Martins — Lead Data Engineer @ Medtronic | Founder @ DadosNow Esse artigo foi escrito por mim, humano. Não pela IA. Irônico, né?