Estudo de caso · Stack

Como a Vercel constrói a Vercel com as próprias ferramentas

A Vercel é uma plataforma de nuvem para publicar apps web e a empresa por trás do Next.js. O site e o painel rodam em Next.js e Turborepo, e a plataforma por baixo junta AWS Lambda, um núcleo em Rust, Go na borda e um fluxo de dados com Kafka e ClickHouse.
Copiar stackvercel.com Plataforma de nuvem para apps web · Estados Unidos · fundada em 2015

A stack da Vercel

Abrir no montador

Linguagem

Biblioteca de interface

Framework full-stack

  • Next.jsvercel.com

    Framework do vercel.com e do painel, dividido em Multi-Zones.

    Por quê: Dividiram em zonas para encurtar os builds e simplificar as dependências conforme o app cresceu.

Hospedagem

  • AWSvercel.com

    Nuvem onde as Vercel Functions rodam, no AWS Lambda.

Banco de dados

Pagamentos

  • Stripevercel.com

    Pagamentos no painel, com o script carregado só quando precisa.

Estilo e kit de interface

  • Geistvercel.com

    Design system próprio com cores, tipografia, componentes React e as fontes Geist Sans e Mono.

Build e runtime

  • Turborepovercel.com

    Roda o monorepo do vercel.com, com cache remoto e tarefas só no que mudou.

  • Turbopackvercel.com

    Bundler usado no desenvolvimento local do vercel.com.

Busca de dados

Framework de servidor

  • Rustvercel.com

    Move o núcleo do Fluid compute e o Turborepo.

    Por quê: O Turborepo foi para Rust quando o Go deixou de atender, depois da junção com o Turbopack.

  • Gojob-boards.greenhouse.io

    Linguagem dos serviços da CDN, junto com Lua.

  • Node.jsjob-boards.greenhouse.io

    Runtime dos serviços de back-end e uma das linguagens que o Fluid compute roda para clientes.

Erros

  • Sentryvercel.com

    Rastreia erros no painel via @sentry/nextjs.

Como montaram

Usando o próprio Next.js no vercel.com

O vercel.com começou como um único app Next.js grande, servindo tanto as páginas de marketing quanto o painel logado. Com o crescimento, os builds ficaram lentos e qualquer mudança pequena disparava um build completo.

O time dividiu o site em microfrontends verticais com o Multi-Zones do Next.js, dentro de um monorepo Turborepo, e usou feature flags para migrar o tráfego aos poucos. Os builds de preview e a compilação local ficaram mais de 40% mais rápidos.

Fontes:vercel.com

Deixando o painel duas vezes mais rápido

Em 2022 o time levou a nota do painel no Lighthouse de 51 para 94. Quase tudo veio de mandar menos JavaScript: importar só o necessário do Sentry, carregar os scripts do Stripe e do Google Tag Manager só quando precisa e guardar em cache funções chamadas centenas de vezes por render.

Também usaram recursos do próprio Next.js, como o next/image e o CSS das fontes embutido no build.

Fontes:vercel.com

O Turborepo trocou Go por Rust

O Turborepo nasceu em Go, que atendia bem no começo. Quando o código cresceu e se juntou ao Turbopack, escrito em Rust, o Go deixou de dar conta.

O time portou aos poucos, com Rust e Go rodando lado a lado por um tempo, e terminou a migração no Turborepo 1.11.

Fontes:vercel.com vercel.com

Fluid compute em cima do AWS Lambda

As Vercel Functions rodam no AWS Lambda, que no início não conseguia mandar respostas em streaming. Para resolver, a Vercel criou um protocolo próprio sobre TCP entre o Lambda e a sua infraestrutura, com um núcleo em Rust fazendo a ponte.

Esse trabalho virou o Fluid compute, que reaproveita instâncias já ligadas entre pedidos e reduz partidas a frio e custo em cargas que esperam muito por rede, como apps de IA.

Fontes:vercel.com

Também detectado no site

Achado na página inicial com as regras abertas do Wappalyzer (HTML, scripts e cabeçalhos). Mostra o que roda no navegador, não o backend inteiro.

  • Amazon S3
  • Amazon Web Services
  • HSTS
  • Linkedin Insight Tag
  • Vercel
  • Webpack