Pular para o conteúdo
Todos os projetos

Landing pages · Campanha

Kérastase Paris

Landing pages de lançamento da Kérastase Paris, com destaque para a Curl Manifesto, linha de tratamento profissional para cabelos cacheados e crespos. Em todas, o cadastro de profissionais é integrado ao CRM da marca.

Parceria
The Alfred (Série //A Digital)
Período
2022 – 2023
Meu papel
Desenvolvimento front-end
Stack
Pug, Sass, JavaScript ES6, Gulp
Landing page Curl Manifesto da Kérastase no desktop
Landing page Curl Manifesto da Kérastase no celular
Telas do projeto no desktop e no celular

Contexto

As campanhas falam direto com profissionais de salão. A página precisa ser fiel à identidade da marca e converter: na Curl Manifesto, o profissional se cadastra e recebe R$ 100 de cashback em compras no site da Kérastase.

Objetivos

  • Fidelidade total à identidade visual da campanha
  • Formulário claro, com consentimento explícito
  • Funcionamento consistente no celular

O que eu fiz

  1. Construí o layout responsivo com as imagens da campanha adaptadas para desktop e mobile.
  2. Na Curl Manifesto, desenvolvi o formulário com dados do profissional e do salão (CPF, CNPJ, cidade e estado), upload da nota fiscal e os aceites de comunicação e do regulamento.
  3. Na Blond Action, implementei o envio assíncrono via fetch para a plataforma de CRM, com feedback no botão (“Enviando…” e “Enviado”).
  4. Montei o build com Gulp: Pug para HTML, SCSS com Autoprefixer e JavaScript ES6 com Babel e ESLint.

Resultados

  • 87 Desempenho
  • 96 Boas práticas
  • 90 SEO

Medição do site em produção · Lighthouse mobile · out/2026. O site segue em produção sob gestão do cliente, então os números refletem o estado atual dele.

Aprendizados

Revendo o código da Blond Action hoje, eu montaria os parâmetros com URLSearchParams, que já codifica os valores, e trataria falhas de rede para o usuário nunca ficar preso em “Enviando…”.

const params = new URLSearchParams({
  'fields[Email]': form.email.value,
  'fields[NomeCompleto]': form.name.value,
  'fields[Salao]': form.salon.value,
  unique: 'Email',
});

try {
  const res = await fetch(`${API_URL}?${params}`);
  if (!res.ok) throw new Error(res.status);
  button.value = 'Enviado';
  form.reset();
} catch {
  button.value = 'Tentar novamente';
}