Ir para o conteúdo
cutty.dev
All posts

Auto-prefix de URL: um detalhe que economiza minutos

O cutty.dev detecta quando você cola um endereço sem https:// e o adiciona automaticamente. Parece insignificante. Na prática, é a diferença entre dois segundos e clicar em "tente novamente".

No formulário de encurtamento de link, você inserirá allegro.pl. A maioria dos encurtadores dirá que não é um URL válido e pedirá para inserir novamente com https:// no início. O cutty.dev simplesmente adiciona https:// automaticamente e continua.

Isso soa como um recurso que mal merece ser mencionado. Na prática, é a diferença entre:

  • "colei, tenho um link curto, fecho a janela" (2 segundos)
  • "colei, erro, leio a mensagem, adiciono https, de novo, tenho o link" (15-20 segundos)

Multiplique pela quantidade de vezes por mês em que você cola a URL, mais a frustração de ler o erro, mais o momento “ah, é claro, o protocolo”. Um detalhe que se mede em minutos por mês por pessoa.

O que exatamente o cutty.dev faz

Você colou o texto no formulário. Antes de enviar para o servidor, o JavaScript verifica se começa com algum protocolo (http://, https://, ftp://, mailto: etc). Se não começar — o sistema assume que é apenas um domínio sem protocolo e adiciona https:// na frente.

Ou seja:

  • allegro.plhttps://allegro.pl
  • github.com/twoj-profil/projekthttps://github.com/twoj-profil/projekt
  • www.gazeta.plhttps://www.gazeta.pl

E se algo tiver um protocolo (mesmo que incorreto), o sistema deixa como está e verifica adiante:

  • http://example.com → permanece http://example.com (permitido)
  • ftp://example.com → rejeitado (apenas http/https)
  • javascript:alert(1) → rejeitado (proteção contra XSS)

Por que eu tenho isso e os outros não?

A maioria dos encurtadores de URL realiza uma validação padrão de URL por meio de new URL(string). O construtor URL no navegador/JavaScript é strict — se não houver protocolo, ele lança um erro. A saída padrão para new URL("allegro.pl") é TypeError.

Este é o comportamento correto para a maioria dos aplicativos. Mas para um formulário de encurtamento de links, onde o usuário cola uma URL copiada da barra de endereços ou de outro aplicativo, essa rigidez é um obstáculo em vez de uma ajuda.

A solução ocupa cinco linhas de JavaScript:

function sanitizeUrl(input) {
  const trimmed = input.trim();
  const hasProtocol = /^[a-z][a-z0-9+.-]*:/i.test(trimmed);
  const normalized = hasProtocol ? trimmed : "https://" + trimmed;
  // dalsza walidacja przez new URL(normalized)
}

Cinco linhas de código, uma dezena de segundos a menos de frustração por usuário por dia. Não sei por que a maioria do mercado não faz isso. Talvez porque “padrão” signifique “o construtor de URLs funciona assim”.

Os detalhes em UX são desproporcionalmente importantes

O cutty.dev tem várias dessas coisas que não estão em nenhuma lista de recursos, pois cada uma delas isoladamente soa insignificante:

  • Remover espaços em branco antes da validação — a URL colada com um espaço no final não causa erro
  • Hash preservadohttps://example.com/page#section mantém #section após o encurtamento
  • Strings de consulta preservadas?utm_source=test passa sem ser cortada
  • Atualização automática do protocolohttp:// para https:// quando a URL de origem suporta TLS (planejado, ainda não em produção)
  • Domínios IDNźdźbło.pl é convertido automaticamente para punycode
  • Caracteres poloneses no slug — automaticamente substituídos por ASCII ao criar um final personalizado (różowy-linkrozowy-link)
  • Detectar protocolos perigososjavascript:, data:, file:, mailto: rejeitados com mensagem específica

Cada um desses detalhes poupa de 5 a 30 segundos e um momento de irritação para alguém. Juntos, isso faz a diferença entre "gosto deste aplicativo" e "funciona bem".

O que vem a seguir para os detalhes de UX

Lista de coisas que quero fazer no futuro:

  • Smart paste — detecte quando o usuário cola texto contendo um URL entre outras palavras, extraia apenas o URL
  • Bulk paste — uma lista de URLs colada (uma por linha) cria vários links curtos simultaneamente
  • Suggested slugs — com base no título da página de destino, sugira 3 extensões de marca para escolher
  • Auto-OG preview — mostre a prévia dos cartões Open Graph imediatamente após colar o URL, antes de encurtar

Cada uma dessas é também uma "função de cinco linhas que não parece nada". No conjunto, a diferença está entre uma ferramenta que é OK e uma que você quer usar no dia a dia.

Tente você mesmo

Cole algoallegro.pl ou github.com ou news.ycombinator.com. O sistema adicionará o protocolo automaticamente e prosseguirá. Sem espera, sem erro, sem "tente novamente".

Se esse tipo de detalhe de UX te interessa, avise por qual direção seguir. hello@cutty.dev.