Componentes

Feedback Widget

Aba lateral fixa que abre um painel de coleta de opinião. Aparece em todas as telas autenticadas e é ligado/desligado pelo Admin sem deploy.

Visão geral

Spinlist
A
Feedback

Aba "Feedback" flutuando sobre qualquer tela autenticada

Demo

Aba fechada

Conteúdo da tela
Feedback

Painel aberto

Conteúdo da tela

Obrigado por testar o Spinlist!

Sua opinião ajuda a melhorar o app.

Anatomia

Aba (trigger)

Feedback
1
1

Aba lateral

fixed right-0 top-1/2 · bg-[#C8F53C] · texto vertical · rounded-l-lg · z-50

Painel

Obrigado por testar o Spinlist!

Sua opinião ajuda a melhorar o app.

O que você sentiu...
Enviar
2 3 4 5 6
2

Cabeçalho

Título + subtítulo fixos · botão fechar (X) no canto superior direito

3

Fechar

Ícone X 16px · color:#888 · fecha o painel sem submeter

4

Rating de estrelas

5 estrelas · fill="#C8F53C" quando ativo/hover · opcional (pode enviar só texto)

5

Textarea

bg-[#111] · border-[#C8F53C] no focus · 3 linhas · opcional junto com rating

6

Botão Enviar

Disabled (opacity-40) se texto e rating estiverem vazios · loading state "Enviando..."

Comportamento

Toggle remoto
Controlado pela tabela app_settings (key: 'feedback_widget'). O Admin alterna sem precisar de deploy. O componente também escuta o evento feedback-widget-toggled para atualizar em tempo real.
Rotas ocultas
Não aparece em /login, /cadastro e /admin. Em qualquer outra rota autenticada, a aba é exibida.
Swipe para fechar
O painel suporta swipe down via useSwipeToDismiss — mesmo padrão dos Bottom Sheets do app.
Envio
Insere em feedback com user_id, text, rating e page (pathname atual). Após sucesso, mostra "🙏 Obrigado!" por 2 s e fecha.
Erro de envio
Mensagem inline "Erro ao enviar. Tente novamente." em text-red-400 · botão volta ao estado normal.
Safe area
Painel usa marginBottom: env(safe-area-inset-bottom) para respeitar o home indicator no iPhone.

Specs

ElementoValor
Aba — posiçãofixed right-0 top-1/2 z-50
Aba — fundo#C8F53C
Aba — texto#0f0f0f · 11 px · 700 · vertical-rl
Aba — bordarounded-l-lg (8 px esquerda)
Painel — fundo#1a1a1a
Painel — borda topoborder-t border-[#2a2a2a]
Painel — raiorounded-t-2xl (16 px)
Painel — larguramax-w-sm (384 px)
Painel — paddingp-5 (20 px)
Estrelas — ativasfill="#C8F53C" stroke="#C8F53C" · 24 px
Estrelas — inativasfill="none" stroke="#C8F53C"
Textarea — fundo#111 · border-[#C8F53C] no focus
Textarea — linhas3 (rows={3})
Botão Enviarbg-[#C8F53C] text-[#0f0f0f] · opacity-40 quando disabled
z-index50 (acima do conteúdo, abaixo de modais)

Do / Don't

Feedback
posição fixa, direita
Faça Mantenha a aba no lado direito, centralizada verticalmente. É onde o usuário espera encontrá-la.
💬 Feedback
botão flutuante genérico
Evite Não substitua a aba por um FAB genérico. A aba lateral é discreta e não compete com o conteúdo da tela.
O que você sentiu, o que faltou...
Faça Rating e texto são opcionais — o usuário pode enviar só um ou só o outro. O botão Enviar fica disabled apenas se ambos estiverem vazios.
* Rating obrigatório
* Texto obrigatório (mín. 20 chars)
Evite Não torne rating ou texto obrigatórios. Friction extra reduz drasticamente a taxa de resposta.