All work

Slotify

Appointment booking where the database guarantees one winner per slot

SoloPersonal project January 2026 – March 2026
MongoDBExpressReactNode

Decision

Confirming a booking writes a uniqueness-constrained lock for that exact vendor and time, so the database decides. If two people confirm the same slot simultaneously, both may pass the check but only one write succeeds. The second is rejected and that user is told the slot is unavailable and picks another time.

Why

Checking availability and then inserting a booking leaves a window where two requests can both pass the check, and any fix written in application code sits in the same layer as the race.

Cost

The tradeoff is a worse moment for the loser, who finds out after confirming rather than never being shown the slot, in exchange for silent double-booking being impossible. Locks release on cancellation, completion or no-show, returning the slot to the pool.

Decision

Availability is a fixed weekly template plus single-date blackouts rather than recurrence rules.

Why

Vendors describe their hours as "open Monday to Friday, nine to five, closed on these days". Full recurrence rules would have been more expressive and would have modelled how nobody actually talks.

Cost

An annual holiday must be re-entered every year, and a lunch break cannot be expressed as working hours at all, so it has to be carved out as a blackout in the middle of the day.

Decision

Everything is pinned to Africa/Addis_Ababa, with local-to-UTC conversion as a hardcoded minus three offset.

Why

That is correct only because Ethiopia is permanently UTC+3 with no daylight saving. The reverse conversion uses proper timezone handling. Stored instants are genuine UTC, and the API returns both the UTC instant and Addis wall-clock time so clients do no timezone arithmetic. It is a deliberate shortcut scoped to one market.

Cost

It breaks in any DST zone.

Stack

  • MongoDB: Unique index constraints enforce one lock per vendor slot.
  • Express: Reservation and confirmation endpoints.
  • React: Booking interface and weekly schedule configuration.
  • Node: Availability and timezone conversions.

Screens

Slotify landing page for booking local service providers
Booking landing page
Slotify how-it-works steps: discover, book, get service
How booking works
Slotify featured vendors listing with ratings and starting prices
Featured vendors
Slotify vendor dashboard showing bookings with confirmed and cancelled statuses
Vendor dashboard and booking statuses
Source on GitHub