XpanndAI
Portfólio de Michel André CaldeiraMichel André Caldeira's portfolio

Do P&L ao pull request.From P&L to pull request.

Executivo comercial B2B, com P&L de até US$ 80 milhões e operação em 29 países. Em 8 semanas, coloquei três plataformas de IA em produção dirigindo agentes de código como time de engenharia, com as regras de um time de verdade: banco protegido, 1.420 testes automáticos e login com dois fatores.B2B commercial executive, with P&L of up to US$80 million and operations in 29 countries. In 8 weeks, I put three AI platforms into production by directing coding agents as my engineering team, under the rules of a real team: a locked-down database, 1,420 automated tests and two-factor login.

Os três estão no ar. Números conferidos nos repositórios em 07/10/2026.All three are live. Numbers checked against the repositories on Oct 7, 2026.

3
plataformas no arplatforms live
121 mil121k
linhas de códigolines of code
1.4201,420
testes automáticos, todos passandoautomated tests, all passing
64
funções no servidorserver-side functions
196
entregas versionadas no Gitdeliveries versioned in Git
8
semanas, de 10/08 a 06/10weeks, Aug 10 to Oct 6

Como eu trabalhoHow I work

Agentes escrevem o código. Eu defino o problema, as regras e o que é pronto.Agents write the code. I define the problem, the rules and what done means.

O mesmo método nos três produtos, com como time de engenharia. É ele que transforma IA em resultado de operação, e é ele que levo para uma empresa.The same method across all three products, with as the engineering team. It is what turns AI into operating results, and it is what I bring to a company.

GovernançaGovernance

A IA compõe e classifica. Quem decide é gente.AI drafts and classifies. People decide.

Horário, roteamento e prazo são código previsível. Nota e recomendação da IA nunca aparecem na tela de decisão, e mensagem sensível só sai depois de um clique de aprovação.Scheduling, routing and deadlines are predictable code. AI scores and recommendations never appear on a decision screen, and sensitive messages only go out after a one-click approval.

Lynxs › AvaliarLynxs › EvaluateLynxs › CentralLynxs › Agent HubFORCE › Caixa da IAFORCE › AI Inbox

DesenhoDesign

Benchmark e mockup antes do códigoBenchmark and mockup before code

Cada mudança grande começou comparando quem resolve melhor (Rocketlane, Calendly, Greenhouse, Linear) e virou mockup com as decisões em aberto. Código só depois do sim.Every major change started by comparing who solves it best (Rocketlane, Calendly, Greenhouse, Linear) and became a mockup with the open decisions. Code only after the yes.

20+ mockups aprovados20+ approved mockupsnota do FORCE no benchmark: 58 → 77FORCE benchmark score: 58 → 77

QualidadeQuality

Regra primeiro, com teste ao ladoRule first, test alongside

Toda regra nasce pura e testada; motor e tela só chamam a regra. A que vale no navegador e no servidor existe duas vezes, com o mesmo exemplo testado, para a divergência aparecer.Every rule is born pure and tested; the engine and the screen only call it. A rule that runs in both the browser and the server exists twice, tested with the same example, so any drift shows up.

1.420 testes1,420 tests em todo PR on every PR

CanonicidadeCanonical

Uma origem para cada significadoOne source for each meaning

Um componente por conceito, uma fonte de verdade por dado. No FORCE, o código não conhece nenhum cliente: 294 menções ao primeiro viraram configuração.One component per concept, one source of truth per data point. In FORCE, the code knows no client: 294 references to the first one became configuration.

mapa do sistema no mesmo PRsystem map in the same PRum dicionário de dicasone tooltip dictionary

SegurançaSecurity

Quem vê o quê mora no bancoWho sees what lives in the database

Regras de acesso no próprio Postgres (), dois fatores exigidos dentro da consulta, links de uso único guardados como e chaves só no servidor.Access rules inside Postgres itself (), two-factor enforced inside the query, single-use links stored as a and keys only on the server.

RLSsegredos no cofresecrets in the vault

HonestidadeHonesty

A tela não promete o que o código não fazThe screen never promises what the code doesn't do

Trilha sem gatilho diz "ainda sem gatilho". Falha mostra o motivo real. Uma página de status confere cada função publicada, de verdade.A track without a trigger says "no trigger yet". A failure shows the real reason. A status page checks every deployed function, for real.

Testes AIAI Testsstatus ao vivolive status

Como uma funcionalidade nasceHow a feature is born

sempre nesta ordem, do benchmark à medidaalways in this order, from benchmark to measurement

  1. 01Benchmarkquem resolve isso melhor, e por quêwho solves this best, and why
  2. 02Mockupa tela antes do código, com as decisões em abertothe screen before the code, with the open decisions
  3. 03DecisãoDecisiono dono decide; a decisão fica registradathe owner decides; the decision is recorded
  4. 04Regra e testeRule and testregra pura, com o teste ao ladoa pure rule, with its test alongside
  5. 05Motor e telaEngine and screensó chamam a regrathey only call the rule
  6. 06PR e CIPR and CIlint, tipos, testes e buildlint, types, tests and build
  7. 07ProduçãoProductiono merge publica; com resultado esperadomerge deploys; each states its expected result
  8. 08MedidaMeasurementstatus, métrica por trilha, nota do benchmarkstatus, per-track metrics, benchmark score

Quem faz o quê. O agente de código lê o repositório, escreve, roda os testes e abre o PR. Eu defino o problema, escrevo as regras do projeto, reviso, decido e publico.Who does what. The coding agent reads the repository, writes code, runs the tests and opens the PR. I define the problem, write the project rules, review, decide and ship.

Três produtosThree products

Três dores de operação, três plataformas no arThree operating pains, three platforms live

Números e diagrama à vista; cada linha abre como foi feito. Os botões pretos levam à tela de verdade, que pede login.Numbers and diagrams up front; each row opens into how it was built. The black buttons open the real screen, which requires login.

Lynxs

Recrutamento com três agentes de IA sobre os mesmos dadosRecruiting with three AI agents on the same data

SaaS B2B multiempresa para agências e consultorias de RH: vagas, candidatos, entrevista em vídeo, agenda e WhatsApp num lugar só.Multi-tenant B2B SaaS for recruiting agencies and HR consultancies: jobs, candidates, video interviews, scheduling and WhatsApp in one place.

app.lynxs.com.br ago a out de 2026Aug to Oct 2026 Meu papel: produto, arquitetura e 127 dos 138 PRsMy role: product, architecture and 127 of 138 PRs
102 mil102k
linhas de front, funções e SQLlines of front end, functions and SQL
47
em Denoin Deno
79
migrações de bancodatabase migrations
1.0271,027
testes: 749 Vitest e 278 Denotests: 749 Vitest and 278 Deno
24
trilhas do agenteagent tracks
19
PRs num só dia, com CI verdePRs in a single day, CI green
Meu Assessor contato, agenda e confirmação(assistant): outreach, scheduling and confirmation Copiloto roteiro, entrevista, parecer e DISC(copilot): interview guide, interview, assessment and DISC Base Ativa acervo, consentimento e reengajamento(talent pool): pool, consent and re-engagement

O motor do Meu AssessorThe Meu Assessor engine

o modelo compõe; portões, horário e envio são códigothe model drafts; gates, timing and sending are code
IniciativaOutreach
RelógioClockpg_cron: 1 e 5 minpg_cron: 1 and 5 min
PlanejadorPlannero que vence por tempowhat is due by time
FilaQueueações com prazo e dedupeactions with deadline and dedupe
ExecutorExecutor3 portões, ritmo de 6 h3 gates, 6 h pacing
ModeloModelcompõe com a ficha públicadrafts from the public job sheet
CanalChannelWhatsApp ou e-mailWhatsApp or email
RespostaReply
CandidatoCandidateresponde no WhatsAppreplies on WhatsApp
Webhookconfere token, dedupe 2 minchecks token, 2 min dedupe
Executoracordado na horawoken right away
Uma chamadaOne call{tipo, mensagem}{type, message}
Guarda-corpoGuardrailhorário só pelo linktimes only via link
CentralAgent Hubo que pede gentewhat needs a person

Com meu OK: a mensagem espera até 24 h na Central, e um clique envia o que estiver na caixa, editada ou não. Cada trilha roda Sozinho ou Com meu OK, por empresa e por vaga.With my OK: the message waits up to 24 h in the Agent Hub, and one click sends whatever is in the box, edited or not. Each track runs On its own or With my OK, per company and per job.

Bancada · entrevista em vídeo que não perde a gravação· the video interview that never loses the recording WebRTCCloudflare TURNSupabase RealtimeStorageWhisper
O problemaThe problem

Entrevista em vídeo cai, o navegador fecha, e com ele vai o áudio que viraria transcrição, parecer e DISC.Video interviews drop, the browser closes, and with it goes the audio that would have become the transcript, the assessment and the DISC reading.

O que construíWhat I built

Vídeo direto entre os dois navegadores (), com servidor de passagem da Cloudflare () e credencial própria por sala. A sinalização tem dois caminhos, PeerJS e , com troca automática sem recarregar a página. Cada lado sobe pedaços de 3 s de áudio para um cofre privado, e cada bloco de 5 min vira MP3. Se a sala morre, um relógio no servidor transcreve os blocos, junta tudo e avisa a Central.Direct video between the two browsers (), with a Cloudflare relay server () and a dedicated credential per room. Signaling has two paths, PeerJS and , with automatic failover without reloading the page. Each side uploads 3-second audio chunks to a private vault, and every 5-minute block becomes an MP3. If the room dies, a server-side clock transcribes the blocks, stitches everything together and alerts the Agent Hub.

O diferencialWhat sets it apart

A transcrição da rodada é uma só, feita de sessões com origem: Bancada, gravação enviada, transcrição colada, parecer externo ou gravação recuperada. Parecer e DISC leem o conjunto e citam a fala do candidato como evidência. A sinalização é uma máquina de estados pura, com 23 testes.Each interview round has a single transcript made of sessions with a source: interview room, uploaded recording, pasted transcript, external review or recovered recording. The assessment and DISC read the whole set and quote the candidate as evidence. Signaling is a pure state machine with 23 tests.

Anatomia da gravação protegidaAnatomy of the protected recording

  • 3 spedaço de áudio de cada lado, por URL assinadaaudio chunk from each side, via signed URL
  • 5 mincada bloco fechado vira MP3 no navegadoreach closed block becomes an MP3 in the browser
  • 15 minsem sinal, a sala é dada como encerradawith no signal, the room is considered over
  • 10 mino relógio do servidor transcreve e juntathe server clock transcribes and stitches
  • 24 ho áudio é apagado; fica a transcriçãothe audio is deleted; the transcript stays
Meu Assessor · 24 trilhas que conversam pelo WhatsApp· 24 tracks that talk over WhatsApp Edge Functionspg_cronVaultZ-APIResendOpenRouter
O problemaThe problem

Agência perde candidato bom por demora: ninguém apresenta a vaga, confirma, lembra ou dá retorno a tempo.Agencies lose good candidates to delay: nobody presents the job, confirms, reminds or follows up in time.

O que construíWhat I built

Um catálogo de 24 trilhas, cada uma com objetivo, limites e cadência: apresentar a vaga, perguntas de entrada, agendar, confirmar, lembrar, tratar falta, dar retorno, encerrar e reengajar o acervo, além de oito internas que preparam o entrevistador e cobram o recrutador. Um relógio no banco (, com segredos no ) acorda o planejador a cada 5 min e o executor a cada 1 min. Mensagem que chega pelo acorda o executor na hora.A catalog of 24 tracks, each with a goal, limits and cadence: present the job, screening questions, schedule, confirm, remind, handle no-shows, follow up, close out and re-engage the pool, plus eight internal ones that brief the interviewer and nudge the recruiter. A clock inside the database (, with secrets in ) wakes the planner every 5 minutes and the executor every minute. A message arriving through the wakes the executor right away.

A governançaGovernance

Três portões, nesta ordem: trilha ligada na empresa, rodada automatizada e candidato liberado. O candidato nasce bloqueado, então ninguém é abordado por acidente. Ritmo de 6 h entre iniciativas e 5 por semana; resposta não gasta cota. O agente nunca marca horário por conversa: manda o link ou passa para o recrutador.Three gates, in this order: track enabled for the company, round automated, candidate released. Candidates start blocked, so nobody is contacted by accident. 6 hours between outreach attempts and at most 5 per week; replies don't count against the cap. The agent never books a time through chat: it sends the link or hands off to the recruiter.

Os três portõesThe three gates

  • 1Trilha ligada na empresa (Central)Track enabled for the company (Agent Hub)
  • 2Rodada automatizada (editor de etapas)Round automated (stage editor)
  • 3Candidato liberado no Kanban; nasce fechadoCandidate released on the Kanban; starts closed
Agenda por rodada · o horário livre de todo mundo, sem troca de e-mailScheduling by round · everyone's free time, no email back-and-forth iCalendarResendlink públicopublic link
O problemaThe problem

Marcar uma entrevista com três entrevistadores e um candidato custa dias de mensagem.Booking one interview with three interviewers and a candidate takes days of messages.

O que construíWhat I built

Cada rodada tem pessoas obrigatórias. O sistema lê o iCal de cada uma e oferece só o horário livre em todas. O candidato escolhe pelo link, remarca ou desmarca sozinho até 24 h antes.Each round has required people. The system reads each person's iCal and offers only the times that are free for all of them. The candidate picks through a link, and can reschedule or cancel alone up to 24 hours before.

O diferencialWhat sets it apart

O convite sai por e-mail como e entra na agenda de cada pessoa com Sim e Não. Remarcar sobe o número de versão do convite; desmarcar manda o cancelamento. Sem integração por pessoa e sem pedir acesso à conta Google de ninguém.The invite goes out by email as an file and lands in each person's calendar with Yes and No. Rescheduling bumps the invite's version; canceling sends the cancellation. No per-person integration and no access requested to anyone's Google account.

Interseção, exemplo de um diaIntersection, a sample day

O link do candidato oferece só o 12h.The candidate's link offers only 12:00.

Copiloto · perguntas certas, régua igual e parecer que cita a fala· the right questions, one scale and assessments that quote the candidate transcriçãotranscriptDISCperguntas da épocafrozen question list
O problemaThe problem

Cada entrevistador pergunta uma coisa e avalia de um jeito; a decisão vira impressão.Each interviewer asks different things and rates differently; the decision becomes an impression.

O que construíWhat I built

A lista da rodada é a única verdade do que se pergunta, alimentada por três fontes: banco por tema, IA e histórico, este com a nota média de quem já respondeu. Ao abrir a Sala, a lista congela; depois da primeira resposta, mudança na vaga não mexe mais nela. A IA extrai da transcrição as respostas abertas, sem apagar o que o entrevistador escreveu.The round's list is the single source of truth for what gets asked, fed by three sources: a question bank by theme, AI, and history, with the average score from past candidates. When the room opens, the list freezes; after the first answer, changes to the job no longer touch it. AI extracts open-ended answers from the transcript without overwriting what the interviewer wrote.

A governançaGovernance

Nota e recomendação da IA aparecem na triagem e nunca na tela de decisão. entra como leitura, com a frase do candidato como evidência.AI scores and recommendations show up in triage and never on the decision screen. comes in as a reading, with the candidate's own words as evidence.

A régua de toda perguntaThe scale for every question

1Não atendeuNot met2ParcialPartial3AtendeuMet4SuperouExceeded
Base Ativa · consentimento com prova e acervo que volta a trabalhar· consent with proof and a talent pool that goes back to work LGPDlink permanentepermanent linkmatch com OKmatch with approval
O problemaThe problem

Quem não passou vira planilha esquecida, e recontatar sem base legal é risco.People who didn't get the job end up in a forgotten spreadsheet, and contacting them again without a legal basis is a risk.

O que construíWhat I built

Um link público e permanente por pessoa. O aceite grava o texto exato que ela viu, como prova; recusar vira opt-out, reversível. No mesmo link ela acompanha o próprio processo: etapa, horário, remarcar e sair.A permanent public link per person. Accepting stores the exact text they saw, as proof; declining becomes an opt-out that can be reversed. On the same link they follow their own process: stage, time, reschedule and leave.

O diferencialWhat sets it apart

Quando abre vaga nova, o acervo propõe até 10 nomes com aderência mínima de 70, e o recrutador aprova a lista antes de qualquer convite. A resposta ao contato atualiza o cadastro sozinha.When a new job opens, the pool suggests up to 10 names with a minimum fit of 70, and the recruiter approves the list before any invitation. The reply to the outreach updates the record on its own.

O que fica registradoWhat gets recorded

  • AceiteConsento texto exibido, a data e o canalthe text shown, the date and the channel
  • RecusaDeclineopt-out reversível, sem trava de temporeversible opt-out, no time lock
  • Matcha lista que o recrutador aprovouthe list the recruiter approved
Engenharia · como 127 PRs entraram sem derrubar a produçãoEngineering · how 127 PRs shipped without breaking production GitHub ActionsVitestDenoTypeScriptVercel
O que construíWhat I built

Todo PR roda lint, tipos, 749 testes Vitest, o portão das funções em Deno (278 testes) e o build. O merge publica o front na Vercel e as 47 funções no Supabase. Migração não sobe sozinha: cada arquivo diz no cabeçalho o resultado esperado e como conferir.Every PR runs lint, types, 749 Vitest tests, the Deno gate for the functions (278 tests) and the build. Merging deploys the front end to Vercel and the 47 functions to Supabase. Migrations never run on their own: each file states in its header the expected result and how to verify it.

O diagnósticoDiagnostics

Uma página de Testes AI prova o que dispara de verdade (e-mail, WhatsApp, convite de agenda, transcrição), e uma função de status confere chave de IA, criptografia, TURN e cada função publicada. O mapa do sistema muda no mesmo PR que muda o sistema.An AI Tests page proves what actually fires (email, WhatsApp, calendar invite, transcription), and a status function checks the AI key, encryption, TURN and every deployed function. The system map changes in the same PR that changes the system.

O caminho de todo PREvery PR's path

lint→tipostypes→749 testes749 tests→278 Deno→build→publicadeploy

Xpannd FORCE

Plano, passos e decisões do próximo mercado, num lugar sóPlan, steps and decisions for the next market, in one place

A sala de comando dos projetos de expansão internacional da Xpannd, com área do cliente e IA que registra, cobra e resume. Nasceu de um painel feito no Claude e virou plataforma em 8 dias.The command room for Xpannd's international expansion projects, with a client area and AI that logs, follows up and summarizes. It started as a dashboard built in Claude and became a platform in 8 days.

xpannd.com.br/force 29/09 a 06/10 de 2026Sep 29 to Oct 6, 2026 Meu papel: tudo, do produto ao bancoMy role: everything, from product to database
15 mil15k
linhas, sem frameworklines, no framework
12
migrações de bancodatabase migrations
11
APIs na Vercel, em São PauloAPIs on Vercel, in São Paulo
393
testes de regra no banco, emdatabase rule tests, in
6
rotinas de IA por projetoAI routines per project
10
entregas num só dia (02/10)deliveries in a single day (Oct 2)

Registrar em uma linhaLog it in one line

exemplo com dados inventadosexample with made-up data
NRegistrarLoguma frase, do jeito que vierone sentence, however it comes
Ana manda a lista de distribuidores até sexta, passo MX2
TarefaPasso MX2Responsável: AnaPrazo: sexta

Registrados agoraLogged just now

  • PerguntaPergunta ao cliente: qual o volume mínimo por pedido?
  • EventoReunião com o importador na quarta às 15h
Linha: Claude Haiku 4.5Line: Claude Haiku 4.5Texto colado: Sonnet 5.5Pasted text: Sonnet 5.5O que você escreve vence a IAWhat you type beats the AI

Quem vê o quêWho sees what

decidido dentro do banco, a cada leituradecided inside the database, on every read
EmpresaCompanydono, admin, membroowner, admin, member
ProjetoProjectgestor, time, leitura, clientemanager, team, read-only, client
PaísCountryo time do Chile lê o Chile e o núcleothe Chile team reads Chile and the core
DocumentoDocumenttarefa, ação, reunião, arquivotask, action, meeting, file
Porta do bancoDatabase gatepapel, país e segundo fator () conferidos em cada consulta, calculados uma vez por leiturarole, country and second factor () checked on every query, computed once per read
Projeto canônico · o código não conhece nenhum clienteCanonical project · the code knows no client configuraçãoconfiguration4 camadas4 layersmodelo de projetoproject template
O problemaThe problem

O FORCE nasceu de um painel feito para um cliente. Havia 294 menções a ele no código: nomes, países, cláusulas e textos de tela. Um segundo cliente exigiria um segundo sistema.FORCE started as a dashboard built for one client. The code had 294 references to it: names, countries, contract clauses and screen copy. A second client would have required a second system.

O que construíWhat I built

Tudo que era do cliente virou configuração, em quatro camadas. Um projeto inventado roda inteiro sem nenhum resto do primeiro, conferido texto a texto, e o cliente real seguiu igual, comparado tela a tela antes e depois.Everything client-specific became configuration, in four layers. A made-up project runs end to end with no trace of the first, checked string by string, and the real client stayed the same, compared screen by screen before and after.

As quatro camadasThe four layers

ProjetoProjectdados: cliente, países, combinadosdata: client, countries, agreements
Pacote de setorIndustry packopcional: tabelas e famílias de produtooptional: price tables and product families
ModeloTemplateentrada em mercado: frentes, passos, rotinasmarket entry: fronts, steps, routines
PlataformaPlatformo código, que não conhece clientethe code, which knows no client
Começar do que existir · o projeto nasce de uma proposta, pesquisa ou contratoStart from what exists · the project is born from a proposal, research or contract pdf.jsmammothJSZipSheetJSClaude
O problemaThe problem

Projeto de expansão nem sempre tem contrato. Tem proposta, pesquisa, planilha do cliente, ata. Montar o plano à mão a partir disso leva dias.Expansion projects don't always have a contract. They have a proposal, research, a client spreadsheet, meeting notes. Building the plan by hand from that takes days.

O que construíWhat I built

O navegador lê PDF, Word, PowerPoint e Excel e marca a origem de cada trecho. A IA monta cliente, objetivo, mercados, plano até o sim e depois do sim, perguntas e combinados. Cada item mostra de onde veio e em que estado está: proposto, aceito ou assinado. O contrato vira só mais uma fonte.The browser reads PDF, Word, PowerPoint and Excel and tags where each excerpt came from. AI assembles the client, objective, markets, the plan up to the yes and after it, questions and agreements. Each item shows where it came from and its status: proposed, accepted or signed. The contract becomes just one more source.

Marcas de origemSource tags

  • [p. 4]página do PDFPDF page
  • [slide 2]slide da apresentaçãopresentation slide
  • [aba Preços]aba da planilhaspreadsheet tab
Registrar em uma linha · uma frase vira tarefa, evento, decisão, risco ou perguntaLog it in one line · a sentence becomes a task, event, decision, risk or question Claude Haiku 4.5Claude Sonnet 5.5limite por projetoper-project cap
O problemaThe problem

Formulário de tarefa com 20 campos faz o time anotar no WhatsApp, e o plano fica velho.A 20-field task form makes the team take notes on WhatsApp, and the plan goes stale.

O que construíWhat I built

A tecla N abre uma linha em qualquer tela. A frase passa pelo modelo rápido 900 ms depois de você parar de digitar; texto colado passa pelo modelo padrão. A tarefa ficou com 4 campos à vista e o resto em "mais detalhes". O que a pessoa escreve vence a IA: código do passo e data digitados não mudam.The N key opens a line on any screen. The sentence goes to the fast model 900 ms after you stop typing; pasted text goes to the standard model. The task form now shows 4 fields, with the rest under "more details". What the person types beats the AI: a typed step code or date never changes.

O custo sob controleCost under control

Cada uso de IA é registrado no banco por projeto e por finalidade (início, tarefas, reuniões, preços), com limite próprio.Every AI use is logged in the database per project and per purpose (setup, tasks, meetings, prices), each with its own cap.

Modelo certo para cada usoThe right model for each use

  • rápidofastHaiku 4.5a linhathe line
  • padrãostandardSonnet 5.5colar, ler, resumirpaste, read, summarize
Rotinas da IA · seis rotinas que cobram, resumem e lapidam o planoAI routines · six routines that follow up, summarize and refine the plan Vercel CronSugere · Pede · FazSuggest · Ask · DoCaixa da IAAI Inbox
O problemaThe problem

Gestor de projeto passa a semana cobrando atraso e montando atualização para o cliente.Project managers spend the week chasing delays and putting together the client update.

O que construíWhat I built

Seis rotinas por projeto, cada uma com autonomia própria: Sugere, Pede ou Faz. Em dias úteis às 8h o servidor só junta os fatos e grava um cartão por frente na Caixa da IA. A IA entra quando alguém abre o cartão para revisar, e a decisão fica registrada com autor.Six routines per project, each with its own autonomy: Suggest, Ask or Do. On weekdays at 8 am the server only gathers the facts and writes one card per front to the AI Inbox. AI comes in when someone opens the card to review it, and the decision is recorded with its author.

Rotinas e quando rodamRoutines and when they run

  • AtrasoDelaysPede · dias úteisAsk · weekdays
  • Pedido paradoStalled requestSugere · 5 diasSuggest · 5 days
  • SemanaWeekly updateSugere · sexta 14hSuggest · Fri 2 pm
  • RelatórioReportSugere · 5 dias antesSuggest · 5 days before
  • Lapidar o planoRefine the planSugere · segundaSuggest · Monday
  • Pesquisa do paísCountry researchSugere · até o dia 3Suggest · by the 3rd
Acesso e dois fatores · quem vê o quê, decidido dentro do bancoAccess and two-factor · who sees what, decided inside the database Supabase AuthTOTPRLSconvite de uso únicosingle-use invite
O problemaThe problem

Plano de expansão tem preço de concorrente, transcrição de reunião e nota interna. O cliente pode ver parte disso, o time de um país não precisa ver o outro, e senha sozinha não basta.An expansion plan holds competitor prices, meeting transcripts and internal notes. The client may see part of it, one country team doesn't need to see another's, and a password alone isn't enough.

O que construíWhat I built

Pessoa, empresa, projeto e país, com papéis de dono a cliente. Convite por e-mail e WhatsApp com link de uso único, válido por 7 dias e guardado só como hash. O código do aplicativo autenticador () é exigido por empresa dentro das funções que decidem o acesso: sem o segundo fator, a consulta volta vazia. Ninguém zera o dois fatores do dono pela tela.Person, company, project and country, with roles from owner to client. Invitations by email and WhatsApp with a single-use link, valid for 7 days and stored only as a hash. The authenticator app code () is required per company inside the functions that decide access: without the second factor, the query comes back empty. Nobody can reset the owner's two-factor from the screen.

Ensaio em produção, usuário inventadoProduction dry run, made-up user

SituaçãoSituationDocs
Empresa não exige; pessoa sem aparelhoCompany doesn't require it; person has no device631
Com aparelho, entrou só com senhaHas a device, signed in with password only0
Com aparelho, entrou com o códigoHas a device, signed in with the code631
Empresa exige; pessoa sem aparelhoCompany requires it; person has no device0
Leitura rápida · a mesma regra, de 0,7 s para 2 msFast reads · the same rule, from 0.7 s to 2 ms Postgrespolítica de acessoaccess policy88 casos iguais88 identical cases
O problemaThe problem

Com os dois fatores, ler os 631 documentos do projeto passou a levar até 0,72 s. A política de acesso chamava funções para cada documento.With two-factor in place, reading the project's 631 documents took up to 0.72 s. The access policy called functions for every document.

O que fizWhat I did

Reescrevi a política para calcular as chaves de acesso uma vez por consulta e comparar por interseção. A leitura caiu para 1,6 a 2,1 ms, e um teste de 88 casos prova que cada perfil continua vendo exatamente os mesmos documentos.I rewrote the policy to compute the access keys once per query and compare by intersection. Reads dropped to 1.6 to 2.1 ms, and an 88-case test proves every profile still sees exactly the same documents.

Leitura de 631 documentos, mesma escalaReading 631 documents, same scale

AntesBeforeaté 720 msup to 720 ms
DepoisAfteraté 2,1 msup to 2.1 ms
Área do cliente · aprova em um clique e manda arquivo sem tocar no servidorClient area · approve in one click and send files without touching the server dois fatores obrigatóriotwo-factor requiredURL assinadasigned URLResend
O problemaThe problem

Aprovação de cliente se perde em e-mail, e o arquivo chega pelo WhatsApp de alguém.Client approvals get lost in email, and files arrive through someone's WhatsApp.

O que construíWhat I built

O cliente só entra com dois fatores e vê só o que foi liberado. Aprova, avisa que já mandou (até 5 arquivos e 20 MB, por link de envio de uso único), diz até quando manda ou pede uma conversa. Tudo vira cartão na Caixa do time. Tabela de preço, transcrição e nota interna nunca chegam ao papel cliente, por regra do banco.Clients can only sign in with two-factor and see only what was released to them. They approve, say they already sent it (up to 5 files and 20 MB, through a single-use upload link), say when they will send it or ask for a call. Everything becomes a card in the team's Inbox. Price tables, transcripts and internal notes never reach the client role, by database rule.

O que o cliente pode fazerWhat the client can do

  • AprovoI approveou prefiro conversaror I'd rather talk
  • Já mandeiAlready sentaté 5 arquivosup to 5 files
  • Mando atéI'll send bydata combinadaagreed date
  • Tenho uma dúvidaI have a questionsempre ligadoalways on
Reuniões e agenda · o Fireflies vira tarefa e a agenda acusa conflitoMeetings and calendar · Fireflies becomes tasks and the calendar flags conflicts Fireflies GraphQL.icsNager.Date
O que construíWhat I built

A reunião gravada no Fireflies vira resumo, decisões e tarefas sugeridas, já com o passo do plano. Nada entra sozinho, porque a conta tem outros assuntos: a triagem usa sinais do projeto. A agenda assina no Google por um link privado, em modo discreto, traz feriados de cada país e acusa conflito antes que ele aconteça.A meeting recorded in Fireflies becomes a summary, decisions and suggested tasks, already tied to a plan step. Nothing comes in on its own, because the account has other topics: triage uses project signals. The calendar subscribes in Google through a private link, in discreet mode, brings each country's holidays and flags conflicts before they happen.

Conflitos que a agenda acusaConflicts the calendar flags

  • Ausência × tarefaAbsence × taskda mesma pessoasame person
  • Prazo em feriadoDeadline on a holidayadiantar em 1 cliquemove up in 1 click
  • Viagem em feriadoTrip on a holidayno destinoat the destination
  • Duas viagensTwo tripsmesma pessoasame person
Inteligência de mercado · dado público de aduana vira mapa do mercadoMarket intelligence · public customs data becomes a market map 18 semanas18 weeksclassificadorclassifierpreço por kgprice per kg
O problemaThe problem

Entrar num país sem saber quem importa o quê, quanto e por qual preço é aposta.Entering a country without knowing who imports what, how much and at what price is a bet.

O que construíWhat I built

As bases semanais públicas de importação passam por um classificador de produto, com litro estimado pela embalagem e comparação de marcas por kg. A vista Números mostra o mercado do país por linha de produto, importador por importador, e alimenta a lista de prospectos.Weekly public import data runs through a product classifier, with liters estimated from the packaging and brands compared per kg. The Numbers view shows the country's market by product line, importer by importer, and feeds the prospect list.

Macros

A foto do prato vira calorias e macros, e o dia fecha no saldoA photo of the plate becomes calories and macros, and the day closes on the balance

Um app pessoal de nutrição que virou produto: instalável no celular, com contas, coach de IA e lembretes. Aberto a qualquer pessoa.A personal nutrition app that became a product: installable on the phone, with accounts, an AI coach and reminders. Open to anyone.

macros-snowy.vercel.app 16/09 a 25/09 de 2026Sep 16 to 25, 2026 Meu papel: tudo, de ponta a pontaMy role: everything, end to end
3,8 mil3.8k
linhas, JavaScript purolines, plain JavaScript
6
APIs na VercelAPIs on Vercel
38
versões publicadasreleased versions
10
dias, da v1.3 à v6.1days, from v1.3 to v6.1
13
versões em um só dia (17/09)versions in a single day (Sep 17)
1
modelo: Claude Opus 5, com visãomodel: Claude Opus 5, with vision

Da foto ao númeroFrom photo to number

a chave da IA nunca sai do servidorthe AI key never leaves the server
RegistroLogging
Foto, voz ou textoPhoto, voice or textHEIC vira JPEG de 1600 pxHEIC becomes a 1600 px JPEG
/api/estimarfunção na VercelVercel function
Claude Opus 5visão +vision +
ItensItemsporção e macros editáveiseditable portions and macros
Saldo do diaDaily balancelimite = gasto + saldolimit = burn + balance
1.760 de 2.150kcal no dia, exemplo: gasto de 2.650 com saldo de −5001,760 of 2,150kcal for the day, example: 2,650 burned with a −500 balance
Foto vira macros · resposta estruturada, sem adivinharPhoto to macros · structured output, no guessing Claude Opus 5visãovisionJSON Schemafallback no servidorserver-side fallback
O que construíWhat I built

Foto, voz ou texto. O aparelho recodifica a foto (o HEIC do iPhone vira JPEG de até 1600 px) e a função manda para o Claude Opus 5, que devolve itens, porções e macros num JSON definido por esquema, com pensamento adaptativo e modelo de reserva no servidor. Print do Apple Fitness ou do Garmin vira gasto do dia; sem kcal no print, a estimativa usa × peso × horas.Photo, voice or text. The phone re-encodes the photo (the iPhone's HEIC becomes a JPEG of up to 1600 px) and the function sends it to Claude Opus 5, which returns items, portions and macros as JSON defined by a schema, with adaptive thinking and a server-side fallback model. A screenshot from Apple Fitness or Garmin becomes the day's burn; with no kcal in the screenshot, the estimate uses × weight × hours.

Do artifact ao app · nasceu no Claude e virou app em um diaFrom artifact to app · born in Claude, became an app in one day PWAserverlessSupabase AuthRLS
O problemaThe problem

As primeiras versões rodavam como artifact do Claude, e o runtime não enviava imagem para a IA. Sem foto, não havia produto.The first versions ran as a Claude artifact, and the runtime didn't send images to the AI. Without photos, there was no product.

O que fizWhat I did

Troquei de plataforma: estática mais função serverless, com a chave só no servidor. No mesmo dia vieram contas com RLS, cota de IA por pessoa, push e onboarding: 13 versões em 17/09.I re-platformed: a static plus a serverless function, with the key only on the server. The same day brought accounts with RLS, a per-person AI quota, push and onboarding: 13 versions on Sep 17.

17/09, em ordemSep 17, in order

  • v2.0PWA e IA no servidorPWA and AI on the server
  • v2.4lembretes por pushpush reminders
  • v3.0contas, RLS e cota de IAaccounts, RLS, AI quota
  • v3.6onboarding em 3 passos3-step onboarding
Saldo, não meta fixa · a ciência no lugar da regra de trêsBalance, not a fixed target · science instead of a rule of thumb Hall et al., Lancet 2011simulação diáriadaily simulation
O que construíWhat I built

O limite do dia é o gasto mais o saldo que a pessoa escolheu. A projeção de peso simula dia a dia com 7.700 kcal por kg e a adaptação do metabolismo de cerca de 24 kcal por dia a cada kg perdido, então a curva achata como na vida real. Pausa de manutenção de 2 semanas a cada 10, e sequência que perdoa um dia por semana.The day's limit is the burn plus the balance the person chose. The weight projection simulates day by day with 7,700 kcal per kg and metabolic adaptation of about 24 kcal per day for each kg lost, so the curve flattens the way it does in real life. A 2-week maintenance break every 10 weeks, and a streak that forgives one day per week.

Constantes do modeloModel constants

  • 7.7007,700kcal por kg (Wishnofsky)kcal per kg (Wishnofsky)
  • ~24kcal por dia de adaptação por kg perdido (Hall, 2011)kcal per day of adaptation per kg lost (Hall, 2011)
  • 2 de 102 of 10semanas de manutençãoweeks of maintenance
Coach com ações · uma conversa que muda o planoCoach with actions · a conversation that changes the plan ferramentas com esquemaschema-based toolshistórico resumidosummarized history
O que construíWhat I built

O coach conversa com o histórico resumido no servidor e pode agir: mudar a meta, os alvos de macro, a divisão das refeições e os lembretes. Cada ação tem esquema, e a pessoa vê o que mudou.The coach talks over a server-side summary of the history and can act: change the goal, the macro targets, the meal split and the reminders. Each action has a schema, and the person sees what changed.

Infraestrutura enxuta · push, cota e atualização sem servidor próprioLean infrastructure · push, quota and updates with no server of my own pg_cronWeb Pushservice worker
O que construíWhat I built

Supabase com Auth e RLS por pessoa, cota diária de IA conferida no banco e pg_cron chamando a função de lembretes a cada 10 min, que manda push pelo padrão VAPID. O app grava no aparelho, sincroniza com a conta e se atualiza sozinho quando sai versão nova.Supabase with Auth and per-person RLS, a daily AI quota checked in the database, and pg_cron calling the reminders function every 10 minutes, which sends push via the VAPID standard. The app writes to the device, syncs with the account and updates itself when a new version ships.

Custo de servidor próprioCost of running my own server

  • zerozeroVercel, Supabase e Anthropic por usoVercel, Supabase and Anthropic, pay as you go

FerramentasTools

O papel de cada ferramentaThe role of each tool

Cada peça entrou pelo problema que resolve. Termos sublinhados explicam o significado ao passar o cursor ou tocar.Every piece came in for the problem it solves. Underlined terms show a short explanation on hover or tap.

IAAI
Agente de código que escreve, testa e abre PR sob minha direção, seguindo as regras escritas de cada projeto.Coding agent that writes, tests and opens PRs under my direction, following each project's written rules.
LFMLynxs, FORCE e MacrosLynxs, FORCE and Macros
Claude API
Opus 5 lê a foto do prato com resposta em esquema; no FORCE, Haiku 4.5 na linha e Sonnet 5.5 nas leituras, com limite por projeto.Opus 5 reads the plate photo with schema-based output; in FORCE, Haiku 4.5 on the line and Sonnet 5.5 for reading, with a per-project cap.
LFMFORCE e MacrosFORCE and Macros
Um modelo por tarefa: Qwen 3.5 Flash conversa, Whisper transcreve, Voxtral ouve. Chave de cada empresa cifrada no banco.One model per task: Qwen 3.5 Flash chats, Whisper transcribes, Voxtral listens. Each company's key is encrypted in the database.
LFMLynxs
Fireflies
API GraphQL: a reunião gravada vira resumo, decisões e tarefas já com o passo do plano.GraphQL API: a recorded meeting becomes a summary, decisions and tasks already tied to a plan step.
LFMFORCE
Dados e servidorData and server
Supabase Postgres eand
Quem vê o quê mora no banco: políticas por empresa, projeto, país e pessoa.Who sees what lives in the database: policies per company, project, country and person.
LFMLynxs, FORCE e MacrosLynxs, FORCE and Macros
Supabase Auth
Login, link de senha que não se gasta ao abrir e, no FORCE, código do autenticador exigido por empresa.Sign-in, a password link that isn't used up when opened and, in FORCE, an authenticator code required per company.
LFMLynxs, FORCE e MacrosLynxs, FORCE and Macros
47 funções em Deno: agentes, webhooks, transcrição, agenda e páginas públicas com token.47 functions in Deno: agents, webhooks, transcription, scheduling and token-protected public pages.
LFMLynxs
Vercel Functions
APIs em Node com a chave só no servidor; no FORCE, região São Paulo e cron dos lembretes em dias úteis.Node APIs with the key only on the server; in FORCE, the São Paulo region and the weekday reminders cron.
LFMFORCE e MacrosFORCE and Macros
, pg_net eand
O relógio dentro do banco: agentes do Lynxs a cada 1 e 5 min, push do Macros a cada 10 min.The clock inside the database: Lynxs agents every 1 and 5 minutes, Macros push every 10 minutes.
LFMLynxs e MacrosLynxs and Macros
Sinalização do vídeo da Bancada e documentos que se atualizam ao vivo no painel do FORCE.Signaling for the interview room video and documents that update live in the FORCE dashboard.
LFMLynxs e FORCELynxs and FORCE
Storage
Gravações e arquivos em bucket privado, com URL assinada de vida curta.Recordings and files in a private bucket, with short-lived signed URLs.
LFMLynxs e FORCELynxs and FORCE
Postgres em WebAssembly para provar as regras de acesso com as migrações reais, sem tocar a produção.Postgres in WebAssembly to prove the access rules with the real migrations, without touching production.
LFMFORCE
EntregaDelivery
GitHub
Branch por tarefa e PR revisado; no Lynxs, Actions roda lint, tipos, testes e build antes do merge.A branch per task and a reviewed PR; on Lynxs, Actions runs lint, types, tests and build before the merge.
LFMLynxs, FORCE e MacrosLynxs, FORCE and Macros
Vercel
Hospedagem, prévia por PR e publicação automática da branch principal.Hosting, a preview per PR and automatic deploys from the main branch.
LFMLynxs, FORCE e MacrosLynxs, FORCE and Macros
Vitest e Deno testVitest and Deno test
1.027 testes no Lynxs, rodando em todo PR.1,027 tests on Lynxs, running on every PR.
LFMLynxs
ComunicaçãoCommunication
Cloudflare
Credencial de 3 h por sala: o vídeo atravessa firewall de empresa.A 3-hour credential per room: video gets through corporate firewalls.
LFMLynxs
Vídeo direto entre entrevistador e candidato, sem instalar nada.Direct video between interviewer and candidate, with nothing to install.
LFMLynxs
Z-API (WhatsApp)
O agente conversa pelo WhatsApp da agência; cada mensagem que chega acorda o executor.The agent talks through the agency's WhatsApp; each incoming message wakes the executor.
LFMLynxs
Resend
E-mail transacional com remetente do domínio, convites de agenda e lembretes do dia.Transactional email from the company's own domain, calendar invites and daily reminders.
LFMLynxs e FORCELynxs and FORCE
iCalendar ()
Convite que entra na agenda com Sim e Não no Lynxs; feed privado para o Google Agenda no FORCE.Invites that land in the calendar with Yes and No on Lynxs; a private feed for Google Calendar on FORCE.
LFMLynxs e FORCELynxs and FORCE
Web Push eand
App instalável, com lembrete no celular e atualização sozinha.An installable app, with phone reminders and automatic updates.
LFMMacros
No navegadorIn the browser
pdf.js, mammoth, JSZip, SheetJS
Lê PDF, Word, PowerPoint e Excel no próprio navegador e marca a página de origem.Reads PDF, Word, PowerPoint and Excel right in the browser and tags the source page.
LFMFORCE
Nager.Date, ViaCEP, OpenStreetMap
Feriados por país; CEP do candidato vira distância até a vaga.Holidays by country; the candidate's postal code becomes the distance to the job.
LFMLynxs e FORCELynxs and FORCE
React 19 e TypeScriptReact 19 and TypeScript
Front do Lynxs com tipos de ponta a ponta, Tailwind e Radix.The Lynxs front end, typed end to end, with Tailwind and Radix.
LFMLynxs
HTML e JavaScript purosPlain HTML and JavaScript
FORCE e Macros sem framework: uma página, carregamento imediato.FORCE and Macros without a framework: one page, instant load.
LFMFORCE e MacrosFORCE and Macros

Gaps que fecheiGaps I closed

Achar a causa raiz vale mais que o remendoFinding the root cause beats the patch

Seis problemas reais de produção, com o antes, o depois e a causa.Six real production problems, with the before, the after and the cause.

Leitura do painelDashboard reads

FORCE
AntesBefore
até 720 ms para ler 631 documentosup to 720 ms to read 631 documents
DepoisAfter
até 2,1 ms, mesma regraup to 2.1 ms, same rule

Causa: a política de acesso chamava funções a cada documento.Cause: the access policy called functions for every document.

Agente de WhatsAppWhatsApp agent

Lynxs
AntesBefore
nunca enviava; a Central dizia "falha" sem motivonever sent; the Agent Hub said "failed" with no reason
DepoisAfter
envia, explica a falha e escala na terceirasends, explains failures and escalates on the third

Causa: uma função chamava outra com a chave de serviço, que não é usuário, e voltava 401.Cause: one function called another with the service key, which isn't a user, and got a 401.

Link de senhaPassword link

FORCE
AntesBefore
gasto pela prévia do WhatsApp antes da pessoa abrirused up by the WhatsApp preview before the person opened it
DepoisAfter
abrir não gasta; só salvar a senha consomeopening doesn't use it up; only saving the password does

Causa: link de uso único consumido por uma simples visita.Cause: a single-use link consumed by a simple visit.

Convite de agendaCalendar invite

Lynxs
AntesBefore
o Gmail mostrava como anexo para baixarGmail showed it as an attachment to download
DepoisAfter
entra na agenda com Sim e Nãolands in the calendar with Yes and No

Causa: nome do organizador sem aspas no arquivo .ics.Cause: the organizer's name without quotes in the .ics file.

Análise da entrevistaInterview analysis

Lynxs
AntesBefore
erro genérico depois de 25 a 30 sa generic error after 25 to 30 s
DepoisAfter
90 s de espera e o erro real na tela90 s of waiting and the real error on screen

Causa: o modelo pensa antes de escrever, e o prazo era curto.Cause: the model thinks before it writes, and the timeout was short.

Foto na IAPhoto to AI

Macros
AntesBefore
o artifact não enviava imagem ao modelothe artifact didn't send images to the model
DepoisAfter
app próprio com função no servidor, no dia seguinteits own app with a server function, the next day

Causa: limite do ambiente de artifacts, não do produto.Cause: a limit of the artifact environment, not of the product.

Linha do tempoTimeline

Oito semanas, três produtosEight weeks, three products

  1. 10/08Aug 10Lynxs. Primeira entrega, com as regras do projeto escritas para pessoas e agentes.First delivery, with the project rules written for people and agents.
  2. 18/08Aug 18Lynxs. Perguntas por tema com três fontes e consentimento por link público.Questions by theme from three sources, and consent through a public link.
  3. 03/09Sep 3Lynxs. Revisão de segurança: acesso anônimo revogado, liberação só por coluna.Security review: anonymous access revoked, column-level grants only.
  4. 08/09Sep 8Lynxs. Trilhas 2.0: relógio no banco, e-mail, autonomia, falta e resumo diário.Tracks 2.0: database clock, email, autonomy, no-shows and a daily digest.
  5. 10/09Sep 10Lynxs. 19 PRs no dia: página pública da vaga, memória do candidato, Central agrupável.19 PRs in one day: public job page, candidate memory, groupable Agent Hub.
  6. 11/09Sep 11Lynxs. Vídeo da Bancada pela Cloudflare em produção.Interview room video through Cloudflare in production.
  7. 14/09Sep 14Lynxs. Gravação protegida: a queda da sala não perde a entrevista.Protected recording: a dropped room no longer loses the interview.
  1. 16/09Sep 16Macros. Nasce como artifact no Claude.Born as an artifact in Claude.
  2. 17/09Sep 17Macros. Vira app: IA no servidor, contas com RLS e push. 13 versões no dia.Becomes an app: AI on the server, accounts with RLS and push. 13 versions that day.
  3. 21/09Sep 21Lynxs. O agente responde numa chamada só, e horário só pelo link.The agent replies in a single call, and times only go through the link.
  4. 25/09Sep 25Macros. v6.1: design de vidro e registro sem confirmar.v6.1: glass design and logging without confirmation.
  5. 29/09Sep 29FORCE. O painel do Claude vira plataforma: 626 registros migrados e conferidos um a um, login, empresas, países e papéis.The Claude dashboard becomes a platform: 626 records migrated and checked one by one, sign-in, companies, countries and roles.
  6. 02/10Oct 2FORCE. 10 entregas no dia: dois fatores, leitura de 2 ms, projeto canônico, IA que registra e rotinas.10 deliveries in one day: two-factor, 2 ms reads, canonical project, AI logging and routines.
  7. 06/10Oct 6FORCE. Inteligência de mercado com dado público de aduana.Market intelligence from public customs data.

Transformação com IAAI transformation

O que eu levo para uma empresaWhat I bring to a company

Lidero transformação com IA do jeito que construí estes três produtos: problema de negócio, regra escrita e prova em produção.I lead AI transformation the way I built these three products: a business problem, written rules and proof in production.

Negócio primeiroBusiness first

Começo pelo P&L e pela operação. A IA entra onde muda margem, prazo ou risco, e cada entrega tem um número para medir.I start from the P&L and the operation. AI goes where it changes margin, time or risk, and every delivery has a number to measure.

Governança desde o dia 1Governance from day 1

A IA compõe e classifica; decisão e dado sensível ficam com pessoas e com o banco. Regra escrita, testada e auditável.AI drafts and classifies; decisions and sensitive data stay with people and the database. Written, tested and auditable rules.

Velocidade com provaSpeed with proof

Protótipo em dias, com teste, segurança e medida no mesmo pacote. Oito semanas, três produtos no ar.Prototypes in days, with tests, security and measurement in the same package. Eight weeks, three products live.

Time aumentadoAugmented team

Agentes de código e de operação trabalhando com regras escritas, como membros do time. Sei dirigir esse time porque dirigi.Coding and operations agents working under written rules, as members of the team. I know how to lead that team because I have.

Números conferidos em 07/10/2026 direto nos repositórios: linhas de código, testes executados (Vitest e PGlite nesta data; Deno no último CI do Lynxs) e PRs mergeados. Os exemplos das ilustrações usam dados inventados; nomes e dados de clientes ficam fora desta página. © 2026 Xpannd Partners.Numbers checked on Oct 7, 2026 directly in the repositories: lines of code, tests run (Vitest and PGlite on that date; Deno in the latest Lynxs CI) and merged PRs. The illustrations use made-up data; client names and data stay off this page. © 2026 Xpannd Partners.