
Akordo
Scheduling and day-to-day operations for hospitality teams in Kosovo: one app that works on everyone's phone.
- Year
- 2026
- Role
- Design + development
- Stack
- Next.js
- React
- Tailwind CSS
- Supabase
- PostgreSQL
- Cloudflare Workers
- Illustrator
- Website
- akordoapp.com ↗
The brief
Cafés, bars, restaurants and hotels in Kosovo run their week on a printed rota, a group chat nobody can scroll back through, and a spreadsheet one person understands. It holds together until someone swaps a shift by text, or doesn't show.
Akordo replaces all three with one app for owners, managers and staff: the weekly schedule, availability, time off, swaps and open shifts, daily tasks, announcements and labor cost.
The outcome
A complete, working product: the brand, the app, the marketing site, and the back end that enforces every rule. It is live at akordoapp.com in Albanian and English, with three roles, multiple venues per business and billing by bank transfer.
Who can see and change what is enforced in the database itself, so a rule holds even if someone goes around the app.
A schedule only works if everyone sees the same one, and nobody can quietly break it.
The phone is the desk
Hospitality work happens on your feet, so every screen was designed for the phone first, including the owner's: business setup, the team, billing. A desktop gives more room but is never required.
Four tabs and one create button cover the job: Home answers "what's happening today", Schedule shows the week by day or by person, Requests collects every decision in one queue. Nothing to install; it runs in the browser on any phone.
the desk is wherever you're standing



A person can't be in two places
The hardest problem was conflicts. Every shift is checked against four things: is the person already booked, on approved time off, marked unavailable, or about to work too many days in a row.
At first all four were warnings with a "Save anyway" button, and approving a swap could override a double-booking. That was rejected: an overlap is never a judgement call. A double-booking is now refused everywhere a shift can change hands: the shift form, swaps, trades and open-shift claims. The other three stay warnings, because a manager knows things the app doesn't. They show up while the week is still a draft that staff can't see.
seven days in a row, flagged before anyone sees it


Approving time off is a scheduling decision
A request that overlaps the schedule says so in the queue. Approving it opens a sheet that lists each affected shift, and the manager picks what happens to it: find cover, which leaves the shift unassigned and can open it for staff to claim, or remove it.
There used to be a third option, keep. It was dropped because it let someone stay on the schedule during leave that had just been approved. Swaps follow the same idea: the coworker accepts first, the manager decides second, and rejecting an approved swap puts the shift back with the original person.
every shift gets an answer


Everyone pointing the same way
The mark is eight arrows turned toward the center, in the same lime green the app uses for its accents. It comes as a horizontal and a vertical logo, the mark on its own, and a blue version for light backgrounds.
The interface is dark by default, with a light theme one tap away. Headlines are Archivo ExtraBold with one word in lime italic; body text is Geist and the small labels are Geist Mono.



Cost comes from the schedule
Owners wanted to know what a week costs without keeping a second spreadsheet. Labor cost is worked out from the shifts a manager already builds; the owner only enters hourly rates.
Rates are dated, so a raise given today never changes what last month cost, and someone without a rate shows as uncosted rather than as €0. Rates are visible to the owner only. Managers can't read them, and that is enforced by the database, not by hiding a button.


