尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
UNIVERZOO · Sistema de Recordatorios de Vacunación Sistema web para la clínica veterinaria UNIVERZOO: registra propietarios, mascotas y vacunaciones, y envía recordatorios automáticos por WhatsApp usando una fecha de próxima vacunación ingresada manualmente (nunca calculada por el sistema).檢視完整 README ↗
Sistema web para la clínica veterinaria UNIVERZOO: registra propietarios, mascotas y vacunaciones, y envía recordatorios automáticos por WhatsApp usando una fecha de próxima vacunación ingresada manualmente (nunca calculada por el sistema).
Decisiones tomadas y por qué:
@prisma/adapter-neon + ws, configurado en src/lib/db.ts) para poder
usar transacciones — la variante HTTP del driver de Neon no las soporta y
algunas operaciones de Prisma (como upsert) las requieren internamente.
El CLI de Prisma (migraciones) usa la conexión directa
(DATABASE_URL_UNPOOLED) en vez de la pooled, porque las operaciones de
esquema no son compatibles con el pooler (pgbouncer).next-auth
(todavía en beta) para no depender de una librería que podría no estar
alineada con la versión de Next. La sesión es un JWT firmado (jose) en una
cookie httpOnly + secure en producción, verificado en src/proxy.ts
(el archivo que reemplazó a middleware.ts desde Next.js 16).proxy.ts) como dentro de cada Server Action
(defensa en profundidad).scripts/run-reminders.ts),
pensado para ejecutarse vía cron / Programador de tareas de Windows, no
depende de que alguien tenga el navegador abierto. También existe un Route
Handler (/api/cron/reminders, protegido con CRON_SECRET) para
integrarlo con schedulers HTTP externos si se despliega en un host serverless.fetch, sin
automatización no oficial ni WhatsApp Web. Las credenciales viven únicamente
en variables de entorno del servidor (src/lib/whatsapp.ts), nunca en el
frontend.#F78620 / marrón
#4D403A, extraída del logo) definida como tokens en src/app/globals.css.npm install
npm run db:migrate # aplica prisma/migrations contra DATABASE_URL_UNPOOLED
npm run db:seed # usuario admin + catálogo de vacunas + plantillas
npm run dev
Por defecto el seed crea el usuario [email protected] / Univerzoo2026!
(cambiala apenas entres). Podés fijar tus propias credenciales iniciales con
SEED_ADMIN_EMAIL y SEED_ADMIN_PASSWORD. Para incluir además datos de
ejemplo (propietario/mascota ficticios, solo útil en desarrollo local), corré
el seed con SEED_DEMO_DATA=true.
El proyecto está desplegado en Vercel, con Postgres provisto por la
integración Neon del propio dashboard de Vercel (Storage → Create Database).
Pasos completos en DEPLOY.md.
Cambiar esta contraseña / crear usuarios reales antes de usar en producción
desde Usuarios (solo Administrador).
.env)Ver .env.example. Las más importantes:
DATABASE_URL: cadena de conexión (file:./dev.db en desarrollo).AUTH_SECRET: secreto para firmar las sesiones. Cambiar en producción.CRON_SECRET: secreto para invocar /api/cron/reminders por HTTP.WHATSAPP_ACCESS_TOKEN, WHATSAPP_PHONE_NUMBER_ID,
WHATSAPP_BUSINESS_ACCOUNT_ID, WHATSAPP_VERIFY_TOKEN: credenciales de
WhatsApp Business Platform (Meta). Sin estas variables, el sistema sigue
funcionando: genera y registra los recordatorios pendientes, pero cada envío
queda marcado como Error: Integración de WhatsApp no configurada, visible
en Mensajes.npm run reminders:run
Programarlo en el sistema operativo:
npm.cmd con argumentos run reminders:run, directorio de inicio la carpeta
del proyecto, frecuencia diaria.0 8 * * * cd /ruta/al/proyecto && npm run reminders:run.POST /api/cron/reminders con header Authorization: Bearer <CRON_SECRET>.Las plantillas (Configuración → Plantillas de WhatsApp) definen el texto
interno (para el registro/auditoría) y el nombre exacto de la plantilla
aprobada en WhatsApp Business Manager — WhatsApp exige plantillas
pre-aprobadas para mensajes iniciados por el negocio, así que ese nombre debe
coincidir con lo dado de alta en Meta.
Funciones explícitamente fuera del MVP (dejadas preparadas en la arquitectura para el futuro, sin construir): agenda de turnos, historia clínica, facturación, farmacia, portal del propietario, chat automatizado, múltiples sucursales.
prisma/schema.prisma Modelo de datos completo (11 tablas)
prisma/seed.ts Datos iniciales (admin, catálogo, ejemplo)
scripts/run-reminders.ts Motor de recordatorios como proceso standalone
src/lib/ Lógica de negocio (auth, whatsapp, reminders, status...)
src/app/(app)/ Páginas protegidas (dashboard, propietarios, mascotas...)
src/app/login/ Login (público)
src/app/api/ Webhook de WhatsApp, cron HTTP, exportación CSV
src/proxy.ts Protección de rutas (reemplaza a middleware.ts en Next 16)