Files
agenciapsilmno/src/router/routes.public.js
T
Leonardo a2f3b9fae4 freemium F2: signup self-service com confirmacao + /onboarding
- Signup.vue reescrito: coleta tipo de conta + nome + nome do negocio + slug
  (disponibilidade ao vivo via slug_disponivel) + email/senha; grava tudo no
  raw_user_meta_data do signUp; PEGADINHA #2: signOut scope:local se nao veio
  sessao + tela "confirme seu e-mail". Removido provisionamento/intent inline.
- OnboardingPage.vue (PEGADINHA #3): 1o login chama auto_provision_free_tenant
  + processar_pos_signup; resolve estados provisionando/slug-colidiu/erro;
  redireciona pro painel conforme kind.
- guard: logado-sem-tenant (nao saas_admin) -> /onboarding em vez de /login
- rota /onboarding (meta.public; a pagina exige sessao)

NOTA: supabase/config.toml e gitignored — enable_confirmations=true foi setado
local (ativa no proximo restart do stack). No hosted, ligar em Auth>Email>Confirm.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 19:00:22 -03:00

73 lines
2.4 KiB
JavaScript

/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/router/routes.public.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/
export default {
path: '/',
children: [
{
path: '',
name: 'home',
component: () => import('@/views/pages/HomeCards.vue')
},
// ✅ LP (página separada da landing do template)
{
path: 'lp',
name: 'lp',
component: () => import('@/views/pages/public/Landingpage-v1.vue'),
meta: { public: true }
},
// ✅ cadastro externo
{
path: 'cadastro/paciente',
name: 'public.patient.intake',
component: () => import('@/views/pages/public/CadastroPacienteExterno.vue'),
meta: { public: true }
},
// ✅ convite de clinicas
{
path: '/accept-invite',
name: 'accept-invite',
component: () => import('@/views/pages/public/AcceptInvitePage.vue'),
meta: { public: true }
},
// ✅ agendador online público
{
path: '/agendar/:slug',
name: 'agendador.publico',
component: () => import('@/views/pages/public/AgendadorPublicoPage.vue'),
meta: { public: true }
},
// ✅ documento compartilhado via link temporário
{
path: '/shared/document/:token',
name: 'shared.document',
component: () => import('@/views/pages/public/SharedDocumentPage.vue'),
meta: { public: true }
},
// ✅ Freemium F2: onboarding pós-confirmação (provisiona o tenant gratuito).
// meta.public p/ não passar pela lógica de tenant do guard; a própria
// página exige sessão (redireciona pra /auth/login se não houver).
{
path: '/onboarding',
name: 'onboarding',
component: () => import('@/views/pages/auth/OnboardingPage.vue'),
meta: { public: true }
}
]
};