Contacto
Gabs

Caso de estudo de Gabriel Espinheira, engenheiro full-stack sénior

SnapForge, imagens de lançamento sem upload

Uma app web gratuita que coloca uma captura ou uma gravação de ecrã numa moldura de dispositivo ou de browser e exporta uma imagem 4K ou um vídeo curto, tudo dentro do separador do browser. Construí-a a dirigir agentes de programação: primeiro commit a 09/10/2026, versão 0.2.0 a 11/10/2026.

Ainda no início: versão 0.2.0, com código privado.

Três dias, em números

7

molduras de dispositivos e janelas

12

modelos que montam uma cena inteira

4.096

píxeis no lado mais comprido de um PNG

0

ficheiros enviados para um servidor

142

testes em 29 ficheiros

24

commits de 09/10 a 11/10/2026

Contado a partir do repositório a 12/10/2026, na versão 0.2.0.

Uma imagem de produto, sem o upload

Um lançamento precisa de mostrar bem os seus ecrãs: num telemóvel ou num portátil, sobre um fundo, às vezes em movimento. O Shots faz mockups no browser, e o Screen Studio dá acabamento a gravações de ecrã no Mac. Os dois são bons, e os dois definiram a fasquia que procurei.

O SnapForge junta os dois trabalhos numa app web gratuita e mantém cada ficheiro no computador de onde veio, porque uma captura de lançamento costuma mostrar trabalho que ninguém viu ainda. Os mockups vêm primeiro e já funcionam; a edição de gravações no browser e um gravador para macOS estão planeados. Três promessas moldam cada funcionalidade:

Gratuito
sem conta, sem nada para instalar, todas as funcionalidades no browser
Privado
sem servidor de renderização: os ficheiros são descodificados, renderizados e exportados dentro do separador, e os rascunhos ficam no armazenamento do próprio browser
Exato
uma imagem sai no tamanho que definir, até 4096 píxeis de lado, com fundo transparente quando o quiser

Tudo o que uma imagem de produto precisa

Molduras, modelos, fundos, movimento e exportação, num só editor. Cada imagem abaixo é um painel do editor ao vivo ao lado de uma exportação que ele fez.

Duas exportações do SnapForge: um dashboard de exemplo num MacBook com uma app de telemóvel num iPhone à frente, e o mesmo dashboard num iMac azul.
01

Dispositivos renderizados em 3D

O iPhone, o iPad, o MacBook e o iMac renderizam a partir de modelos 3D através do Three.js, iluminados por um estúdio de produto suave construído em código, e o Pixel é um modelo original. As imagens e os vídeos correm no próprio ecrã. O ecrã guarda até ao dobro do detalhe da exportação, com filtragem anisotrópica, para que o texto num telemóvel inclinado fique nítido.

A galeria de modelos no editor SnapForge, ao lado da exportação Trio: três iPhones em leque sobre um fundo azul.
02

Doze modelos, um só desfazer

Um modelo define os dispositivos, os acabamentos, o layout e o fundo num só passo, e um só desfazer anula tudo. A partir daí, cada parte pode mudar: até três imagens ou vídeos numa cena, cada um na sua moldura, posicionados ao arrastar ou por um layout.

O painel Background com a sua grelha de wallpapers, ao lado da exportação Neon: um iPhone em vista isométrica sobre um fundo cósmico roxo.
03

Fundos para todos os ambientes

Gradientes, cores sólidas, um desfoque dos seus próprios media, wallpapers, uma imagem sua ou uma fotografia do Unsplash. A pesquisa no Unsplash passa por um pequeno adaptador no servidor que mantém a chave de acesso fora da página; todos os outros fundos funcionam sem ele.

O painel Animate your mockup com os presets None, Zoom, Orbit, Float e Parallax, ao lado da exportação Orbit: um iPhone inclinado entre uma esfera e um anel.
04

Movimento, codificado no separador

Zoom, órbita, flutuação e parallax correm num só relógio que conduz a pré-visualização e a exportação. O Mediabunny codifica as frames em MP4 ou WebM através do WebCodecs do próprio browser, até 1080p a 30 frames por segundo e doze segundos de duração.

O painel Export settings definido para 1600 por 1200 com PNG transparente, ao lado da exportação Pixel duo: dois telemóveis Pixel sobre um gradiente verde-azulado.
05

Exportações no tamanho exato

Um PNG sai exatamente no tamanho que definir, até 4096 píxeis de lado, na horizontal ou na vertical, transparente se quiser. Os tamanhos guardam-se como perfis de exportação, um visual guarda-se como um preset de estilo que pode partilhar como ficheiro, e um PNG pode ir diretamente para a área de transferência.

Todas estas imagens saíram do SnapForge

Duas capturas de exemplo, um dashboard e uma app de telemóvel, em cada um dos doze modelos. Cada imagem é uma exportação direta a 1600 × 1200.

Um dashboard de estatísticas de exemplo num MacBook, com uma app de telemóvel de exemplo num iPhone à frente, sobre um wallpaper abstrato claro.
Hero pairMacBook e iPhone, wallpaper abstrato
Uma app de telemóvel de exemplo num iPhone prateado, ao centro, sobre um wallpaper abstrato pêssego e azul.
PasteliPhone, wallpaper abstrato
Uma app de telemóvel de exemplo num iPhone preto em vista isométrica, sobre um wallpaper cósmico roxo e magenta.
NeoniPhone, isométrico, wallpaper cósmico
Um dashboard de estatísticas de exemplo numa janela de browser clara, sobre um gradiente violeta.
BrowserJanela de browser, gradiente
Três iPhones em leque, cada um a mostrar a mesma app de telemóvel de exemplo, sobre um wallpaper azul.
TrioTrês iPhones em leque, wallpaper
Um dashboard de estatísticas de exemplo num MacBook escuro, sobre um wallpaper de secretária azul.
WorkspaceMacBook, wallpaper de secretária
Um dashboard de estatísticas de exemplo numa moldura de captura simples com uma sombra suave, sobre um fundo branco-sujo.
PaperMoldura de captura, cor de papel sólida
Um dashboard de estatísticas de exemplo num iMac azul, sobre um wallpaper de secretária azul-claro.
StudioiMac, wallpaper de secretária
Um dashboard de estatísticas de exemplo num iPad na horizontal inclinado para a direita, sobre um wallpaper de secretária laranja.
TabletiPad na horizontal, inclinado para a direita
A mesma app de telemóvel de exemplo em dois telemóveis Pixel lado a lado, um branco e um rosa, sobre um gradiente verde-azulado.
Pixel duoDois telemóveis Pixel, gradiente
Uma app de telemóvel de exemplo num iPhone inclinado entre uma esfera brilhante e um anel, sobre um gradiente violeta.
OrbitiPhone, formas de esfera e anel
Uma app de telemóvel de exemplo num iPhone preto, inclinado para a esquerda, com a sombra de uma janela a cair sobre um fundo cinzento-pedra.
NoiriPhone, sombra de janela por cima

Uma cena, um renderizador

Um projeto são duas coisas guardadas à parte: os ficheiros originais, guardados tal como foram importados no IndexedDB do browser, e uma pequena cena que só se refere a eles por id. A cena guarda o fundo, até três media enquadrados, os seus estilos e movimento, e o tamanho de saída, e é tudo o que um rascunho precisa para voltar depois de recarregar.

Um só renderizador Canvas 2D desenha a pré-visualização, as miniaturas dos modelos, o PNG e cada frame de vídeo a partir da mesma cena no mesmo instante, para que uma exportação não se afaste do que estava no ecrã. A inclinação passa por um só quad WebGL com coordenadas de textura corrigidas em perspetiva, e os dispositivos renderizam através do Three.js na mesma frame.

A pré-visualização e a exportação são o mesmo código.
  1. 01ImportarLargar, colar ou procurar: PNG, JPEG e WebP, MP4 e MOV.
  2. 02Bytes originaisGuardados tal como importados no IndexedDB, à parte do projeto.
  3. 03CenaUm pequeno documento versionado que se refere aos media por id.
  4. 04Um renderizadorCanvas 2D, com WebGL para a inclinação e Three.js para os dispositivos.
  5. 05Pré-visualizar e exportarA mesma cena e o mesmo instante: pré-visualização, PNG, MP4 e WebM.

Seis decisões, com as suas razões

A maioria protege uma coisa: os ficheiros que traz. As outras mantêm uma edição reversível e uma exportação honesta.

Os originais ficam intactos

Os ficheiros importados são guardados byte a byte e nunca reescritos. A cena só aponta para eles, por isso um corte ou uma mudança de moldura pode sempre ser desfeita, e os media que nenhum projeto usa são apagados em vez de encherem o armazenamento do browser.

Um gesto, um desfazer

O histórico guarda instantâneos inteiros da cena com ids dos ficheiros, nunca os media. Um arrastar é um passo, por muitas frames que dure, e um modelo que muda dispositivos, layout e fundo também é um passo.

Cada carregamento é validado

O esquema da cena limita cada número, cor e id, e um rascunho é verificado contra ele sempre que abre. Os projetos guardados por versões antigas são migrados em memória, com os media deixados como estavam.

O vídeo é verificado antes de descarregar

Um codificador tem quinze segundos antes de a exportação parar com um erro claro, e as marcas de tempo das frames são verificadas depois da codificação. Um browser que perde frames recebe uma mensagem, nunca um ficheiro estragado.

Ficheiros de estilo sem os seus ecrãs

Um preset de estilo é um pequeno ficheiro que qualquer pessoa pode importar noutro projeto. Leva o visual, e os media só quando o escolhe: uma versão inicial deixava fugir para o ficheiro a captura por trás de um fundo desfocado, e a correção está coberta por um teste.

Estatísticas só depois do sim

O PostHog carrega depois de aceitar e só regista visualizações de páginas. A pesquisa no Unsplash envia as palavras que escreve e nunca os seus ficheiros, dez pedidos por hora por visitante, através de servidores fixos, sem redirecionamentos e com um limite de oito segundos.

Verificado em dois motores de browser

Cada funcionalidade correu em Chromium e WebKit reais, não só em testes unitários: três importações, um recarregamento que recupera o rascunho e PNGs exatos de 3840 × 2160 e 2160 × 3840 nos dois motores. Os ficheiros MP4 e WebM exportados foram descodificados de volta em trinta frames durante um segundo a 1920 × 1080. Onde o WebKit falhou, o repositório di-lo e o editor recusa a exportação.

Uma decisão difícil: primeiro o browser, o gravador depois

Problema

O acabamento que as pessoas conhecem do Screen Studio, zooms que seguem os cliques e um cursor que desliza, precisa de um gravador que registe cada clique e posição do cursor durante a gravação. Isso significa uma app nativa para macOS com permissões de Acessibilidade e de Monitorização de Entrada, e os primeiros planos punham essa app de desktop à frente do editor.

Opções

Construir primeiro o gravador em Electron, e nada é utilizável até a captura, as permissões e o editor funcionarem. Ou começar no browser, que já consegue descodificar, renderizar e codificar vídeo, e acrescentar o gravador quando o editor valer a pena.

Escolha

O site é o produto, e nada do que faz precisa de Electron. A cena e o renderizador são código partilhado que uma app de desktop pode reutilizar mais tarde, com as suas gravações e dados de cliques a chegar através do mesmo armazenamento local.

Custo

Uma gravação importada não traz dados de cliques nem do cursor, por isso os zooms automáticos ainda não podem existir. A exportação de vídeo fica pelos 1080p, 30 frames por segundo e doze segundos, e depende dos codificadores de cada browser: o Chromium passa MP4 e WebM, e o WebKit só passa cenas WebM simples, por isso o SnapForge rejeita o resto com um erro.

Uma decisão mais pequena: o Pixel, por medição

A Google não publica um modelo 3D do Pixel 11, por isso a sua geometria é construída em código a partir das especificações publicadas, 152,8 × 72 × 8,6 mm com um ecrã de 6,3 polegadas a 1080 × 2424, e as margens, a barra das câmaras, o furo da câmara frontal e os botões são medidos a partir de renders do produto. É uma aproximação, e o repositório di-lo.

Três dias, um plano por funcionalidade

O primeiro commit foi a 09/10/2026 e a versão 0.2.0 saiu a 11/10/2026: 24 commits, todos meus, e o trabalho aconteceu em sessões de agentes. Os meus registos locais têm 8 sessões do Claude Code e 4 do Codex no repositório.

Cada funcionalidade começou como um plano no repositório, catorze ao todo, com as verificações que definem o que está feito. O registo de verificação lista o que foi provado num browser real e o que não foi, como a pesquisa ao vivo no Unsplash, que espera por uma chave de acesso minha.

Ainda é cedo. A gravação e a edição de vídeo estão planeadas, não construídas, e o código é privado. O site de marketing, as páginas legais e as barreiras de qualidade vieram do Fabricator, a fábrica com que o meu estúdio monta os seus sites.