尚未检测到更新。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)