Whitelabel real, não tema com cores.
Seu produto, sua marca, seu domínio.
Cada cliente tem subdomínio próprio (cliente.skillment.app ou domínio próprio via CNAME), brand pack tokenizado, e-mails transacionais com remetente do tenant. Aluno nem sabe que existe Skillment por baixo.
- Subdomínio dedicado (cliente.skillment.app) + custom domain via CNAME
- Brand pack: cores em HSL triplet, tipografia, espaçamentos, raio de bordas
- Logo + favicon + open graph image per tenant
- E-mail transacional com remetente do tenant (Resend domain auth)
- CSS variables injetadas no SSR — sem flash branco no primeiro paint
- Switcher de tenant pra admins multi-conta
Como funciona, sem mistério.
Subdomínio próprio
cliente.skillment.app por padrão. Custom domain (academia.cliente.com.br) via CNAME quando o cliente quer.
Brand pack tokenizado
Não é só "trocar a logo". Cores em HSL triplet permitem alpha. Tipografia, raio de borda, espaçamento — tudo tokenizado.
E-mail do tenant
Resend domain auth. E-mail sai de noreply@academia.cliente.com.br, não de @skillment.app. Aluno não percebe a infra por baixo.
SSR sem flash
CSS variables injetadas no HTML do servidor. Primeira renderização já tem brand do tenant. Sem "flash of unstyled content".
Edição live
Admin abre /admin/branding, muda cor primária, vê preview em tempo real. Salva, todos os usuários veem o novo brand.
Isolamento multi-tenant
tenant_id em toda entidade. Row-level isolation no DB. Não dá pra ver dados de outro tenant nem por acidente.
Brand pack como dados, não como código.
Cada tenant tem registro em brand_packs com tokens_json validado por Zod. BrandPackTokensSchema garante shape correto: cores em HSL triplet ("49 100% 55%"), Tailwind consome via hsl(var(--primary) / <alpha-value>). Zero hex hardcoded em componentes. Trocar tema é UPDATE numa linha de tabela — não deploy de código.
Quer ver no produto, não só em texto?
Demo público com dados de exemplo, sem cadastro.
Experimentar agora