Dr. Schedule é um Software como Serviço (SaaS) robusto e intuitivo, projetado para simplificar e otimizar o gerenciamento de consultas em clínicas médicas e consultórios.
O Dr. Schedule visa resolver a complexidade no agendamento e gerenciamento de pacientes e médicos, oferecendo uma plataforma centralizada que facilita a organização diária de uma clínica. Com ele, é possível gerenciar horários, informações de pacientes, disponibilidade médica e muito mais, tudo de forma eficiente e integrada.
- Gerenciamento Completo (CRUD):
- Médicos
- Pacientes
- Agendamentos
- Dashboard Interativo: Visualização de dados e métricas importantes da clínica.
- Sistema de Autenticação:
- Criação de conta e login seguros.
- Login social com Google (OAuth).
- Integração com Stripe: Gerenciamento de assinaturas e pagamentos para o SaaS.
- Interface Moderna e Responsiva.
Este projeto foi construído utilizando um stack moderno e eficiente:
- Frontend:
- Next.js (v15.3.2) - Framework React para produção.
- React (v19.0.0) - Biblioteca para construção de interfaces de usuário.
- Tailwind CSS (v4) - Framework CSS utility-first.
- Radix UI - Primitivas de UI acessíveis e não estilizadas.
- Lucide React - Ícones SVG.
- Shadcn/ui (implícito pelo uso de Radix e convenções)
- TanStack Query (React Query) - Gerenciamento de estado de servidor e data fetching.
- TanStack Table (React Table) - Tabelas agnósticas de UI.
- Recharts - Biblioteca de gráficos para React.
- React Hook Form - Gerenciamento de formulários.
- Zod - Validação de esquemas.
- Sonner - Notificações toast.
date-fns/dayjs- Manipulação de datas.next-themes- Gerenciamento de temas (dark/light mode).
- Backend & Base de Dados:
- Next.js API Routes
- Drizzle ORM - ORM TypeScript.
- PostgreSQL - Banco de dados relacional (recomendado).
- Better Auth - Biblioteca de autenticação.
- Next Safe Action - Para Server Actions seguras.
- Pagamentos:
- Stripe - Plataforma de pagamentos online.
- Ferramentas de Desenvolvimento:
- TypeScript
- ESLint
- Prettier
drizzle-kit- Ferramenta para migrações com Drizzle.
Siga estas instruções para configurar e rodar o projeto em seu ambiente local.
- Node.js (versão LTS recomendada, ex: v20 ou superior)
- npm ou yarn ou pnpm
- Uma instância de banco de dados PostgreSQL rodando.
- Git
-
Clone o repositório:
git clone git@github.com:Gildaciolopes/doctor-schedule.git cd doctor-schedule -
Instale as dependências:
npm install # ou # yarn install # ou # pnpm install
-
Configure as Variáveis de Ambiente:
- Copie o arquivo
.env.examplepara um novo arquivo chamado.env:cp .env.example .env
- Preencha as variáveis no arquivo
.envcom suas respectivas chaves e URLs. Veja a seção Variáveis de Ambiente para mais detalhes.
- Copie o arquivo
-
Configure o Banco de Dados (Drizzle ORM):
- Certifique-se que sua string de conexão
DATABASE_URLno arquivo.envestá correta e apontando para seu banco de dados PostgreSQL. - Execute as migrações do Drizzle para criar o schema no seu banco de dados:
Nota: Verifique a documentação do Drizzle para os comandos exatos de geração e aplicação de migrações (
npx drizzle-kit generate # Para gerar os arquivos de migração (se necessário ao modificar o schema) npx drizzle-kit migrate # Para aplicar as migrações ao banco de dados
pushpara desenvolvimento rápido ougenerate+migratepara produção). Você pode precisar dedrizzle-kit studiopara visualizar seu schema. Para um setup inicial, você pode precisar de um comando comonpx drizzle-kit push.
- Certifique-se que sua string de conexão
-
Rode o servidor de desenvolvimento:
npm run dev # ou # yarn dev # ou # pnpm dev
Abra http://localhost:3000 no seu navegador para ver o resultado.
As seguintes variáveis de ambiente precisam ser configuradas no seu arquivo .env para o correto funcionamento da aplicação:
# URL da sua base de dados PostgreSQL
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
# Segredos para a autenticação com Better Auth
BETTER_AUTH_SECRET="[SEU_SEGREDO_COMPLEXO_PARA_BETTER_AUTH]"
BETTER_AUTH_URL="http://localhost:3000" # Ou a URL de produção
# Credenciais do Google OAuth para login social
GOOGLE_CLIENT_ID="[SEU_GOOGLE_CLIENT_ID]"
GOOGLE_CLIENT_SECRET="[SEU_GOOGLE_CLIENT_SECRET]"
# Chaves do Stripe
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="[SUA_CHAVE_PUBLICAVEL_STRIPE]"
STRIPE_SECRET_KEY="[SUA_CHAVE_SECRETA_STRIPE]"
STRIPE_ESSENTIAL_PLAN_PRICE_ID="[ID_DO_PRECO_DO_PLANO_ESSENCIAL_NO_STRIPE]"
STRIPE_WEBHOOK_SECRET="[SEU_WEBHOOK]" # Use `npm run stripe:listen:dev` para obter um durante o desenvolvimento
NEXT_PUBLIC_STRIPE_CUSTOMER_PORTAL_URL="[URL_DO_SEU_PORTAL_DO_CLIENTE_STRIPE]"
# URL pública da sua aplicação
NEXT_PUBLIC_APP_URL="http://localhost:3000" # Ou a URL de produçãoImportante: Nunca exponha suas chaves secretas e credenciais em repositórios públicos. O arquivo .env deve ser incluído no seu .gitignore.
Após a instalação e configuração completa:
- Acesse a aplicação no seu navegador (normalmente
http://localhost:3000). - Crie uma conta ou faça login (inclusive com Google).
- Realize a assinatura de algum plano para usufruir do sistema. (utilize modo de testes da stripe para prosseguir em desenvolvimento).
- Crie sua própria clínica no sistema.
- Explore as funcionalidades de gerenciamento de médicos, pacientes e agendamentos.
- Acesse o dashboard para visualizar informações relevantes.
Para testar a integração com Stripe em desenvolvimento, você pode usar o comando:
npm run stripe:listen:devIsso irá encaminhar os webhooks do Stripe para sua aplicação local.
Contribuições são o que fazem a comunidade open source um lugar incrível para aprender, inspirar e criar. Qualquer contribuição que você fizer será muito bem-vinda.
Se você tem alguma sugestão para melhorar este projeto, por favor, faça um fork do repositório e crie um pull request. Você também pode simplesmente abrir uma issue com a tag "enhancement". Não se esqueça de dar uma estrela ao projeto! Obrigado novamente! ⭐
- Faça um Fork do projeto (
https://github.com/Gildaciolopes/doctor-schedule/fork) - Crie sua Feature Branch (
git checkout -b feature/AmazingFeature) - Adicione suas mudanças (
git add .) - Comite suas mudanças (
git commit -m 'Add some AmazingFeature') - Faça o Push para a Branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
As Pull Requests serão revisadas e, se alinhadas com os objetivos do projeto, poderão ser incorporadas.
Gildácio Lopes - contato.gildaciolopes@gmail.com
Deploy do projeto: https://doctor-schedule-oz7u.vercel.app