Inspiration A last-minute absence creates an immediate problem for a small hospitality team. A manager needs cover quickly, but the first person who looks free may lack the required skill, already have an overlapping shift, or exceed their configured weekly-hour limit. We wanted to improve this familiar workflow without rebuilding the whole roster or hiding the decision behind a black box.

What it does ShiftFix accepts an employee's absence message and uses AI to structure the employee, date, and time. The manager reviews those details before any scheduling decision is made. The live scheduling service then searches for a direct replacement while checking availability, role skills, overlapping assignments, weekly-hour limits, staffing coverage, and the reported absence. It shows the proposed change and before-and-after hours, and the roster changes only after approval.

The demo includes three outcomes: a normal replacement, a conflict that excludes the first candidate, and a no-cover case that clearly explains why no valid direct replacement was found while the rest of the roster stays fixed.

How we built it The interface is built with React, TypeScript, Vite, and CSS and is deployed on Vercel. A FastAPI service on Render validates requests and coordinates the backend. OpenAI's Responses API interprets natural-language absence messages. Google OR-Tools CP-SAT selects a feasible direct replacement, and deterministic business rules validate the result again before it reaches the manager. Shared fixtures keep the frontend examples, API contract, and backend tests aligned.

Challenges we ran into The main challenge was separating AI interpretation from scheduling truth. Natural language is useful for capturing the manager's message, but a model should not decide whether a roster is feasible. We also had to keep the frontend and backend contract synchronized, handle a sleeping hosted backend, prevent stale recommendations after edited inputs, and make failure states honest instead of silently falling back to sample data.

Accomplishments that we're proud of We delivered a public end-to-end Connected mode rather than a static mock-up. The manager can review the parsed absence, receive a real solver-backed recommendation, inspect six independent checks, and approve the change in the browser. The conflict and no-cover scenarios demonstrate that the service reacts to constraints instead of always returning the same person. Our final automated suite passes 41 backend tests and 19 frontend tests, together with the production frontend build.

What we learned We learned that AI is most useful here when it improves the human input step while deterministic software remains responsible for operational constraints. We also learned to treat the API contract and shared fixtures as team coordination tools, not just documentation, and to test negative outcomes as carefully as the happy path.

What's next The current prototype focuses on one café and one direct replacement. Next steps would include authentication, persistent rosters and approvals, employee notifications, integrations with workforce-management tools, and carefully designed multi-shift re-optimisation. A real deployment would also need business validation and jurisdiction-specific employment rules.

Built With

Share this project:

Updates

Submission history