Platform architecture
One Booking Platform, Different Venue Rules
A better booking grid should not quietly import another venue’s prices, time increments or membership rules. I separated interface capabilities from business policy.
Senior AI Engineer · M.S. Computer Science, Tsinghua University · See the products I built
In this article · 6 sections
The engineering decisions
- Keep venue identity, presentation choices and business rules explicit.
- A shared component does not imply a shared booking policy.
- Validate both the requested change and the existing behavior that must remain intact.
Make capability selection explicit
The implementation introduced a venue booking configuration registry. It selected the presentation capabilities and referenced the appropriate rules for that venue. Unregistered venues retained the existing guided interface. A new entry extended the platform without editing a global default.
The target venue kept 30-minute start and grid increments, durations of 30, 60, 90 or 120 minutes, a two-hour maximum, a 14-day window and one bay per booking. Membership benefits remained automatically calculated. Server-authoritative quoting and the established checkout path also stayed in place.
Reuse the interaction, not the desktop geometry
The desktop experience used rooms across the grid and times down the page, with a persistent booking summary. On a phone, shrinking that table would have made the choices harder to scan and tap. The mobile view instead grouped bay cards by time.
The date selector exposed the full 14-day window through seven-day pages. Changing the day retained the existing client cache and prefetch behavior. A visible redesign was not a reason to discard the performance work already supporting date navigation.
Test the non-change as part of the change
The booking-rule checks gained venue-isolation assertions: the target venue could change presentation without changing its business rules. I also checked the page against a temporary database, including the reservation window, pagination, desktop grid and phone layout. That work did not write to an operating venue’s data.
The important negative checks are product-specific. Enabling a grid must not enable a multi-bay purchase. Reusing a summary must not let the customer choose membership minutes if the venue calculates them automatically. Those constraints belong in the integration boundary, where configuration becomes behavior.
Keep a failing baseline visible
The record reports type checks, lint, build and public-copy checks passing. The broader acceptance run completed the booking, pricing, waiver, reservation-window and relevant coaching checks before stopping at an existing OAuth test-account login failure. It reproduced on the second run.
I kept that as a separate baseline issue rather than claiming the whole suite passed or changing the authentication system to make a UI task look green. This article describes the implementation and the recorded local verification. It does not turn the temporary-database check into evidence of a production rollout.
Local requirements should remain local
A configurable platform is easier to extend when it is explicit about what is shared: rendering primitives, interaction patterns and tested rule interfaces. Prices, time windows and commercial permissions are inputs to those interfaces. Keeping that distinction visible let me improve a customer flow without redefining another venue’s contract.
Project context and evidence
Written from my August 2026 GolfJoy Play venue-configuration implementation and verification records. Public links below support the product and attribution context. Internal project records are summarized, with customer records, credentials, and employer source code omitted.
- GolfJoy Play ↗
Public platform context. Historical test and release scopes are described in this article.
- GolfJoy engineering case study ↗
Product interfaces and the company attribution for my five delivered projects.


