Skip to main content

Overview

The Reminders API allows you to create intelligent reminders for baby care activities. Reminders can be time-based (fixed times) or event-based (relative to the last logged activity).

Reminder Rule Schema

interface ReminderRule {
  _id: Id<"reminderRules">;
  babyId: Id<"babyProfiles">;
  category: string; // "feed", "diaper", "medicine", etc.
  title: string;
  triggerType: "time_based" | "event_based";
  triggerConfig?: any;
  enabled: boolean;
  quietHoursStart?: number; // 0-23 (hour)
  quietHoursEnd?: number; // 0-23 (hour)
  snoozeOptions?: any;
  createdAt: string;
}

Trigger Types

Fire at specific times of day, regardless of activities.
{
  triggerType: "time_based",
  triggerConfig: {
    times: ["08:00", "12:00", "16:00", "20:00"] // HH:mm format
  }
}
Use cases:
  • Fixed feeding schedule
  • Medicine doses at specific times
  • Regular checkup reminders

Create Reminder

import { useMutation } from "convex/react";
import { api } from "./convex/_generated/api";

const createReminder = useMutation(api.events.createReminderRule);

await createReminder({
  babyId,
  category: "feed",
  title: "Feeding Time",
  triggerType: "time_based",
  triggerConfig: {
    times: ["07:00", "10:00", "13:00", "16:00", "19:00", "22:00"]
  },
  enabled: true,
  quietHoursStart: 22,
  quietHoursEnd: 6
});

Parameters

babyId
Id<'babyProfiles'>
required
The baby profile ID
category
string
required
Reminder category: “feed”, “diaper”, “medicine”, “sleep”, “growth”, “custom”
title
string
required
Reminder title shown in notifications
triggerType
string
required
“time_based” or “event_based”
triggerConfig
object
required
Configuration object (structure depends on triggerType)
enabled
boolean
required
Whether the reminder is active
quietHoursStart
number
Hour (0-23) when quiet hours begin. Reminders won’t fire during quiet hours.
quietHoursEnd
number
Hour (0-23) when quiet hours end
snoozeOptions
object
Snooze configuration

Response

reminderId
Id<'reminderRules'>
The newly created reminder rule ID

List Reminders

Retrieve all reminder rules for a baby.
const reminders = useQuery(api.events.listReminderRules, {
  babyId
});

// Response:
[
  {
    _id: "...",
    babyId: "...",
    category: "feed",
    title: "Feeding Time",
    triggerType: "time_based",
    triggerConfig: { times: ["08:00", "12:00", "16:00"] },
    enabled: true,
    quietHoursStart: 22,
    quietHoursEnd: 6,
    createdAt: "2024-03-05T10:00:00Z"
  }
]

Parameters

babyId
Id<'babyProfiles'>
required
The baby profile ID

Get Upcoming Reminders

Compute the next due reminders based on current time and last events.
const upcomingReminders = useQuery(api.events.computeUpcomingReminders, {
  babyId
});

// Response:
[
  {
    rule: { /* reminder rule object */ },
    dueTime: "2024-03-05T16:00:00Z",
    isOverdue: false
  }
]

Parameters

babyId
Id<'babyProfiles'>
required
The baby profile ID

Response

upcomingReminders
array
Array of computed reminder objects sorted by due time

Update Reminder

Update an existing reminder rule.
const updateReminder = useMutation(api.events.updateReminderRule);

await updateReminder({
  id: reminderId,
  enabled: false, // Disable reminder
  title: "Updated Title"
});

Parameters

id
Id<'reminderRules'>
required
The reminder rule ID to update
title
string
Updated title
triggerConfig
object
Updated trigger configuration
enabled
boolean
Enable or disable the reminder
quietHoursStart
number
Updated quiet hours start
quietHoursEnd
number
Updated quiet hours end

Delete Reminder

Delete a reminder rule permanently.
const deleteReminder = useMutation(api.events.deleteReminderRule);

await deleteReminder({
  id: reminderId
});

Parameters

id
Id<'reminderRules'>
required
The reminder rule ID to delete

Quiet Hours

Quiet hours prevent reminders from firing during sleep times.
// Example: Quiet from 10 PM to 6 AM
{
  quietHoursStart: 22, // 10 PM
  quietHoursEnd: 6     // 6 AM
}
Reminders scheduled during quiet hours will be held and delivered at the end of quiet hours.
How it works:
  • If dueTime falls between quietHoursStart and quietHoursEnd, the reminder is suppressed
  • Suppressed reminders are delivered at quietHoursEnd
  • Example: A 2 AM reminder with quiet hours 22-6 will fire at 6 AM instead

Push Notifications

Reminders are delivered via Web Push notifications when enabled.
1

Subscribe to push

Users must grant push notification permission and subscribe via the Push API.
const subscribe = useMutation(api.push.subscribe);

const subscription = await navigator.serviceWorker.ready
  .then(reg => reg.pushManager.subscribe({ /* ... */ }));

await subscribe({
  endpoint: subscription.endpoint,
  keys: {
    p256dh: /* ... */,
    auth: /* ... */
  }
});
2

Cron job checks reminders

A scheduled cron job (runs every minute) checks for due reminders and sends push notifications to subscribed devices.
3

User receives notification

The notification includes the reminder title and baby name. Clicking it opens the app.
See Push Notifications API for more details.

Best Practices

Event-based reminders adapt to your baby’s actual feeding/sleeping patterns, while time-based reminders work better for strict schedules.
Always configure quiet hours (e.g., 10 PM - 6 AM) to avoid waking notifications during night sleep.
Too many reminders create notification fatigue. Enable only reminders you’ll act on.
Stick to standard categories (feed, diaper, medicine) for better organization and filtering.
After creating a reminder, log an event and check when the next reminder fires to ensure correct timing.

Push Notifications

Set up push notification delivery

Events

Log activities that trigger reminders

Reminders Guide

Feature guide and tips

Baby Profiles

Manage baby profiles

Build docs developers (and LLMs) love