Skip to content

Repository files navigation

CuidaJá

Plataforma que conecta famílias a cuidadores e profissionais de enfermagem para plantões particulares.

Next.js React TypeScript Prisma PostgreSQL Tailwind CSS

Como funciona · Como rodar · Modelo de dados · Deploy

Sobre

Quem precisa de um cuidador ou técnico de enfermagem em casa costuma depender de indicação ou de grupos de WhatsApp. Do outro lado, o profissional espera semanas para receber e às vezes paga para ver um contato. O CuidaJá está na fase de validação: o match entre família e profissional ainda é feito à mão por um operador, e a ferramenta mede se a operação se sustenta antes de virar um app aberto ao público.

O projeto tem duas áreas:

Painel do operador, protegido por senha:

  • Cadastro de profissionais com categoria (enfermeiro, técnico, auxiliar ou cuidador), especialidades, valores por período e registro de quem verificou o COREN e quando.
  • Registro das necessidades das famílias: tarefas de cuidado, local, período, urgência, orçamento e canal de origem.
  • Match com sugestão de profissionais ativos, priorizando a mesma cidade, e acompanhamento das propostas.
  • Painel com fill rate, tempo médio até a primeira proposta e taxa de vazamento, calculados a partir dos registros.

Área do profissional, em /pro:

  • Página pública que explica a proposta: pagamento ao fim do plantão, perfil verificado, oportunidades próximas e nenhuma cobrança por contato.
  • Autocadastro com telefone e senha, incluindo um questionário curto sobre como o profissional consegue trabalho hoje.
  • Início com as propostas ativas e página de conta com o perfil.

Como funciona

flowchart LR
    F[Família] -->|pede ajuda| OP[Operador registra<br/>a necessidade]
    P[Profissional] -->|/pro/cadastro| DB[(PostgreSQL)]
    OP --> DB
    OP --> M[Match<br/>mesma cidade primeiro]
    M --> PR[Proposta]
    PR --> PNL[Painel<br/>fill rate · tempo · vazamento]
Loading

Cada proposta percorre o funil abaixo. As datas de envio, aceite e conclusão alimentam as métricas do painel.

stateDiagram-v2
    direction LR
    [*] --> Sugerido
    Sugerido --> Enviada
    Enviada --> Aceita
    Enviada --> Recusada
    Aceita --> EmAndamento
    EmAndamento --> Concluida
    Sugerido --> Cancelada
    Enviada --> Cancelada
    Aceita --> Cancelada
Loading

Como rodar

Pré-requisitos: Node.js 20 ou superior e Docker (ou um PostgreSQL próprio).

git clone https://github.com/ronnyarruda20/cuideja.git
cd cuideja
docker compose up -d          # PostgreSQL 16 na porta 5432
npm install                   # também gera o cliente do Prisma

Crie um .env na raiz:

DATABASE_URL="postgresql://cuidaja:cuidaja123@localhost:5432/cuidaja"
APP_PASSWORD="troque-esta-senha"
APP_SESSION_SECRET="<gere com o comando abaixo>"
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Aplique as migrações e suba o projeto:

npx prisma migrate dev
npm run dev
Endereço O que é
http://localhost:3000/login Entrada do operador, com a senha de APP_PASSWORD
http://localhost:3000/pro Página pública e cadastro do profissional

Comandos

Comando O que faz
npm run dev Servidor de desenvolvimento
npm run build Build de produção
npm start Aplica as migrações pendentes e sobe o build
npx prisma studio Interface visual para o banco
npx prisma migrate dev Cria e aplica migrações a partir do schema

Modelo de dados

erDiagram
    PROFISSIONAL ||--o{ PROPOSTA : recebe
    NECESSIDADE ||--o{ PROPOSTA : gera
    PROPOSTA ||--o{ AVALIACAO : tem
    PROFISSIONAL {
        string nome
        string telefone "login do autocadastro"
        string categoria
        string coren
        boolean corenVerificado
        string cidade
        int valorDiurno
        int valorNoturno
    }
    NECESSIDADE {
        string familiaNome
        string cidade
        string tarefas
        string periodo
        string urgencia
        int orcamentoEsperado
        string status
    }
    PROPOSTA {
        string status
        int valorCombinado
        datetime enviadaEm
        datetime aceitaEm
        boolean vazou
    }
    AVALIACAO {
        string de "FAMILIA ou PROFISSIONAL"
        int nota "1 a 5"
    }
Loading

Segurança e privacidade

  • O operador entra com uma senha única. A sessão é um cookie assinado com HMAC-SHA256 a partir de APP_SESSION_SECRET.
  • Profissionais têm sessão própria, com senha guardada em scrypt e sal aleatório.
  • O middleware separa três zonas: páginas públicas, área do profissional e painel do operador.
  • O banco guarda dados pessoais como telefone e COREN. Necessidades registram tarefas de cuidado, nunca diagnóstico ou histórico médico.

Estrutura

src/
├── app/
│   ├── (app)/          painel do operador: início, profissionais, necessidades
│   ├── login/          entrada do operador
│   └── pro/            página pública, cadastro, entrada, início e conta do profissional
├── components/         campos de formulário
└── lib/
    ├── auth.ts         sessão do operador
    ├── auth-pro.ts     sessão e senha do profissional
    ├── dominio.ts      categorias, tarefas, status e formatação
    └── prisma.ts       cliente Prisma com driver adapter do PostgreSQL
prisma/
├── schema.prisma
└── migrations/
proxy.ts                controle de acesso por zona

Deploy

O passo a passo para publicar no Railway, com PostgreSQL gerenciado, está em DEPLOY.md.


About

Plataforma que conecta famílias a cuidadores e profissionais de enfermagem: match, propostas e métricas. Next.js + Prisma + PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages