The goal
Move scheduling, attendance, payroll data, quotes and invoices of a waitstaff company out of spreadsheets and an old program into one system the office and the staff both use.
The solution
A Vue 3 single-page app in Hebrew RTL over a FastAPI backend and MongoDB. The office plans events and drags workers into shifts; the scheduling rules (a minor without a valid medical approval, overlapping shifts, a full event) are enforced on the server and the screen only shows the reason it returns. Israeli holidays show in the planner and drive pay rules for Saturday, holiday and night work. After an event, the shift lead fills a digital report on the phone: attendance, actual hours and the customer's signature. The system also produces payroll output as Excel, quotes the customer can sign online, signed PDFs, and sends invoices toward an accounting program. Worker replies on WhatsApp update the schedule. The Israeli ID number is encrypted in its field, and every medical document access is logged.
Demo video
Highlights
- Shift rules enforced in one place on the server
- Event report and customer signature from the phone
The challenge
Scheduling rules written only in the screen can be bypassed and drift between views.
Kept every rule as a pure server function with tests, so the screen only displays the reason the server returns.
What was delivered
- Scheduling and events screens
- Phone event report with signature
- Payroll output, quotes and invoices
Results
Hebrew RTL
Layout
Sat / holiday / night
Pay rules
What it taught me
- Rules that cost money belong on the server, with tests, not in the screen







