# Lessons and bookings

Status: In progress

Fanful lessons use real D1 records for offerings, availability, bookings, notes, payment state, and notification logs. The current flow supports manual meeting links and Stripe Checkout; deeper calendar and video-provider automation remains future work.

## What is usable now

- Lesson offerings, availability windows, bookings, notes, and notification logs live in D1.
- /lessons reads active offerings and open future availability, then hides empty calendars from public navigation.
- Visitors can choose a lesson, pick an open slot, and submit contact details and goals.
- When Stripe is configured, the booking route holds the slot, creates a Checkout Session, stores the session id, and sends the visitor to Stripe.
- Admins can create offerings, manage availability, update booking state, add meeting links, send schedule updates, and record lesson notes.

## Fan value

- Students can move from artist discovery to a lesson request without leaving the owned creator site.
- The booking form can collect goals and context before payment or confirmation.
- Meeting links are not exposed publicly before booking.

## Creator value

- Teaching revenue can sit beside memberships, shop, media, email, and fan records.
- Manual Zoom, Meet, or external links work today without forcing OAuth setup.
- Booking status, payment state, notes, and notification logs give support and admin work a shared record.

## Evidence in the current stack

- Lessons doc: docs/features/lessons.md documents the D1 tables, public behavior, admin behavior, Stripe integration, and provider boundaries.
- Public route: The current /lessons route reads active offerings and open future slots rather than static fixtures.
- Admin workflow: docs/features/lessons.md documents admin controls for offerings, availability, booking status, meeting links, emails, and notes.

## Boundaries

- Google Calendar, Google Meet, and Zoom automation are not required for the current model and should be added behind explicit credentials later.
- An empty calendar should stay hidden from public navigation rather than promising lessons that cannot be booked.
- Live payment collection depends on Stripe credentials and webhook handling.

## Pricing notes

- Lesson payments are fan payments, so platform fees and payment-processing fees apply when checkout is live.
- Transactional emails, reminder workers, and stored booking records can contribute to email and app usage over time.

## Related pages

- [All features](/features): Return to the Fanful feature catalog.
- [Pricing](/pricing): Review platform fees and plan capacity.
- [Lessons](/lessons): Open the current production lessons surface.
- [Markdown feature catalog](/features.md)
- [HTML feature page](/features/lessons-and-bookings)
