Case study · B2B SaaS · Desktop app
Shift Schedule 2.0
Redesigning how creator agencies manage round-the-clock chat coverage — from one-off shifts to recurring schedules with safer, more flexible editing.
- Role
- Lead product designer: research, flows, UI, specs
- Team
- Hez (design), Yanfei (PM), engineering
- Timeline
- Jun – Aug
- Toolkit
- Figma, prototypes, AI for synthesis, QA and specs
Infloww · Desktop app
Shift
Schedule 2.0
From one-off shifts to recurring schedules for 24/7 chat coverage.
Recurring shifts
3 edit scopes
Timeline
- Week 1Audit v1
Engineering pain points and early form explorations.
- Week 2Agency calls
Three agencies, ten themes, insight → decision table.
- Week 3-42.0 flows
12 flows prototyped, edge cases specced in EN + 中文.
- Week 5Dev alignment
Defaults, lazy loading, picker limits agreed with engineering.
- Late2.0.1 + Records
Navigation fix, cross-month labels, Shift records.
Goal and strategy
Strategy
Weekly scheduling, done in minutes.
- Recurring shifts
- Weeks built in minutes
- Scheduling lives in Infloww
- Reports agencies trust
Goal
Agencies rely on Infloww, not spreadsheets
Scheduling moves in-product, growing active users and retention
Designed for
Agencies with 10+ creators
Rotating chatter teams
Not in 2.0
Availability, auto-scheduling, payroll
Next: shift records feed employee pay in Back Office
Targets set with the PM
45 min10 min
To build a week
60%+
New shifts recurring
−50%
Scheduling tickets
<2s
Load, 100+ creators
Overview
The product
Infloww
An operating system for creator agencies, covering OnlyFans, Fansly, MYM and Fanvue.
The job
24/7 chat coverage
Chatters answer fans for each creator around the clock. Shift Schedule decides which employee covers which creator, and when.
The problem
One shift at a time
Version 1 created shifts one by one. With dozens of creators and several shifts a day, owners re-entered the same details every week.
Project at a glance
Timeless TalentTop Drawer ManagementHigher Sphere+ 2 more
Shift typesOne timeDailyWeekly
ActionsCreateEditDeleteDuplicate
This shiftThis and followingAll shifts
Overlapping shiftsOver 24 hoursPast shiftsPermissionsDaylight savingRemoved creator links
Who we designed for
Persona 1 · Plans the schedule
Mia, team lead
Arranges chatters across creators so every hour is covered
- 10–30 chatters
- 3–4 shifts a day
- 24/7 coverage
Goals
- No creator left without a chatter
- Build next week in minutes
- Fair, balanced rotations
Frustrations
- “+5 more” hides who is covering
- Re-entering the same week
- Clearing shifts when someone leaves
“We need to see gaps for each creator immediately, they chat 24/7.”
Persona 2 · Works the schedule
Leo, chatter
Answers fans for assigned creators, often on rotating and overnight shifts
- 1–3 creators
- Rotating hours
- Overnight shifts
Goals
- Know exactly when and for whom I work
- See changes to my shifts early
- Hours that match my pay
Frustrations
- Unclear which day an overnight shift belongs to
- Last-minute changes to a series
- Worked hours changed after the fact
Needs a clear, stable view of upcoming shifts.
Built from calls with 5 agencies of different sizes.
Old version vs. new version
The project started with a backend issue: inaccurate employee reports led the team to trace the problem back to how shifts were structured and stored.
This uncovered an opportunity to rethink the entire scheduling experience, not just fix the underlying data model.
Problems and how the design solves them
Six problems from the audit, each paired with the change that fixes it.
1Problem · Calendar
The calendar hid shifts and loaded everything at once
Multiple shift records for the same employee and creator could overlap within the same time slot, causing calendar cells to collapse into “+5 more” and making actual coverage difficult to see.
For larger agencies, loading all shifts at once also put unnecessary strain on page performance.
✓Solution
One row per creator, no duplicates, load more
Introduced shift conflict validation to prevent duplicate or overlapping assignments, keeping calendar cells clear and making team coverage easier to understand.
Reworked the calendar to load creators progressively, with a “Load more” option instead of loading every shift at once.
2Problem · Create shift
One time slot per save
Users could only add one time slot per form submission, and reopening the form triggered another data fetch. Shift times also had to be selected from preset options.
✓Solution
A whole day’s coverage in one save
Users can stack multiple time slots with “Add shift”, including overnight shifts clearly marked with “(next day)”. Clicking a creator’s cell automatically opens the form with that creator preselected.
3Problem · Shift settings
A page of templates to maintain first
Before creating shifts, admins had to set up time templates in Shift Settings. Over time, agencies accumulated dozens of nearly identical templates, such as 3:09–3:50 AM and 3:09–4:09 AM.
✓Solution
Shift settings removed
Shift Settings was eliminated. Users can enter times directly in the form, with a default 9:00 AM–5:00 PM schedule and 15-minute increments. One less page to manage, and no template clutter.
4Problem · Recurrence
Recurring shifts had no end date or editing flexibility
Users could set shifts to repeat indefinitely, with no clear way to modify or delete a single occurrence without affecting the entire series.
✓Solution
Bounded recurrence with three editing scopes
Daily and weekly recurring shifts are limited to a date range of up to two months. When editing or deleting, users can choose from three scopes: “This shift”, “This and following” or “All shifts”, with clear explanations of how each option affects past shifts.
5Problem · Data model
A plan and a work record were the same thing
Creating a shift plan automatically generated a work record. As a result, editing or deleting plans could unintentionally affect employee report data.
✓Solution
Plans and records are separate
Work records are generated one day before the scheduled shift (N−1). Deleting future shift plans no longer removes existing records, while past shifts can only be edited from the Records page.
6Problem · Shift history
History was hard to clean up
Users couldn't select or delete multiple records at once. Repeated creator chips also duplicated information already available in the dropdown filter.
✓Solution
Shift records with batch actions
A unified filter bar replaces redundant creator chips. Checkboxes enable batch deletion, while each row provides quick access to Details, Edit, and Delete. Exported files are delivered directly via email.
Listening to agencies
Before committing to a direction, the PM and I ran calls with 5 agencies of different sizes. Each one showed us how they schedule today, including the outside tools they pay for.
From insight to decision
What we heard
“We need to see gaps for each creator immediately, they chat 24/7.”
Design decision
Creator rows × day columns. An empty cell is a gap; clicking it opens the form with that creator pre-filled.
Shipped 2.0What we heard
The same 3–4 shifts repeat every day, including overnight.
Design decision
Recurring daily and weekly shifts, multiple time slots per save, overnight shifts labelled “(next day)”.
Shipped 2.0What we heard
Large teams think in groups and tags, not names.
Design decision
Filters for employee group, employee, creator tag and creator. Multi-select pickers summarise as “3 employees selected”.
Shipped 2.0What we heard
When someone leaves, all their shifts have to go.
Design decision
Scoped deletes for a series, plus batch delete in Shift records.
2.0 + RecordsWhat we heard
Day, week and month views.
Design decision
New calendar header (Today, ‹ ›, Month Year) built to take a view switch later.
Shipped 2.0.1What we heard
Chatter availability and per-creator performance.
Design decision
Logged as the next phase. Both need data the product does not collect yet.
BacklogTrade-offs we made
Each decision gave something up. These are the four that shaped 2.0 most.
Templates
Fix Shift Settings, or remove it?
ConsideredClean up templates and add search
ChoseRemove the page, type times in the form
Templates were the source of the near-duplicates. A 9–5 default with 15-minute steps covers most shifts, and one less page means less to learn.
Recurrence
Open-ended series, or a cap?
Considered“Repeat ends: Never”, like v1
ChoseUp to 2 months ahead
Agencies plan rosters week to week, and endless series bloated the calendar and reports. Less flexibility, but faster pages and data we can trust.
Data model
Plan and record as one, or separate?
ConsideredKeep one object, add locks
ChoseGenerate the record on day N−1
More engineering work up front, but editing next month’s plan can no longer change last month’s reports or pay.
Scope
Ship everything, or the core first?
ConsideredAvailability and drag-and-drop in 2.0
ChoseRecurring core, then 2.0.1
Recurrence was the biggest time sink. Shipping it alone meant agencies got value one cycle earlier, and launch feedback shaped 2.0.1 navigation and Records.
AI in my process
Using AI as a design partner, with a human in the loop
This is an operations feature with a lot of rules. I used AI where it speeds up the boring, error-prone parts of the work, and kept the judgment calls with me, the PM and engineering.
1Synthesis
Call notes to themes in an afternoon
I gave the AI the raw notes from all three agency calls and asked for clusters with supporting quotes. I then checked each cluster against the notes and merged or split them by hand on the FigJam board.
Output: 10 themes and the insight → decision table above.
2Edge-case QA
An adversarial tester for recurring logic
Recurrence breaks in strange places. I asked the AI to act as a QA engineer and attack each flow: overnight shifts, overlaps across days, daylight saving, permissions, deleted relationships.
Output: the edge-case list that became the design audit document.
·Prompt pattern I reused for every flow
# Role You are a QA engineer testing a shift scheduling calendar for agencies. # Rules Shift types: one-time | daily | weekly. Actions: create | edit | delete | duplicate. A shift may cross midnight. Agencies set a timezone. Past shifts are records. # Task For the flow "Edit recurring weekly shift", list cases where the user could lose data, double-book someone or be surprised by the result. For each: the trigger, the expected system response, the message to show.
3Shared skill
A shared Claude skill for the whole team
I turned the research data, product rules and terminology into a Claude skill written in Markdown and shared with the team. Anyone working on scheduling starts from the same context, so the AI gives answers that match how the product really works.
Each iteration adds to the skill, which makes later work faster and keeps designs more accurate over time.
Output: a shared .md skill that raises the team’s efficiency and design accuracy.
4Figma to portfolio
This page was assembled with an agent
I had Claude read the Figma file through the plugin API: it pulled annotations across seven pages, exported the frames you see here and drafted the structure. I edited the story and checked every claim.
Output: a case study built from the source file, not from memory.
The shift schedule calendar
Owners plan by creator, because a creator without a chatter is the costly failure. Each row is a creator, each column a day, and each chip an employee’s shift. Recurring shifts carry a repeat icon, so a one-off is easy to tell apart.
One time shift
Recurring shift
Past shift
- Act in placeEdit, duplicate or delete without leaving the calendar.
- Time with time zoneDate, shift hours and the agency’s UTC offset, so overnight and cross-region shifts read correctly.
- Who covers whomThe creator and the employee on one card, no need to cross-check rows.
Creating shifts in one pass
One form handles one-time and recurring shifts. “Add shift” stacks extra time slots so a whole day’s coverage goes in with one save. Two entry points: the “Create shift(s)” button opens a blank form, and clicking a creator’s cell opens it pre-filled.
Editing a series without surprises
The riskiest moment is changing a recurring series. Every edit or delete asks for a scope, and the dialog states the consequence for past shifts in plain words. Past shifts are payroll records, so they can only be changed from the Shift data page. Try it:
Edge cases, designed not discovered
Each rule below has its own screen and message in the spec, written in both languages for the engineering team.
Overlapping shiftsOver 24 hoursSales settingsPermissionsPast shiftsRemoved creator linksDaylight savingLong lists
2.0.1: fixing navigation after launch
Week arrows sat at opposite ends of the grid. Someone toggling between weeks wants both buttons under the same thumb, so I moved them together beside “Today” and the month label, the pattern people know from Google Calendar and Outlook.
Before
After
The more universal design shows the month and year at the top: Today, ‹ ›, Month / Year. It also leaves room to add a day / week / month toggle later.
From my design rationale note to the team. The month label was then added to the shared calendar component.
Roadmap: what comes next
2.0 made schedules repeatable. The next steps make them smarter, each tied to a goal we can measure.
Now · shipped
Recurring core
2.0 recurring shifts and edit scopes, then 2.0.1 navigation, cross-month labels and Shift records.
Goal: time to build a week, recurring share
Next
Availability and payroll
Chatters share when they can work before managers schedule. Shift records connect to employee pay in Back Office, so hours worked turn into wages without a spreadsheet.
Goal: fewer uncovered hours, payroll inside Infloww
Later
Performance-aware scheduling
Show how each chatter performs on each creator, then suggest who should fill an empty slot. AI drafts the week and the manager approves it.
Goal: coverage quality and revenue per chatter
Happy to walk through the prototypes and more projects in a live interview.
Email: hezhustudio@gmail.com




































