Skip to content
Gurley Studios
Latest milestone: On-device AI scheduling

Schedule Creator

Plans wedding hair and makeup backward from ready time

Schedule Creator builds the getting-ready timeline for a wedding morning. I enter the time everyone has to be done and mark each artist as hair, makeup, or both. Then I add the wedding party in batches: attendants, mothers and grandmothers of the bride and groom, and a flower girl. The bride's full session ends at the ready time, and everyone else is placed backward from there, with hair before makeup.

The first version was a Python script that asked questions in the terminal and wrote a PDF. On September 16, 2025 I rebuilt it as a SwiftUI app for the Mac. My hand-written scheduling algorithm left gaps and broke on some mixes of artists and clients, so at the end of March 2026 I moved the assignment step to Apple's on-device model. The model decides which artist does each service and reads any rules I type in plain English. Regular code handles the clock math and checks the plan. When a check fails, the model gets the list of errors and tries again.

Features

  • Artists by skill

    Each artist is set to hair, makeup, or both. The scheduler only gives an artist services they can do.

  • Quick add for the wedding party

    Steppers add attendants, mothers, and grandmothers of the bride and groom in batches, each split into hair and makeup, hair only, or makeup only. The flower girl gets hair only.

  • Works backward from the ready time

    The bride's full session ends at the ready time. Everyone else is packed in before it, and anyone getting both services has hair done first.

  • Custom rules

    I type rules one per line, like keeping the bride and her mother with the same artist. Apple's on-device model uses them when it assigns artists, and the schedule tab shows its reasoning.

  • Checks and retries

    The app moves any service the model gave to an artist without that skill, fills in anything it skipped, and checks for overlaps. If problems remain, the model gets the list of errors and tries again, up to three attempts in total.

  • Drag and drop editing

    Drag an appointment to another artist or time on the timeline, or park it in the unassigned bin. The grid interval adjusts from 5 to 120 minutes.

  • Adjustable durations

    Hair and makeup start at 45 minutes each and can be set anywhere from 15 to 120. The bride's session defaults to 180 minutes and goes from 60 to 300.

  • PDF export and printing

    Exports a letter-size PDF laid out as a grid, with a column for each artist and colors for hair, makeup, and bride appointments. The same schedule can go straight to the printer.

Release history

6 milestones since September 2025.

  • Milestone
AI schedulingPython prototypePython prototype, Sep 15, 2025: Python prototypeStarted, Sep 16, 2025: Started the projectSwiftUI app, Sep 16, 2025: Rebuilt as a SwiftUI appDrag and drop, Sep 17, 2025: Drag and drop editing and saved settingsPDF grid, Mar 12, 2026: PDF export redrawn as a time gridAI scheduling, Apr 1, 2026: On-device AI schedulingSepNovJanMarMayJulSep20252026

April 2026

  1. On-device AI scheduling

    AI schedulingLatest
    • Apple's on-device model picks which artist does each service, and regular code places every appointment on the clock.
    • A custom rules box takes plain-language rules, one per line, and passes them to the model.
    • A service given to an artist without that skill moves to the least busy artist who has it. If the plan still fails its checks, the model gets the errors, with up to three attempts in total.
    • The schedule tab shows the model's reasoning and a generation log.

March 2026

  1. PDF export redrawn as a time grid

    PDF grid
    • One column per artist, with a time column down the left side.
    • A color key for hair, makeup, and bride blocks, and a header with the date, time range, and artist and client counts.
    • Long schedules continue onto more letter-size pages.

September 2025

  1. Drag and drop editing and saved settings

    Drag and drop
    • Appointments can be dragged to another artist or time on the schedule, with a bin for unassigned items.
    • The timeline interval adjusts from 5 to 120 minutes.
    • Hair, makeup, and bride durations are saved between launches.
  2. Rebuilt as a SwiftUI app

    SwiftUI app
    • Setup, Schedule, and Export tabs.
    • Artists, clients, and appointments stored with SwiftData.
    • PDF export with a timetable and a list of each artist's appointments.
  3. Started the project

    Started
    • Created the Xcode project from Apple's SwiftUI and SwiftData template.
  4. Python prototype

    • A terminal script asks for the ready time, each artist's skills, and who in the wedding party needs hair or makeup.
    • The bride gets a three-hour block ending at the ready time, and everyone else gets 45 minutes per service.
    • Writes the schedule to a PDF with ReportLab.

Roadmap

  1. Now

    On-device AI scheduling

    The Foundation Models scheduler, custom rules, and retry loop are still only in my local build.

  2. Next

    One-window layout

    Setup moves into a sidebar on the left and the schedule fills the right, so I can change inputs and regenerate without switching tabs. The sidebar sets artists and clients by count, with the bride always included.

  3. Later

    Pick the bride's artist

    Right now the bride always goes to the first artist in the list. My design notes call for letting a custom rule choose her artist.

FAQ

What does it run on?

The Mac. AI scheduling needs macOS 26 with Apple Intelligence turned on, and the app shows an error if the model isn't available.

Does it send wedding details to a server?

The assignment step uses Apple's on-device model. I haven't written any code that sends schedule data over the network.

Which artist gets the bride?

The first artist in the list. Her full session is set to end at the ready time.

Can I change the schedule after it's generated?

Yes. Drag any appointment to a different artist or time on the timeline, or change the rules and regenerate.

Can I download it?

Not yet. It only runs from my own build for now.