From e12cfbe91cfee45823d85a3638855af9d0a1079c Mon Sep 17 00:00:00 2001 From: bigtux Date: Sat, 7 Feb 2026 00:21:04 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20Fase=201=20-=20Autentica=C3=A7=C3=A3o?= =?UTF-8?q?=20completa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Prisma com SQLite configurado - Tabelas: users, sessions, subscriptions, children, etc - Auth.js com credentials provider - API de registro com criação de usuário + criança - Middleware para proteger rotas - Login/Cadastro funcionais - Dashboard com sessão real --- .gitignore | 2 + docs/MANUAL_MODELOS.md | 336 ++++++++++ docs/MODELO_NEGOCIO.md | 266 ++++++++ package-lock.json | 629 ++++++++++++++++- package.json | 8 + prisma/dev.db | Bin 0 -> 131072 bytes .../20260207031740_init/migration.sql | 158 +++++ prisma/migrations/migration_lock.toml | 3 + prisma/schema.prisma | 179 +++++ public/icon-iristea.png | Bin 0 -> 42631 bytes public/icon-iristea.svg | 39 ++ public/logo-iristea.png | Bin 0 -> 30410 bytes public/logo-iristea.svg | 49 ++ src/app/api/auth/[...nextauth]/route.ts | 3 + src/app/api/register/route.ts | 112 ++++ src/app/cadastro/page.tsx | 618 +++++++++++++++++ src/app/cadastro/sucesso/page.tsx | 103 +++ src/app/dashboard/page.tsx | 342 ++++++++++ src/app/globals.css | 69 +- src/app/layout.tsx | 26 +- src/app/login/page.tsx | 151 +++++ src/app/page.tsx | 631 ++++++++++++++++-- src/components/providers.tsx | 8 + src/lib/auth.ts | 75 +++ src/lib/prisma.ts | 13 + src/middleware.ts | 33 + src/types/next-auth.d.ts | 28 + 27 files changed, 3786 insertions(+), 95 deletions(-) create mode 100644 docs/MANUAL_MODELOS.md create mode 100644 docs/MODELO_NEGOCIO.md create mode 100644 prisma/dev.db create mode 100644 prisma/migrations/20260207031740_init/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 prisma/schema.prisma create mode 100644 public/icon-iristea.png create mode 100644 public/icon-iristea.svg create mode 100644 public/logo-iristea.png create mode 100644 public/logo-iristea.svg create mode 100644 src/app/api/auth/[...nextauth]/route.ts create mode 100644 src/app/api/register/route.ts create mode 100644 src/app/cadastro/page.tsx create mode 100644 src/app/cadastro/sucesso/page.tsx create mode 100644 src/app/dashboard/page.tsx create mode 100644 src/app/login/page.tsx create mode 100644 src/components/providers.tsx create mode 100644 src/lib/auth.ts create mode 100644 src/lib/prisma.ts create mode 100644 src/middleware.ts create mode 100644 src/types/next-auth.d.ts diff --git a/.gitignore b/.gitignore index 5ef6a52..f390d12 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,5 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +/src/generated/prisma diff --git a/docs/MANUAL_MODELOS.md b/docs/MANUAL_MODELOS.md new file mode 100644 index 0000000..0c85716 --- /dev/null +++ b/docs/MANUAL_MODELOS.md @@ -0,0 +1,336 @@ +# IrisTEA - Manual de Modelos de Negócio + +## Visão Geral + +A IrisTEA pode operar em **3 modelos diferentes**, cada um com suas vantagens: + +| Modelo | Descrição | Custo Operacional | Escalabilidade | +|--------|-----------|-------------------|----------------| +| **100% IA** | Terapeuta virtual IA | Muito baixo | Infinita | +| **Híbrido** | IA + Supervisão humana | Médio | Alta | +| **100% Humano** | Terapeutas BCBA via teleterapia | Alto | Limitada | + +--- + +## MODELO 1: 100% IA (Atual) + +### Como Funciona +``` +Criança ←→ Plataforma IA ←→ Análise Automática + ↓ + Relatórios para Pais +``` + +### Tecnologias +- **GPT-4 / Claude** para conversação e orientação +- **Visão Computacional** para análise de comportamentos +- **Speech-to-Text** para análise de fala +- **Machine Learning** para personalização + +### Preços Sugeridos +| Plano | Preço | Margem | +|-------|-------|--------| +| Básico | R$ 97/mês | ~90% | +| Completo | R$ 197/mês | ~92% | +| Premium | R$ 397/mês | ~85% (inclui BCBA) | + +### Vantagens +- ✅ Disponível 24/7 +- ✅ Sem lista de espera +- ✅ Custo muito baixo para o cliente +- ✅ Escalabilidade infinita +- ✅ Consistência total +- ✅ Análise de dados em tempo real + +### Desvantagens +- ❌ Casos complexos precisam de humano +- ❌ Resistência de alguns pais +- ❌ Regulamentação incerta +- ❌ Não substitui diagnóstico + +### Custos Operacionais (por usuário/mês) +- API OpenAI/Anthropic: ~R$ 15-30 +- Infraestrutura: ~R$ 5 +- **Total: ~R$ 20-35/usuário** + +--- + +## MODELO 2: HÍBRIDO (Recomendado para começar) + +### Como Funciona +``` +Criança ←→ Plataforma IA (80% do tempo) + ↓ + BCBA Supervisor (20% do tempo) + ↓ + Plano Terapêutico Validado +``` + +### Estrutura +1. **IA faz o dia a dia:** + - Sessões interativas + - Atividades gamificadas + - Coleta de dados + - Relatórios automáticos + +2. **BCBA humano faz:** + - Avaliação inicial (1 sessão) + - Supervisão mensal (1-2 sessões) + - Ajustes no plano terapêutico + - Casos de crise + +### Preços Sugeridos +| Plano | Preço | Sessões BCBA | +|-------|-------|--------------| +| Essencial | R$ 297/mês | 1/mês | +| Completo | R$ 497/mês | 2/mês | +| Intensivo | R$ 897/mês | 4/mês | + +### Vantagens +- ✅ Credibilidade (tem humano) +- ✅ Atende casos complexos +- ✅ Mais fácil de regulamentar +- ✅ IA reduz custo do BCBA +- ✅ Escalável (menos humanos necessários) + +### Desvantagens +- ❌ Precisa contratar BCBAs +- ❌ Gestão de agenda +- ❌ Custo maior que 100% IA + +### Custos Operacionais (por usuário/mês) +- API IA: ~R$ 20 +- BCBA (1h/mês): ~R$ 100-150 +- Infraestrutura: ~R$ 5 +- **Total: ~R$ 125-175/usuário** + +### Como Contratar BCBAs +1. **CLT**: Salário R$ 8.000-15.000 + benefícios + - 1 BCBA atende ~40 famílias/mês + - Custo/família: ~R$ 200-375 + +2. **PJ/Freelancer**: R$ 150-300/hora + - Mais flexível + - Sem vínculo + - Custo/família (1h/mês): R$ 150-300 + +3. **Parceria com Clínicas**: Comissão 30-40% + - Eles fornecem os BCBAs + - Você fornece a plataforma e clientes + +--- + +## MODELO 3: 100% HUMANO (Estilo AnswersNow) + +### Como Funciona +``` +Criança ←→ BCBA via Vídeo ←→ Plataforma + ↓ + Sessões Semanais (2-8x) + ↓ + Relatórios Manuais +``` + +### Estrutura da Equipe +``` +CEO + ├── Diretor Clínico (BCBA-D) + │ ├── BCBA Supervisores (5-10) + │ │ └── Cada BCBA atende 15-20 famílias + │ └── Coordenador de Casos + ├── Diretor Comercial + │ ├── Vendas/Intake + │ └── Marketing + └── Diretor de Tecnologia + ├── Desenvolvedores + └── Suporte +``` + +### Preços Sugeridos (Mercado Brasil) +| Plano | Sessões/mês | Preço | +|-------|-------------|-------| +| Básico | 4 (1x/semana) | R$ 800/mês | +| Padrão | 8 (2x/semana) | R$ 1.400/mês | +| Intensivo | 16 (4x/semana) | R$ 2.400/mês | + +### Preços AnswersNow (EUA - referência) +- ~$200-400/semana = $800-1.600/mês +- Convertido: R$ 4.000-8.000/mês + +### Vantagens +- ✅ Modelo comprovado +- ✅ Regulamentação clara +- ✅ Confiança dos pais +- ✅ Atende qualquer complexidade + +### Desvantagens +- ❌ Alto custo operacional +- ❌ Escala limitada (precisa contratar) +- ❌ Lista de espera inevitável +- ❌ Dependência de profissionais + +### Custos Operacionais +- BCBA (4h/mês por família): R$ 400-600 +- Plataforma: R$ 20 +- Overhead (admin, comercial): R$ 100 +- **Total: ~R$ 520-720/usuário** +- **Margem**: 30-50% nos planos + +--- + +## COMPARATIVO FINANCEIRO + +### Cenário: 500 famílias ativas + +| Métrica | 100% IA | Híbrido | 100% Humano | +|---------|---------|---------|-------------| +| **Receita/mês** | R$ 98.500 | R$ 248.500 | R$ 700.000 | +| **Custo/mês** | R$ 17.500 | R$ 87.500 | R$ 350.000 | +| **Lucro/mês** | R$ 81.000 | R$ 161.000 | R$ 350.000 | +| **Margem** | 82% | 65% | 50% | +| **Equipe necessária** | 3-5 | 10-15 | 30-50 | +| **Tempo p/ escalar** | Dias | Meses | Anos | + +### Cenário: 5.000 famílias + +| Métrica | 100% IA | Híbrido | 100% Humano | +|---------|---------|---------|-------------| +| **Receita/mês** | R$ 985.000 | R$ 2.485.000 | R$ 7.000.000 | +| **Custo/mês** | R$ 175.000 | R$ 875.000 | R$ 3.500.000 | +| **Lucro/mês** | R$ 810.000 | R$ 1.610.000 | R$ 3.500.000 | +| **Equipe** | 10-15 | 50-80 | 200-300 | + +--- + +## RECOMENDAÇÃO + +### Fase 1 (0-6 meses): Modelo Híbrido Light +- Lançar com IA + 1 sessão BCBA/mês +- Validar produto e mercado +- Contratar 2-3 BCBAs PJ +- Meta: 100 famílias + +### Fase 2 (6-18 meses): Escalar Híbrido +- Aumentar base de BCBAs +- Melhorar IA com dados reais +- Parcerias com clínicas +- Meta: 1.000 famílias + +### Fase 3 (18+ meses): Migrar para IA +- IA já treinada com dados suficientes +- Oferecer planos 100% IA (mais baratos) +- Manter híbrido como premium +- Meta: 10.000+ famílias + +--- + +## REQUISITOS LEGAIS + +### Para operar no Brasil: + +1. **Empresa** + - CNPJ (LTDA ou SA) + - CNAE: 8650-0/03 (atividades de psicologia) + +2. **Responsável Técnico** + - BCBA ou Psicólogo com CRP + - Assina como responsável clínico + +3. **Regulamentação** + - CFP (se psicólogo) / CRP estadual + - BACB (para BCBAs internacionais) + - LGPD compliance + +4. **Seguro** + - Responsabilidade Civil Profissional + - ~R$ 3.000-5.000/ano + +### Considerações sobre IA +- Não existe regulamentação específica para "terapeuta IA" +- Recomendação: posicionar como "ferramenta de apoio" +- Ter sempre supervisão humana disponível +- Deixar claro que não substitui diagnóstico médico + +--- + +## STACK TECNOLÓGICA + +### MVP (o que já temos) +- Next.js + TypeScript +- Tailwind CSS +- Autenticação JWT + +### Próximos Passos +``` +1. Backend + - Node.js/Go API + - PostgreSQL + - Redis (cache/sessões) + +2. IA/ML + - OpenAI GPT-4 API + - Azure Cognitive Services (visão) + - Whisper (transcrição) + +3. Vídeo + - Azure Communication Services + - ou Daily.co / Twilio + +4. Pagamentos + - Stripe ou Pagar.me + - Assinaturas recorrentes + +5. Infraestrutura + - DigitalOcean / AWS + - CDN para assets +``` + +--- + +## ROADMAP SUGERIDO + +### Mês 1-2 +- [ ] Finalizar landing page +- [ ] Implementar autenticação +- [ ] Integrar pagamentos +- [ ] Chat com IA básico + +### Mês 3-4 +- [ ] Dashboard para pais +- [ ] Sistema de sessões +- [ ] Relatórios automáticos +- [ ] Contratar 2 BCBAs PJ + +### Mês 5-6 +- [ ] Lançamento beta (50 famílias) +- [ ] Coletar feedback +- [ ] Iterar produto +- [ ] Preparar lançamento oficial + +### Mês 7-12 +- [ ] Lançamento oficial +- [ ] Marketing digital +- [ ] Parcerias com clínicas +- [ ] Meta: 500 famílias + +--- + +## CONTATOS ÚTEIS + +### Associações +- ABPMC (Análise do Comportamento): abpmc.org.br +- SBNp (Neuropsicologia): sbnp.org.br + +### Certificação BCBA +- BACB: bacb.com +- Cursos no Brasil: várias universidades + +### Referências +- AnswersNow: getanswersnow.com +- Rethink: rethinkfirst.com +- Catalyst: catalyst.care + +--- + +*Documento criado em Fevereiro/2026* +*IrisTEA - Terapia ABA Inteligente* diff --git a/docs/MODELO_NEGOCIO.md b/docs/MODELO_NEGOCIO.md new file mode 100644 index 0000000..a039b69 --- /dev/null +++ b/docs/MODELO_NEGOCIO.md @@ -0,0 +1,266 @@ +# IrisTEA - Modelo de Negócio + +## 🎯 O que é + +**Plataforma de apoio ao desenvolvimento infantil para crianças com TEA**, combinando: +- Atividades interativas guiadas por IA +- Supervisão de profissionais certificados (BCBAs) +- Treinamento de pais/cuidadores + +--- + +## 🔄 Como Funciona + +``` +┌─────────────────────────────────────────────────────────────┐ +│ FAMÍLIA │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ PLATAFORMA IRISTEA │ │ +│ │ │ │ +│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ +│ │ │ IA │ │ BCBA │ │ DADOS │ │ │ +│ │ │ 80% │ + │ 20% │ = │ANALYTICS │ │ │ +│ │ │ do tempo │ │ do tempo │ │ │ │ │ +│ │ └──────────┘ └──────────┘ └──────────┘ │ │ +│ │ │ │ │ │ │ +│ │ ▼ ▼ ▼ │ │ +│ │ • Atividades • Avaliação • Relatórios │ │ +│ │ • Chat 24/7 • Supervisão • Progresso │ │ +│ │ • Exercícios • Plano • Métricas │ │ +│ │ • Gamificação • Ajustes • Insights │ │ +│ └─────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ CRIANÇA EVOLUI │ +└─────────────────────────────────────────────────────────────┘ +``` + +--- + +## 💰 Modelo de Receita + +### Planos de Assinatura (B2C) + +| Plano | Preço | O que inclui | +|-------|-------|--------------| +| **Essencial** | R$ 297/mês | IA ilimitada + 1 sessão BCBA/mês | +| **Completo** | R$ 497/mês | IA ilimitada + 2 sessões BCBA/mês + grupo pais | +| **Intensivo** | R$ 897/mês | IA ilimitada + 4 sessões BCBA/mês + multidisciplinar | + +### Receita Adicional (Futuro) + +| Fonte | Modelo | +|-------|--------| +| **B2B Clínicas** | Licenciamento da plataforma (R$ 2.000-5.000/mês) | +| **B2B Escolas** | Pacotes institucionais | +| **B2B Planos de Saúde** | Convênio/parceria | +| **Cursos para Pais** | Venda avulsa (R$ 197-497) | +| **Certificação ABA** | Parceria com instituições | + +--- + +## 📊 Unit Economics + +### Por Família (Plano Completo - R$ 497/mês) + +**Receita:** R$ 497 + +**Custos Variáveis:** +| Item | Custo | +|------|-------| +| API IA (OpenAI/Azure) | R$ 25 | +| BCBA (2h × R$ 80/h) | R$ 160 | +| Infraestrutura | R$ 10 | +| Pagamento (3.5%) | R$ 17 | +| **Total Variável** | **R$ 212** | + +**Margem Bruta:** R$ 285 (57%) + +### Projeção Escala + +| Famílias | Receita/mês | Custo Var. | Margem Bruta | +|----------|-------------|------------|--------------| +| 100 | R$ 49.700 | R$ 21.200 | R$ 28.500 | +| 500 | R$ 248.500 | R$ 106.000 | R$ 142.500 | +| 1.000 | R$ 497.000 | R$ 212.000 | R$ 285.000 | +| 5.000 | R$ 2.485.000 | R$ 1.060.000 | R$ 1.425.000 | + +--- + +## 👥 Estrutura Operacional + +### Equipe Mínima (Fase 1: 0-200 famílias) + +| Cargo | Qtd | Salário | Total/mês | +|-------|-----|---------|-----------| +| CEO/Fundador | 1 | Pró-labore | R$ 5.000 | +| Desenvolvedor Full Stack | 1 | R$ 12.000 | R$ 12.000 | +| BCBA Responsável Técnico | 1 | R$ 10.000 | R$ 10.000 | +| BCBAs PJ (atendimento) | 3 | R$ 80/h | ~R$ 15.000 | +| Marketing/Comercial | 1 | R$ 6.000 | R$ 6.000 | +| **Total Folha** | | | **R$ 48.000** | + +### Equipe Escala (Fase 2: 500-1000 famílias) + +| Cargo | Qtd | Total/mês | +|-------|-----|-----------| +| Diretoria | 2 | R$ 25.000 | +| Desenvolvimento | 3 | R$ 40.000 | +| Clínico (BCBAs) | 10 | R$ 80.000 | +| Comercial/Marketing | 3 | R$ 25.000 | +| Suporte/CS | 2 | R$ 10.000 | +| Administrativo | 1 | R$ 5.000 | +| **Total** | **21** | **R$ 185.000** | + +--- + +## 🎯 Funil de Vendas + +``` +TOPO (Awareness) +│ • Anúncios Facebook/Instagram +│ • Google Ads (palavras: autismo, TEA, ABA) +│ • Conteúdo blog/YouTube +│ • Parcerias com influenciadores +│ +▼ 10.000 visitantes/mês + +MEIO (Consideração) +│ • Landing page +│ • Lead magnet (e-book gratuito) +│ • Webinars gratuitos +│ • Avaliação gratuita +│ +▼ 500 leads/mês (5% conversão) + +FUNDO (Decisão) +│ • Trial 7 dias grátis +│ • Ligação de vendas +│ • Demonstração personalizada +│ +▼ 50 clientes/mês (10% conversão) +``` + +### Métricas Alvo + +| Métrica | Meta | +|---------|------| +| CAC (Custo Aquisição Cliente) | < R$ 300 | +| LTV (Lifetime Value) | > R$ 3.000 | +| LTV/CAC | > 10x | +| Churn mensal | < 5% | +| NPS | > 60 | + +--- + +## 🏆 Diferenciais Competitivos + +### vs Clínicas Tradicionais +| Tradicional | IrisTEA | +|-------------|---------| +| R$ 2.000-5.000/mês | R$ 297-897/mês | +| 3-12 meses de espera | Início em 48h | +| Horário comercial | 24/7 com IA | +| 1 cidade | Brasil todo | +| Relatórios manuais | Automáticos em tempo real | + +### vs Apps Educativos +| Apps genéricos | IrisTEA | +|----------------|---------| +| Atividades genéricas | Baseado em ABA | +| Sem profissional | BCBA supervisionando | +| Sem personalização | IA adaptativa | +| Sem relatórios | Dashboard completo | + +--- + +## 📅 Roadmap + +### Q1 2026 (Jan-Mar) +- [x] MVP landing page +- [x] Logo e identidade +- [ ] Sistema de autenticação +- [ ] Integração pagamentos +- [ ] Chat com IA básico +- [ ] Contratar 2 BCBAs + +### Q2 2026 (Abr-Jun) +- [ ] Dashboard completo +- [ ] Sistema de sessões vídeo +- [ ] Relatórios automáticos +- [ ] Beta fechado (50 famílias) +- [ ] Validar product-market fit + +### Q3 2026 (Jul-Set) +- [ ] Lançamento público +- [ ] Marketing digital +- [ ] Meta: 200 famílias +- [ ] App mobile + +### Q4 2026 (Out-Dez) +- [ ] Parcerias clínicas +- [ ] B2B para escolas +- [ ] Meta: 500 famílias +- [ ] Preparar para investimento + +--- + +## 💵 Projeção Financeira (Ano 1) + +| Mês | Famílias | Receita | Custos | Lucro | +|-----|----------|---------|--------|-------| +| 1 | 10 | R$ 4.970 | R$ 50.000 | -R$ 45.030 | +| 2 | 25 | R$ 12.425 | R$ 52.000 | -R$ 39.575 | +| 3 | 50 | R$ 24.850 | R$ 55.000 | -R$ 30.150 | +| 4 | 80 | R$ 39.760 | R$ 58.000 | -R$ 18.240 | +| 5 | 120 | R$ 59.640 | R$ 65.000 | -R$ 5.360 | +| 6 | 170 | R$ 84.490 | R$ 75.000 | **R$ 9.490** | +| 7 | 220 | R$ 109.340 | R$ 85.000 | R$ 24.340 | +| 8 | 280 | R$ 139.160 | R$ 95.000 | R$ 44.160 | +| 9 | 350 | R$ 173.950 | R$ 110.000 | R$ 63.950 | +| 10 | 420 | R$ 208.740 | R$ 125.000 | R$ 83.740 | +| 11 | 480 | R$ 238.560 | R$ 140.000 | R$ 98.560 | +| 12 | 550 | R$ 273.350 | R$ 155.000 | R$ 118.350 | +| **ANO** | | **R$ 1.369.235** | **R$ 1.065.000** | **R$ 304.235** | + +**Break-even:** Mês 6 (~150 famílias) + +--- + +## 🚀 Necessidade de Investimento + +### Para chegar ao break-even (6 meses) + +| Item | Valor | +|------|-------| +| Desenvolvimento plataforma | R$ 100.000 | +| Marketing inicial | R$ 80.000 | +| Equipe (6 meses) | R$ 288.000 | +| Infraestrutura | R$ 20.000 | +| Jurídico/Contábil | R$ 15.000 | +| Reserva | R$ 47.000 | +| **Total** | **R$ 550.000** | + +### Opções de Funding + +1. **Bootstrapping:** Começar menor, crescer orgânico +2. **Investidor Anjo:** R$ 300-500k por 10-15% +3. **Aceleradoras:** Inovativa, Startup Chile, Y Combinator +4. **Venture Capital:** Série Seed após tração + +--- + +## 📞 Próximos Passos + +1. **Validar demanda:** Criar lista de espera, medir interesse +2. **Prototipar IA:** Testar chat com 10 famílias +3. **Contratar BCBA:** Responsável técnico +4. **Registrar domínio:** iristea.com.br +5. **MVP funcional:** 60 dias + +--- + +*Documento: Modelo de Negócio IrisTEA* +*Versão: 1.0 - Fevereiro 2026* diff --git a/package-lock.json b/package-lock.json index 993a23c..19cee25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,12 +8,20 @@ "name": "iris", "version": "0.1.0", "dependencies": { + "@auth/prisma-adapter": "^2.11.1", + "@prisma/client": "^6.19.2", + "bcrypt": "^6.0.0", + "framer-motion": "^12.33.0", + "lucide-react": "^0.563.0", "next": "16.1.6", + "next-auth": "^5.0.0-beta.30", + "prisma": "^6.19.2", "react": "19.2.3", "react-dom": "19.2.3" }, "devDependencies": { "@tailwindcss/postcss": "^4", + "@types/bcrypt": "^6.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", @@ -36,6 +44,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@auth/core": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.41.1.tgz", + "integrity": "sha512-t9cJ2zNYAdWMacGRMT6+r4xr1uybIdmYa49calBPeTqwgAFPV/88ac9TEvCR85pvATiSPt8VaNf+Gt24JIT/uw==", + "license": "ISC", + "dependencies": { + "@panva/hkdf": "^1.2.1", + "jose": "^6.0.6", + "oauth4webapi": "^3.3.0", + "preact": "10.24.3", + "preact-render-to-string": "6.5.11" + }, + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "nodemailer": "^7.0.7" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, + "node_modules/@auth/prisma-adapter": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@auth/prisma-adapter/-/prisma-adapter-2.11.1.tgz", + "integrity": "sha512-Ke7DXP0Fy0Mlmjz/ZJLXwQash2UkA4621xCM0rMtEczr1kppLc/njCbUkHkIQ/PnmILjqSPEKeTjDPsYruvkug==", + "license": "ISC", + "dependencies": { + "@auth/core": "0.41.1" + }, + "peerDependencies": { + "@prisma/client": ">=2.26.0 || >=3 || >=4 || >=5 || >=6" + } + }, "node_modules/@babel/code-frame": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", @@ -1226,6 +1275,94 @@ "node": ">=12.4.0" } }, + "node_modules/@panva/hkdf": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", + "integrity": "sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@prisma/client": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.19.2.tgz", + "integrity": "sha512-gR2EMvfK/aTxsuooaDA32D8v+us/8AAet+C3J1cc04SW35FPdZYgLF+iN4NDLUgAaUGTKdAB0CYenu1TAgGdMg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/config": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.19.2.tgz", + "integrity": "sha512-kadBGDl+aUswv/zZMk9Mx0C8UZs1kjao8H9/JpI4Wh4SHZaM7zkTwiKn/iFLfRg+XtOAo/Z/c6pAYhijKl0nzQ==", + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" + } + }, + "node_modules/@prisma/debug": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.2.tgz", + "integrity": "sha512-lFnEZsLdFLmEVCVNdskLDCL8Uup41GDfU0LUfquw+ercJC8ODTuL0WNKgOKmYxCJVvFwf0OuZBzW99DuWmoH2A==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.19.2.tgz", + "integrity": "sha512-TTkJ8r+uk/uqczX40wb+ODG0E0icVsMgwCTyTHXehaEfb0uo80M9g1aW1tEJrxmFHeOZFXdI2sTA1j1AgcHi4A==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.2", + "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "@prisma/fetch-engine": "6.19.2", + "@prisma/get-platform": "6.19.2" + } + }, + "node_modules/@prisma/engines-version": { + "version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7.tgz", + "integrity": "sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.2.tgz", + "integrity": "sha512-h4Ff4Pho+SR1S8XerMCC12X//oY2bG3Iug/fUnudfcXEUnIeRiBdXHFdGlGOgQ3HqKgosTEhkZMvGM9tWtYC+Q==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.2", + "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "@prisma/get-platform": "6.19.2" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.2.tgz", + "integrity": "sha512-PGLr06JUSTqIvztJtAzIxOwtWKtJm5WwOG6xpsgD37Rc84FpfUBGLKz65YpJBGtkRQGXTYEFie7pYALocC3MtA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.2" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1233,6 +1370,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1524,6 +1667,16 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/bcrypt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2415,6 +2568,20 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/bcrypt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -2473,6 +2640,34 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2570,6 +2765,30 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -2603,6 +2822,21 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2718,6 +2952,15 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -2754,6 +2997,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -2777,6 +3032,18 @@ "node": ">=0.10.0" } }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2792,6 +3059,16 @@ "node": ">= 0.4" } }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.286", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", @@ -2806,6 +3083,15 @@ "dev": true, "license": "MIT" }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/enhanced-resolve": { "version": "5.19.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", @@ -3444,6 +3730,34 @@ "node": ">=0.10.0" } }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3585,6 +3899,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/framer-motion": { + "version": "12.33.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.33.0.tgz", + "integrity": "sha512-ca8d+rRPcDP5iIF+MoT3WNc0KHJMjIyFAbtVLvM9eA7joGSpeqDfiNH/kCs1t4CHi04njYvWyj0jS4QlEK/rJQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.33.0", + "motion-utils": "^12.29.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3716,6 +4057,23 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4393,12 +4751,20 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "dev": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4833,6 +5199,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -4900,6 +5275,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/motion-dom": { + "version": "12.33.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.33.0.tgz", + "integrity": "sha512-XRPebVypsl0UM+7v0Hr8o9UAj0S2djsQWRdHBd5iVouVpMrQqAI0C/rDAT3QaYnXnHuC5hMcwDHCboNeyYjPoQ==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.29.2" + } + }, + "node_modules/motion-utils": { + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", + "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -5001,6 +5391,62 @@ } } }, + "node_modules/next-auth": { + "version": "5.0.0-beta.30", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-5.0.0-beta.30.tgz", + "integrity": "sha512-+c51gquM3F6nMVmoAusRJ7RIoY0K4Ts9HCCwyy/BRoe4mp3msZpOzYMyb5LAYc1wSo74PMQkGDcaghIO7W6Xjg==", + "license": "ISC", + "dependencies": { + "@auth/core": "0.41.0" + }, + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "next": "^14.0.0-0 || ^15.0.0 || ^16.0.0", + "nodemailer": "^7.0.7", + "react": "^18.2.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, + "node_modules/next-auth/node_modules/@auth/core": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.41.0.tgz", + "integrity": "sha512-Wd7mHPQ/8zy6Qj7f4T46vg3aoor8fskJm6g2Zyj064oQ3+p0xNZXAV60ww0hY+MbTesfu29kK14Zk5d5JTazXQ==", + "license": "ISC", + "dependencies": { + "@panva/hkdf": "^1.2.1", + "jose": "^6.0.6", + "oauth4webapi": "^3.3.0", + "preact": "10.24.3", + "preact-render-to-string": "6.5.11" + }, + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "nodemailer": "^6.8.0" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -5029,6 +5475,32 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-addon-api": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -5036,6 +5508,38 @@ "dev": true, "license": "MIT" }, + "node_modules/nypm": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", + "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", + "license": "MIT", + "dependencies": { + "citty": "^0.2.0", + "pathe": "^2.0.3", + "tinyexec": "^1.0.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.0.tgz", + "integrity": "sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==", + "license": "MIT" + }, + "node_modules/oauth4webapi": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.3.tgz", + "integrity": "sha512-pQ5BsX3QRTgnt5HxgHwgunIRaDXBdkT23tf8dfzmtTIL2LTpdmxgbpbBm0VgFWAIDlezQvQCTgnVIUmHupXHxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5159,6 +5663,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5267,6 +5777,18 @@ "dev": true, "license": "MIT" }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5286,6 +5808,17 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -5325,6 +5858,25 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "10.24.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz", + "integrity": "sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "6.5.11", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.5.11.tgz", + "integrity": "sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==", + "license": "MIT", + "peerDependencies": { + "preact": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5335,6 +5887,31 @@ "node": ">= 0.8.0" } }, + "node_modules/prisma": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.19.2.tgz", + "integrity": "sha512-XTKeKxtQElcq3U9/jHyxSPgiRgeYDKxWTPOf6NkXA0dNj5j40MfEsZkMbyNpwDWCUv7YBFUl7I2VK/6ALbmhEg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/config": "6.19.2", + "@prisma/engines": "6.19.2" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5357,6 +5934,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5378,6 +5971,16 @@ ], "license": "MIT" }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/react": { "version": "19.2.3", "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", @@ -5406,6 +6009,19 @@ "dev": true, "license": "MIT" }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -6039,6 +6655,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -6240,7 +6865,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index a917206..bce6bdb 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,20 @@ "lint": "eslint" }, "dependencies": { + "@auth/prisma-adapter": "^2.11.1", + "@prisma/client": "^6.19.2", + "bcrypt": "^6.0.0", + "framer-motion": "^12.33.0", + "lucide-react": "^0.563.0", "next": "16.1.6", + "next-auth": "^5.0.0-beta.30", + "prisma": "^6.19.2", "react": "19.2.3", "react-dom": "19.2.3" }, "devDependencies": { "@tailwindcss/postcss": "^4", + "@types/bcrypt": "^6.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/prisma/dev.db b/prisma/dev.db new file mode 100644 index 0000000000000000000000000000000000000000..fabe727656cb62d2235a94d44704f1bb356d0b0e GIT binary patch literal 131072 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/logo-iristea.png b/public/logo-iristea.png new file mode 100644 index 0000000000000000000000000000000000000000..7ffeab93c20042b5fdd3e415b303c41cb228d2b0 GIT binary patch literal 30410 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 literal 0 HcmV?d00001 diff --git a/public/logo-iristea.svg b/public/logo-iristea.svg new file mode 100644 index 0000000..ce7850a --- /dev/null +++ b/public/logo-iristea.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IrisTEA + + + + + Teleterapia especializada em autismo + + diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 0000000..5ef28c1 --- /dev/null +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,3 @@ +import { handlers } from '@/lib/auth'; + +export const { GET, POST } = handlers; diff --git a/src/app/api/register/route.ts b/src/app/api/register/route.ts new file mode 100644 index 0000000..55b8ef3 --- /dev/null +++ b/src/app/api/register/route.ts @@ -0,0 +1,112 @@ +import { NextRequest, NextResponse } from 'next/server'; +import bcrypt from 'bcrypt'; +import { prisma } from '@/lib/prisma'; + +export async function POST(request: NextRequest) { + try { + const body = await request.json(); + + const { + // Step 1 - Responsável + nomeResponsavel, + email, + telefone, + cidade, + estado, + + // Step 2 - Criança + nomeCrianca, + dataNascimento, + diagnostico, + quandoDiagnostico, + quaisTerapias, + + // Step 3 - Prioridades + prioridades, + desafios, + disponibilidade, + planoInteresse, + + // Senha + password, + } = body; + + // Validações básicas + if (!email || !password || !nomeResponsavel) { + return NextResponse.json( + { error: 'Campos obrigatórios faltando' }, + { status: 400 } + ); + } + + // Verificar se usuário já existe + const existingUser = await prisma.user.findUnique({ + where: { email }, + }); + + if (existingUser) { + return NextResponse.json( + { error: 'Este e-mail já está cadastrado' }, + { status: 400 } + ); + } + + // Hash da senha + const hashedPassword = await bcrypt.hash(password, 10); + + // Criar usuário e criança em uma transação + const result = await prisma.$transaction(async (tx) => { + // Criar usuário + const user = await tx.user.create({ + data: { + email, + password: hashedPassword, + name: nomeResponsavel, + phone: telefone, + city: cidade, + state: estado, + role: 'parent', + }, + }); + + // Criar assinatura pendente + await tx.subscription.create({ + data: { + userId: user.id, + plan: planoInteresse || 'completo', + status: 'pending', + }, + }); + + // Criar perfil da criança + if (nomeCrianca && dataNascimento) { + await tx.child.create({ + data: { + parentId: user.id, + name: nomeCrianca, + birthDate: new Date(dataNascimento), + diagnosis: diagnostico || '', + diagnosisDate: quandoDiagnostico, + currentTherapies: JSON.stringify(quaisTerapias || []), + priorities: JSON.stringify(prioridades || []), + challenges: desafios, + }, + }); + } + + return user; + }); + + return NextResponse.json({ + success: true, + message: 'Cadastro realizado com sucesso!', + userId: result.id, + }); + } catch (error) { + console.error('Erro no cadastro:', error); + return NextResponse.json( + { error: 'Erro interno do servidor' }, + { status: 500 } + ); + } +} diff --git a/src/app/cadastro/page.tsx b/src/app/cadastro/page.tsx new file mode 100644 index 0000000..42a9183 --- /dev/null +++ b/src/app/cadastro/page.tsx @@ -0,0 +1,618 @@ +'use client'; + +import Link from 'next/link'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; +import { + Sparkles, ArrowLeft, ArrowRight, Check, User, Baby, Target, + Lock, Eye, EyeOff +} from 'lucide-react'; + +type Step = 1 | 2 | 3; + +interface FormData { + // Step 1 - Responsável + nomeResponsavel: string; + email: string; + password: string; + confirmPassword: string; + telefone: string; + cidade: string; + estado: string; + comoConheceu: string; + + // Step 2 - Criança + nomeCrianca: string; + dataNascimento: string; + diagnostico: string; + quandoDiagnostico: string; + fazTerapia: string; + quaisTerapias: string[]; + + // Step 3 - Prioridades + prioridades: string[]; + desafios: string; + expectativas: string; + disponibilidade: string[]; + planoInteresse: string; +} + +export default function CadastroPage() { + const router = useRouter(); + const [step, setStep] = useState(1); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + const [showPassword, setShowPassword] = useState(false); + const [formData, setFormData] = useState({ + nomeResponsavel: '', + email: '', + password: '', + confirmPassword: '', + telefone: '', + cidade: '', + estado: '', + comoConheceu: '', + nomeCrianca: '', + dataNascimento: '', + diagnostico: '', + quandoDiagnostico: '', + fazTerapia: '', + quaisTerapias: [], + prioridades: [], + desafios: '', + expectativas: '', + disponibilidade: [], + planoInteresse: 'completo', + }); + + const estados = ['AC','AL','AP','AM','BA','CE','DF','ES','GO','MA','MT','MS','MG','PA','PB','PR','PE','PI','RJ','RN','RS','RO','RR','SC','SP','SE','TO']; + + const terapias = ['ABA', 'Fonoaudiologia', 'Terapia Ocupacional', 'Psicologia', 'Psicopedagogia', 'Musicoterapia', 'Equoterapia', 'Nenhuma']; + + const prioridadesOpcoes = [ + 'Comunicação / Fala', + 'Comportamentos desafiadores', + 'Habilidades sociais', + 'Autonomia / Vida diária', + 'Sono', + 'Alimentação seletiva', + 'Treino de desfralde', + 'Rotina escolar', + 'Regulação emocional', + 'Estereotipias', + ]; + + const disponibilidadeOpcoes = [ + 'Manhã (8h-12h)', + 'Tarde (13h-18h)', + 'Noite (19h-21h)', + 'Sábados', + ]; + + const handleChange = (e: React.ChangeEvent) => { + setFormData({ ...formData, [e.target.name]: e.target.value }); + setError(''); + }; + + const handleCheckbox = (field: 'quaisTerapias' | 'prioridades' | 'disponibilidade', value: string) => { + const current = formData[field]; + if (current.includes(value)) { + setFormData({ ...formData, [field]: current.filter(v => v !== value) }); + } else { + setFormData({ ...formData, [field]: [...current, value] }); + } + }; + + const nextStep = () => { + // Validações por step + if (step === 1) { + if (!formData.nomeResponsavel || !formData.email || !formData.password) { + setError('Preencha todos os campos obrigatórios'); + return; + } + if (formData.password !== formData.confirmPassword) { + setError('As senhas não conferem'); + return; + } + if (formData.password.length < 6) { + setError('A senha deve ter no mínimo 6 caracteres'); + return; + } + } + + if (step < 3) setStep((step + 1) as Step); + }; + + const prevStep = () => { + if (step > 1) setStep((step - 1) as Step); + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setLoading(true); + setError(''); + + try { + const response = await fetch('/api/register', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(formData), + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || 'Erro ao cadastrar'); + } + + router.push('/cadastro/sucesso'); + } catch (err: any) { + setError(err.message); + } finally { + setLoading(false); + } + }; + + return ( +
+ {/* Header */} +
+
+ +
+ +
+ Íris + +
+
+ + {/* Progress */} +
+
+ {[1, 2, 3].map((s) => ( +
+
+ {s < step ? : s} +
+ + {s < 3 &&
} +
+ ))} +
+ + {/* Form Card */} +
+ {error && ( +
+ {error} +
+ )} + +
+ + {/* Step 1 - Responsável */} + {step === 1 && ( +
+
+
+ +
+
+

Seus Dados

+

Informações do responsável

+
+
+ +
+
+ + +
+
+ + +
+
+ +
+ + + +
+
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ )} + + {/* Step 2 - Criança */} + {step === 2 && ( +
+
+
+ +
+
+

Sobre a Criança

+

Informações do seu filho(a)

+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+ + +
+
+ + {formData.fazTerapia === 'sim' && ( +
+ +
+ {terapias.map(t => ( + + ))} +
+
+ )} +
+ )} + + {/* Step 3 - Prioridades */} + {step === 3 && ( +
+
+
+ +
+
+

Prioridades Terapêuticas

+

O que você gostaria de trabalhar?

+
+
+ +
+ +
+ {prioridadesOpcoes.map(p => ( + + ))} +
+
+ +
+ +