Files
Salon_Assistant/skills/daily-board/SKILL.md
T
Ty 15f6a6c713 Implement S6 doctor and A1 daily-board with fixtures.
Add operator health checks (make doctor) wrapping platform CLIs, and the fixtures-only daily board skill library with unit tests (make verify).
2026-07-27 12:41:40 -07:00

2.8 KiB

name, description, domain
name description domain
daily-board Today's salon board: appointments, gaps, and confirmation flags operations

daily-board

Today's salon board: appointments, gaps, and confirmation flags.

Description

Builds a structured daily board from scheduling data showing:

  • Appointments — time, client, service, staff, status
  • Gaps — unbooked slots ≥30 minutes between appointments
  • Confirmation flags — appointments that still need client confirmation
  • Summary — total booked time, gap time, appointment count

All data is labeled with its source. When using fixtures, output is clearly marked 📋 FIXTURE DATA so the owner never sees silent fake live data.

Data sources

Source Status Label in output
Fixtures (JSON) Implemented 📋 FIXTURE DATA
Vagaro Not yet 📅 LIVE DATA (future)
Square Not yet 📅 LIVE DATA (future)

Constraints

  • Deterministic facts from fixtures; no model inference for board data.
  • No silent send or publish.
  • Cancelled appointments are excluded from the board view.
  • Gaps under 30 minutes are not shown (too short for a meaningful slot).
  • Output always labels fixture/offline — never silent fake live data.

Usage

CLI

# Build board from fixtures (default demo data)
python skills/daily-board/scripts/build_board.py

# Build board for a specific fixture file
python skills/daily-board/scripts/build_board.py \
  --fixtures data/fixtures/scheduling/claire_bennett_2026-07-28.json

# Output as JSON
python skills/daily-board/scripts/build_board.py --format json

# Specify date and salon name explicitly
python skills/daily-board/scripts/build_board.py \
  --date 2026-07-28 --salon "Lumina Hair Studio & Spa"

Programmatic

from lumina_skills.providers.scheduling.fixture_provider import load_fixtures
from lumina_skills.board_builder import build_board, format_board_text

appointments = load_fixtures("data/fixtures/scheduling/claire_bennett_2026-07-28.json")
board = build_board(appointments, date="2026-07-28", salon_name="Lumina Hair Studio & Spa")
print(format_board_text(board))

Output format

Text (default)

Structured text with sections for appointments, gaps, confirmation flags, and summary.

JSON

{
  "date": "2026-07-28",
  "salon_name": "Lumina Hair Studio & Spa",
  "source": "fixtures",
  "is_offline": true,
  "appointments": [...],
  "gaps": [...],
  "needs_confirmation": [...],
  "total_booked_minutes": 420,
  "total_gap_minutes": 120
}

Design references