Agendas y disponibilidad
reservar un horario real sin dobles citas ni errores de zona horaria.
esfuerzo varios días62 apps del cementerio la necesitan
cómo se usa · 3 pasos
- Copia el archivo.Botón copiar archivo. Es un
SKILL.md: texto en Markdown con instrucciones para tu agente, ya con el encabezado que los agentes esperan. No tienes que entenderlo ni editarlo. - Guárdalo en tu carpeta de skills.Una carpeta con el nombre de la skill y dentro el archivo
SKILL.md, tal cual. En tu carpeta personal sirve para todos tus proyectos, no hace falta copiarla en cada uno. Claude Code:~/.claude/skills/agendas-y-disponibilidad/SKILL.md· Codex:~/.agents/skills/agendas-y-disponibilidad/SKILL.md· Cursor lee esas dos carpetas, no necesita otra. ¿Solo para un proyecto? La misma ruta sin~/, dentro de la carpeta del proyecto. - Pídele la app.Abre tu agente y escríbele en español qué quieres construir («una agenda para mi consultorio con recordatorios por WhatsApp»). Él carga la skill solo cuando hace falta; también puedes llamarla tú:
/agendas-y-disponibilidaden Claude Code y Cursor,$agendas-y-disponibilidaden Codex. Cuando se trabe, vuelve a en qué te vas a trabar.
archivo de la skill
---
name: agendas-y-disponibilidad
description: reservar un horario real sin dobles citas ni errores de zona horaria.
---
# Agendas y disponibilidad
Instrucciones para el agente que está construyendo esta app. Sigue esta skill cuando una
persona publique horarios, reserve citas o sincronice calendarios.
## Cuándo usar esta skill
Actívala en cuanto se cumpla cualquiera de estas condiciones:
- Clientes reservan servicios, consultas, clases, demos o recursos.
- La disponibilidad depende de horario laboral, descansos, buffers o días bloqueados.
- Dos calendarios deben evitar choques.
- Hay recordatorios, reprogramación, cancelación o citas recurrentes.
Si solo eliges una fecha sin disponibilidad limitada, usa un campo de fecha. No modeles
slots, holds y calendarios para una preferencia que nadie puede agotar.
## Cómo armarla
Usa **Postgres** para reglas y reservas, **Luxon** o `date-fns-tz` para zonas IANA y
**Google Calendar API** solo después de que la agenda interna funcione sola.
1. Guarda instantes confirmados en UTC y la zona IANA original, como
`America/Mexico_City`. Expresa horarios semanales en la zona del negocio, no como UTC.
2. Modela disponibilidad como reglas más excepciones: horario semanal, feriados, bloqueos,
buffers, anticipación mínima, horizonte máximo, duración, capacidad y recursos.
3. Calcula slots en el servidor para un rango acotado. Convierte a la zona de quien mira
solo al presentar y muestra ambas zonas cuando organizador e invitado difieren.
4. Al seleccionar, crea un hold corto con expiración. Confirma dentro de una transacción
con una restricción que impida traslape; volver a consultar antes de insertar no basta.
5. Usa una llave idempotente al confirmar. Un doble clic o reintento debe devolver la
misma reserva, no ocupar dos espacios.
6. Trata calendario externo como integración, no como base principal: guarda id externo,
`etag` o token de sincronización, estado y última sincronización. Reconcilia cambios.
7. Genera invitación ICS y recordatorios desde una cola. Cancelar o reprogramar crea un
historial y actualiza todos los canales, no sobrescribe el pasado.
8. Ofrece enlaces firmados de duración limitada para cancelar o mover una cita sin crear
cuenta, si el riesgo del servicio lo permite.
## En qué te vas a trabar
- **El horario de verano rompe offsets fijos.** Prueba cambios DST aunque tu ciudad no
cambie reloj; el cliente, profesional o calendario conectado puede vivir en otra zona.
- **La concurrencia crea dobles reservas.** Dos confirmaciones simultáneas deben competir
en la base de datos, no en memoria ni en botones deshabilitados.
- **Google y Microsoft envían cambios repetidos y parciales.** Usa tokens incrementales,
webhooks idempotentes y una reconciliación periódica.
- **Recordatorios cuestan por canal.** Calcula correo, WhatsApp o SMS con la tarifa vigente
y permite que el negocio elija cuáles justifican el margen.
## Qué NO hacer
- No guardes solo `-06:00`; el offset no contiene reglas futuras de zona horaria.
- No crees todos los slots del año como filas por adelantado.
- No prometas sincronización bidireccional si solo importas eventos una vez.
- No borres citas canceladas ni liberes un hold sin verificar quién lo posee.
## Checklist
- [ ] Reglas, excepciones, buffers, capacidad y recursos producen los slots esperados.
- [ ] UTC y zona IANA sobreviven cambios DST y reservas entre países.
- [ ] Dos confirmaciones simultáneas no crean traslape.
- [ ] Holds vencen solos y confirmar dos veces devuelve la misma reserva.
- [ ] Cancelación y reprogramación conservan historial y actualizan invitaciones.
- [ ] La sincronización externa tolera duplicados, expiración de token y cambios remotos.
- [ ] Recordatorios respetan zona, horario silencioso, consentimiento y presupuesto.
cópialo en tu agente de código: Claude Code, Codex, Cursor · pégalo como su archivo de skill y sigue las instrucciones tal cual.