Skip to main content

Reminders Spec

Purpose

Reminders are the org surface for time-bound personal follow-through and targeted internal team communication. They are durable organization records, not browser-local calendar events, project tasks, notes, or client-visible portal content.

Product Decisions

  • Reminders are a shell utility beside Calendar and Notes, with a dedicated /reminders workspace.
  • A reminder is visible to its creator and assigned team members. Personal reminders assign the creator automatically.
  • Reminders may link to client-root records without taking ownership of those records. Supported links include clients, projects, time entries, contracts, quotes, invoices, catalog products, notes, files, and resource links.
  • The reminder stores a stable link snapshot (type, id, title, href) plus optional client/project context. The linked feature remains the source of truth.
  • Client and project are the reminder's primary structured context. Project choices are scoped to the selected client, and changing client clears incompatible project context.
  • New reminders inherit an explicit client/project entry-point context first, then the active client focus when no explicit context was supplied. A persisted dirty draft wins when a user resumes it.
  • Other linked records remain optional related items behind a secondary picker.
  • Due reminders create in-app notification-inbox entries for the creator and assignees. Scheduled delivery is revision-guarded so an obsolete job cannot fire after an edit, completion, reopen, or snooze.
  • Active reminders project into Today and Calendar. Completing a reminder removes it from active projections while preserving it in Completed.
  • The topbar uses a compact, non-blocking reminder quick view. Selecting a reminder only opens that quick view; it does not create a working tab. Pinning is the explicit action that adds a reminder to Working, while Open reminder opens the full reminder drawer in the /reminders workspace through the query-backed reminderId route state.
  • Editing remains a deliberate dialog action from either the quick view or detail drawer. Delete is reserved for the detail drawer.

V1 Lifecycle

  1. Create a personal or team reminder.
  2. Choose date, optional time/all-day behavior, priority, details, and assignees.
  3. Optionally choose client then project context. Client/project detail actions prefill their owning context, and client focus supplies the default for a generic create action.
  4. Optionally add notes, files, time entries, commercial records, or resources as related items.
  5. Receive an in-app due notification.
  6. Inspect and complete/reopen from the shell, or open the full reminder drawer for context, snooze, editing, and deletion without leaving the workspace.

Boundaries

  • Reminders are internal-only in v1.
  • Recurrence and outbound email delivery are later extensions; neither should be simulated with duplicate records or billing-notification preferences.
  • Reminder links do not create new ownership relationships between business records.
  • Reminder writes re-authorize and canonicalize client/project context instead of trusting a client-provided link snapshot.
  • Reminder detail reads use the same creator-or-assignee visibility rule. Edit and delete actions are separately capability-gated.
  • The canonical reminder detail location is /reminders?reminderId=…. Legacy /reminders/[reminderId] links redirect into that drawer so saved links and previously delivered notifications remain valid.
  • Calendar remains a projection surface. Editing a reminder happens in the reminder editor, not the calendar-event editor.

Implementation Surface

  • Schema and functions: packages/backend/convex/org/reminders.ts
  • Org API adapter: apps/app/src/app/[locale]/_lib/convex/api/org/reminders.ts
  • Workspace and dialogs: apps/app/src/app/[locale]/org/(dashboard)/reminders/*
  • Projections: packages/backend/convex/org/today.ts and the org calendar route
  • Shell entry points: create registry, topbar reminder quick view, utility navigation, launchpad, dock, and hotkeys

Follow-up

  • Extend the contextual “New reminder” action to other record surfaces only where their existing action menu naturally owns it.
  • Add recurrence only after recurrence editing, series completion, and timezone behavior are specified together.
  • Consider email delivery as a separate notification-policy decision with per-user preferences and localized delivery content.