Inspiration

Restaurants lose shifts every morning when someone calls in sick. Managers spend the first hour on the phone, and workers who pick up a shift often wait weeks to be paid.

What it does

ShiftCover Pay fills a shift in minutes. The manager types what happened ("Maria called in sick, need a line cook 7 to 3"). Gemini reads the note into a structured shift, and the manager confirms it. PayPal holds the most the shift can cost. Offers go out in three waves, with the rate rising toward the cap only if nobody claims. The first worker to claim gets the shift. After the shift, the manager approves the hours, PayPal captures only what was worked plus the fee, and the worker is paid through PayPal Payouts.

How we built it

Next.js and TypeScript on Render, with Supabase Postgres. PayPal Orders v2 (authorize, partial capture), Payouts, and signed webhooks. Gemini (gemini-3.5-flash-lite) for intake and for explaining the match ranking. Bryntum Scheduler for the roster. Every money amount and eligibility rule is computed in code, and retries are idempotent, so a retry never moves money twice.

Challenges

Keeping the AI out of the money path. Making offer claims atomic under 20 concurrent claims. Recovering a payout when PayPal returns a duplicate-batch error after a lost response.

Accomplishments

A full sandbox run with real PayPal calls: a $21.00 hold, a $12.00 partial capture, and a $10.00 payout, with repeated requests changing nothing.

What we learned

The hold-then-capture model is what lets a manager commit to a shift without risking the money in advance.

What's next

Real email and WhatsApp sharing, PayPal marketplace onboarding for workers, and overtime and tax handling.

Built With

Share this project:

Updates

Submission history