CV
Back to projects
production
fullstack

Scheduler — Shared Space Booking

Production web app for booking shared amenities and rooms: monthly calendar, whole-day reservations, multi-amenity selection, conflict prevention, and admin-controlled access — live at bookamenities.com.

Role: Full Stack Engineer — product UX, booking logic, auth API, admin workflows

React
TypeScript
Vite
Tailwind CSS
Express
Argon2

Problem

  • →Communities and property managers need a simple way to reserve shared spaces (amenities, rooms) without double-booking the same resource on the same day.

Architecture decisions

  • →Whole-day bookings only (Mon–Sun monthly view) to match real amenity usage, not hourly complexity
  • →Multi-amenity selection per reservation with per-amenity conflict checks
  • →Spanish-first booking form with validation and sensible optional fields
  • →Split persistence: server DB for identity/auth, localStorage for bookings until full backend migration

Backend design

  • →Express auth service with session cookies and Argon2 password hashing
  • →Signup creates pending users; login restricted to admin-approved active accounts
  • →Auth tables persisted in server database; booking/amenity CRUD currently client-side

API structure

  • →Session-based auth endpoints (signup, login, logout, session check)
  • →User lifecycle: pending → active (admin approval required)
  • →Future-ready separation between auth API and booking domain

Database design

  • →Server: user/auth tables (sessions, credentials, approval status)
  • →Client (today): bookings and amenities in browser localStorage
  • →Conflict model: unique (amenityId, date) enforced in application layer

Scalability

  • →Clear path to move bookings/amenities from localStorage to server persistence
  • →Conflict rules already centralized for extraction into API transactions
  • →Static frontend deployable to CDN; auth API scales independently

Authentication

  • →Express sessions with HTTP-only cookies
  • →Argon2 password hashing (no plaintext storage)
  • →Admin-gated signup: pending users cannot log in until approved

Deployment

  • →Production frontend at bookamenities.com
  • →Express auth API deployed alongside SPA
  • →Tailwind-based UI shipped as optimized Vite build

Challenges

  • →Dual persistence model (auth on server, bookings local) requires careful UX around data portability
  • →Whole-day conflict logic must stay correct when multiple amenities are selected in one form
  • →Bilingual/Spanish form copy with validation messages that remain accessible

Lessons learned

  • →Ship a focused scheduling product before adding hourly slots or payment complexity
  • →Auth and domain data can evolve on different timelines if boundaries are explicit early
  • →Admin approval workflows are cheap to build and prevent abuse on shared-space apps