Decisions and Assumptions - amalps565/Smart-Workspace-Seating-Chart GitHub Wiki

Decisions and Assumptions

Decisions

Topic Decision Why
Backend Java 21, Spring Boot 4 Mature transaction, locking, and WebSocket support
Frontend React + TypeScript + Vite Fine-grained rendering control for a live grid
Database PostgreSQL via Docker Compose Real row locking (SELECT ... FOR UPDATE) and constraints, which the race fix depends on
Integration tests Testcontainers PostgreSQL, not H2 H2's locking differs from Postgres, so race tests against it prove little
Booking period Whole day Simplest conflict model; one booking per desk per day
Bookings per employee At most one per day Enforced by a unique constraint
Neighbours Configurable per floor: ORTHOGONAL (default) or ALL Different floors can need different spacing
Sign-in Username and password → JWT, with seeded demo users Per-user security without an external identity provider
Live updates STOMP over WebSocket, per-desk updates with a version Small messages, ordered per desk, easy to resync

Assumptions

These were assumed to keep the scope clear. Change them here and in the repo CLAUDE.md if they turn out to be wrong.

  • Date means the office's local date, set as a single time zone in configuration.
  • Booking window: from today up to 14 days ahead. Past dates are rejected.
  • Floors are created only through seed data. There's no admin screen for editing floors.
  • Cancelling a booking deletes it. Users can cancel only their own bookings.