AddThisFeature

Availability Calendar

Set the hours you take bookings, with one-off blocks for holidays and busy days.

involved Admin & Operations

What it adds

An owner-facing editor for weekly working hours plus date-specific overrides and blocked dates.

What your agent is told to do

5
  1. 1

    Model availability in two layers: a weekly pattern of open hours, and date-specific overrides that replace the pattern for a single day. Keep them separate rather than expanding the pattern into thousands of stored days.

  2. 2

    Generate open slots lazily for the window actually being viewed, and cache the result. Slot generation is a function of the rules, existing bookings, and a bounded date range.

  3. 3

    Store the owner's time zone on the schedule and interpret every entered hour and blocked date in that zone. Reuse the existing Time Zone-Aware Scheduling rather than converting by hand.

  4. 4

    If the app already has a Recurring Schedule Builder, extend it for the weekly pattern instead of writing a second recurrence editor, and keep the override layer as the new work.

  5. 5

    Do not silently cancel bookings when hours shrink. Show the owner exactly which existing bookings now fall outside availability and make them decide, since those bookings have already been promised to someone.

Edge cases it handles

8
  • A date-specific override must win over the weekly default for that day, including an override that closes a normally open day and one that opens a normally closed one. Resolution order has to be explicit, not incidental.
  • Hours that cross midnight, such as an evening block ending at one in the morning, belong to two calendar days. Split shifts within one day, like a morning and an afternoon block with a lunch gap, must be supported as separate ranges rather than one span.
  • Shrinking hours can leave existing bookings outside the new window. Detect the conflicts, list them, and require an explicit choice; recomputing slots without checking silently orphans real appointments.
  • Blocked dates are entered in the owner's zone. Interpreting them in the server's zone shifts a holiday block by hours and leaves part of the day bookable.
  • Generating slots for every date into the far future is unbounded work. Cap generation to the configured booking horizon and produce slots only for the range being requested.
  • An end time equal to or before the start time must be rejected at entry, not stored as a zero-length or negative window.
  • A slot duration and buffer that do not divide the open window evenly leave a remainder. Decide whether the trailing partial slot is dropped or the window is extended, and be consistent.
  • Changing the schedule's time zone reinterprets every rule. Warn the owner and show what the hours become before saving.

Definition of done

9
  • The owner sets weekly hours and date-specific overrides from one screen.
  • Date-specific overrides take precedence over the weekly pattern in both directions.
  • Midnight-crossing hours and split shifts are stored and rendered correctly.
  • Reducing availability surfaces every conflicting booking and requires an explicit decision.
  • Blocked dates apply to the owner's local day boundaries.
  • Slot generation is bounded by the booking horizon and never runs unbounded for far-future dates.
  • Invalid ranges are rejected at entry with a clear message.
  • The feature matches the existing design system.
  • No existing functionality is broken.

Related features

How it works

  1. 1

    Copy the link

    Grab the Markdown instruction URL for this feature.

  2. 2

    Give it to your AI

    Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.

  3. 3

    It inspects, then implements

    Your agent reads your existing app first, then adds the feature to fit it.

Works with your stack

These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.

Need it tighter than that? Customize the feature and tell it exactly what you're running.