É um interruptor por ambiente, então dá para ensaiar o lançamento em teste
enquanto produção continua segurando a fila. Só existe em modo hosted: no
federado quem decide quem existe é o seu backend, e uma trava nossa lá seria uma
trava numa porta que não é nossa.
Ligando
No painel, em API keys → Identidade dos contatos, ou pela API:GET /v1/config/{publishable_key} passa a responder "waitlist": true, que é
o que permite uma tela de cadastro mudar de forma sem deploy.
Coletando
202, sempre — a mesma postura do resto da superfície hosted: este endpoint
nunca vira o lugar onde alguém descobre quais endereços estão na lista. Uma
confirmação vai para a caixa de entrada, sem link e sem credencial, porque ainda
não há nada para clicar.
Cadastrar duas vezes mantém o primeiro lugar na fila e as primeiras respostas.
As pessoas esquecem que já se cadastraram, e isso não pode custar a posição
delas.
Mande o
anonymous_id que a sua página já tem (o @userkit/js faz isso
sozinho) e a entrada herda a visita: os UTMs e o referrer que trouxeram essa
pessoa até a landing page ficam no contato, e continuam lá no dia em que ela
virar cliente pagante.Com o SDK
O<SignUp /> renderiza o formulário de lista sozinho enquanto o modo está
ligado — endereço, sem senha, sem botões sociais — porque ele lê a configuração
em vez de receber isso como prop. Um formulário de cadastro publicado meses
antes do lançamento continua funcionando no dia do lançamento.
Ou pelo cadastro normal
OPOST /v1/contact-auth/signup também entra na fila enquanto o modo está
ligado, e responde { "waitlist": true } para um formulário próprio poder
dizer isso. A senha que a pessoa escolheu fica guardada na entrada e só é
anexada quando ela é liberada e o endereço é comprovado — nunca antes. Uma senha
num endereço que ninguém confirmou não comprova nada, que é o mesmo raciocínio
que fecha o roubo de conta pré-criada.
A fila segura de verdade
Enquanto alguém está esperando, nenhuma rota emite sessão para essa pessoa: nem a senha, nem magic link, nem código por e-mail, nem “continuar com o Google”. Todos respondem403 waitlisted.
Isso é exigido onde a sessão é emitida, e não em cada porta, pelo mesmo motivo
dos dois fatores. Uma fila que se contorna escolhendo outro botão é uma lista de
e-mails com passos a mais.
Visitantes anônimos nunca são segurados. O widget emite sessão de visitante a
cada carregamento da landing page, e uma lista de espera cuja landing page não
pode rodar o widget é uma lista sem atribuição — que é a maior parte do motivo
de manter a lista aqui.
Liberando
1
A fila para de segurar
Todas as rotas de login passam a funcionar para aquela pessoa a partir daí.
2
O acesso vai por e-mail
Um único link que comprova o endereço, anexa a senha guardada e já entra com
a pessoa. Um clique entre “chegou a sua vez” e estar dentro — qualquer coisa
mais longa perde quem esperou.
Lendo a fila
customers:read; liberar exige customers:write, porque é o que cria a
conta.