Bops
AI 봇 팀이 업무 운영을 담당, 메일·파이프라인·청구·보고서 관리, 각각 컴퓨터·이메일·전화번호 보유, 모든 정보를 기억
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗App web de gestión de turnos para un consultorio odontológico: el paciente inicia sesión con Gmail para reservar, completa DNI + fecha de nacimiento, el turno se sincroniza con el Google Calendar del profesional y el paciente puede agregarlo al suyo (enlace Google o archivo .ics). También puede cancelar o reprogramar.
pnpm install
pnpm dev
Abrí http://localhost:3847.
| Ruta | Uso |
|---|---|
/ | Inicio |
/reservar | Pedir turno (requiere login con Gmail) |
/mis-turnos | Login Gmail: cancelar/reprogramar, agregar al calendario |
/consultorio | Agenda, pacientes y fichas (roles staff) |
/admin | Panel administrador: personal y roles (solo admin) |
Datos de ejemplo precargados: DNI 30111222, nacimiento 1990-05-12.
| Capa | Tecnología | Por qué |
|---|---|---|
| App web full-stack | Next.js (App Router) + TypeScript | Una sola base para UI y API; Route Handlers para reservas y sync |
| UI | Tailwind CSS + shadcn/ui | Formularios y paneles rápidos, accesibles y consistentes |
| Validación | Zod | Validar DNI, fechas y payloads en el servidor |
| Fechas | date-fns / date-fns-tz | Franjas horarias en America/Argentina/Buenos_Aires |
| Calendario doctor | Google Calendar API + OAuth2 (refresh token) | Insertar/actualizar/borrar eventos en la cuenta Gmail del profesional |
| Login paciente | Auth.js (NextAuth) + Google | Reserva solo con sesión Gmail; el email lo fija el servidor |
| Calendario paciente | URL “Add to Google Calendar” + .ics | Tras reservar, sumar el evento sin OAuth adicional |
| Persistencia | Postgres (publicado) / JSON local (dev) | Schema: doctors, patients, appointments, clinic_staff |
| Secretos | Variables de entorno | Credenciales Google y DATABASE_URL nunca van al cliente |
/reservar el paciente entra con Gmail (Auth.js). Sin sesión, POST /api/appointments responde 401.doctor_schedule_windows (seed lun–vie 09–12 y 15–18, turnos de 30 min).GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET y GOOGLE_REFRESH_TOKEN, se crea/actualiza/borra el evento; si no, modo mock transparente en la UI..ics./mis-turnos con sesión Gmail; cancelar/reprogramar exige el manageToken del turno./consultorio para roles staff (admin / medico / secretaria) tras login Gmail; pestañas Agenda, Pacientes (alta de ficha) y Horarios./admin solo rol admin — alta/baja de personal en clinic_staff.doctors ← appointments → patients + clinic_staff + doctor_schedule_windows (migrations/002–005).Configurá en el hosting / Cursor Secrets:
AUTH_SECRETAUTH_URL (ej. https://tu-dominio)GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET (login paciente; también sirven AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRET)GOOGLE_REFRESH_TOKEN (calendario del doctor)GOOGLE_CALENDAR_ID (opcional, default primary)DATABASE_URL (Postgres de Supabase; obligatorio en producción)NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY (client helpers)STAFF_MEDICO_EMAIL (opcional: Gmail del médico → rol medico)docs/SUPABASE.mdclinic_staff (admin seed [email protected]; paciente = sin fila)Redirect URI de login paciente: {AUTH_URL}/api/auth/callback/google
http://localhost:3847/api/auth/callback/googlehttps://odontoagenda.vercel.app/api/auth/callback/google (y AUTH_URL=https://odontoagenda.vercel.app).Sin Calendar del doctor, la reserva sigue funcionando (sync en modo demo). Sin Client ID/Secret no se puede iniciar sesión con Gmail.
https://www.googleapis.com/auth/calendar.refresh_token como secreto GOOGLE_REFRESH_TOKEN.pnpm dev — desarrollo (puerto 3847)pnpm build — build de producciónpnpm start — servir build (puerto 3847)pnpm test — tests (Vitest)pnpm seed:volume — carga pacientes/turnos demo (conserva datos reales)docs/CHANGELOG.md