LO-FI WIREFRAME · not final UI
▣ aumik scheduling platform provider customer embed product context

One scheduling engine. Every product.

Booking and calendar built once in aumik-agents, reused by every brand through shared widgets and a self-service portal. No per-product booking code, no third-party scheduler.

See the provider side → Try a booking

The modules

📅 AvailabilityWorking hours, buffers, notice, time off — per resource.
🎟 BookingSlot picking + atomic, conflict-guarded book. No double-booking.
🗓 CalendarDay / week / month / agenda views of bookings and events.
📌 EventsCalendar entries that aren't bookings — talks, meetups, holds.
🔔 NotificationsWhatsApp · SMS · email via Novu. Reminders + confirmations.
🔗 PublishOne-way .ics feeds + CalDAV. Read-only egress.

Same modules, every product

ProductResourceWhat gets booked
aumik-astroReaderA reading session
aumik-cleaningCrewA cleaning job
aumik-conferencesRoom / trackA talk slot (event)
aumik-hospitalitySuiteA stay
aumik-doohScreenDayparting / ad slot

Switch the product context (top-right) to see the same screens re-skinned per brand.

Where it lives

LayerHome
Engine (availability · book · events)aumik-agents · Postgres + Hono
Embeddable UI@aumik/widgets · <BookingScheduler/>
Self-service shell@aumik/portal · My bookings
NotificationsNovu (infra#19)
Publish feeds.ics + CalDAV (Radicale, infra#16)

Tracking: Scheduling Platform epic → booking child infra#18.

Availability

Provider portal · your open hours feed the customer booking calendar

Weekly hours · ET · tap a cell to toggle

open blocked

Booking rules

Session length
Buffer between
Min notice
Max bookings / day

Block time off

+ Add time off
Jul 4 — holiday
Save availability
Open hours minus existing bookings, time off, buffers and min-notice = the bookable slots customers see. Computed server-side so two people can't grab the same slot.

Calendar

Provider portal · bookings and events together · one source of truth

Jun 22 – 28, 2026 + New event
booking event time off

Events

Provider portal · calendar entries that aren't bookings — talks, meetups, holds

Your events

Community Q&A (livestream)
Wed Jun 24 · all day · public
Edit
Team sync
Mon Jun 29 · 16:00–16:30 · private
Edit

New event

Title
Date
Type
Notify
Add to calendar

Events share the calendar with bookings but don't consume booking slots unless you mark them busy.

Publish & subscribe

Provider portal · let your bookings show up in the calendar apps you already use

Your calendar feed

A private, read-only link. Subscribe to it in Apple Calendar, Google Calendar, or Outlook and your bookings + events appear automatically.

webcal://cal.e4keih.uncld.dev/r/priya-r/feed.ics
Copy link Reset link

CalDAV (advanced)

Point a CalDAV client at the box to subscribe per-calendar.

Server  cal.e4keih.uncld.dev
User    priya-r
Calendar  bookings
One-way only. The feed publishes out of Aumik — it never pulls events back in. Bookings stay owned by the booking engine in aumik-agents (the conflict guard lives there); CalDAV/.ics is read-only egress (Radicale, infra#16). No two-way Google/Outlook sync — that was an explicit decision (infra#18).

Book a time

aumik-astro · with Priya R. (Vedic reader)

Pick a date

Outlined = open. Times shown in your timezone (ET).

Available times · Mon Jun 22

Slots come from the reader's open hours, minus what's already booked, time off, the 15-min buffer, and 12-hour min-notice.

Session

Continue → Pick a slot to continue

You're booked ✓

A confirmation just went out by WhatsApp + email. We'll remind you 24h and 2h before.

Your booking

WhenMon Jun 22, 2026 · 2:00–2:45pm ET
WithReader
HowVideo call
RefBKG-4QF29

What happens next

Now — confirmation sent (WhatsApp + email)
24h before — reminder
2h before — reminder + join link

All via Novu — honors your channel preferences.

My bookings

aumik-astro · signed in as Suresh S.

Upcoming

Reading with Priya R.
Mon Jun 22 · 2:00pm ET · Video
RescheduleCancel
Reading with Arjun M.
Fri Jun 26 · 11:00am ET · Phone
RescheduleCancel

Past

Reading with Priya R.
Jun 8 · 2:00pm · Video
Book againLeave a review

Same “My bookings” shell (@aumik/portal) for every product — only the labels change.

Embed the scheduler

Any product drops in one widget — it talks to the shared engine

One widget, configured per brand

<AumikWidgetProvider
  agentsBaseUrl="https://agents.aumik.co"
  brand="astro">

  <BookingScheduler resource="priya-r" />

</AumikWidgetProvider>

Lives in @aumik/widgets. The same component renders the date picker + slots you saw on the customer side.

Where it's used

astroreader profile → book
cleaningservice page → book a crew
hospitalitysuite page → check availability
chat / agentLevel-3 auto-book in a conversation

API contract

What the engine exposes · multi-tenant by {resource}

Scheduling endpoints (aumik-agents)

GET   /api/scheduling/{resource}/availability?from&to
POST  /api/scheduling/{resource}/book
PATCH /api/scheduling/{resource}/bookings/{id}   # reschedule
DEL   /api/scheduling/{resource}/bookings/{id}   # cancel
GET   /api/scheduling/{resource}/events
GET   /api/scheduling/{resource}/feed.ics        # publish (read-only)

Data model

resources            slug, product, timezone, default_hours, buffer
availability_rules   weekday, start, end   (+ availability_overrides)
bookings             resource, tstzrange, status, contact
                     └─ EXCLUDE USING gist (resource, tstzrange)  ← no double-book
events               resource, range, all_day, visibility, busy?
notification_prefs   per-user channel prefs (Novu)

Times stored UTC; converted per resource timezone at query time (DST-safe).