Handover · source ledger

What we know,
and how.

Every claim in this prototype is tagged as observed from a source, or inferred by us. Anything not verified is left blank or marked "to be confirmed" rather than filled in. The same notes live in the repository under docs/, dated.

Venue facts

Name
Club Space, Miami observed
Address
34 NE 11 St, Miami, FL 33132 observed
Homepage
clubspace.com observed
Room used here
The Terrace, open-air observed
Doors
11:00 PM ET on the event date observed
Close time
Runs into the following afternoon. No published end time, so none is stated anywhere in the product. inferred
Table enquiries
vip@clubspace.com. The venue states end times vary by event, age policy is set per event (these eight are 21+), and admission remains at door discretion. observed
Ticket terms
DICE ticket cancellation terms are NOT imported as prepaid table contract terms. Table terms must come from the venue in writing. inferred
Historical floor plan
A public historical Discotech bottle-service plan shows a central Terrace with DJ1/DJ2 upfront, W tables west, E tables east, a rear bar and the Loft behind. It carries COVID-era graphics, so it is treated as historical only. The Loft is not claimed as current inventory; current official rooms are Terrace, Floyd and Ground. observed
Identity
The confirmed mark is the white horizontal Club Space word mark. No Clubland identity or affiliation is verified or implied. observed
Table layout
Table names and their side of the room (DJ1, W1–W9, E1–E12) come from the Club Space table map. Metric positions in the 3D room are reconstructed; capacities, sightlines and rates are not venue-confirmed. observed

Verified schedule · 8 nights

All eight are The Terrace with an 11:00 PM ET start. End times are not published, so the product says "into the following afternoon" and nothing more. A published event is not table availability.

Primary monthly sources

Each night is now sourced to its own primary listing, with a second corroborating listing or an official Club Space social post where one exists. Oct 9 uses the Maxi Meraki spelling from the primary listing. No table minimum is published by the venue, so every night carries a null minimum and table availability marked unverified.

Room evidence

The concept model reproduces elements visible in the official photograph and public imagery: an open-air terrace, a booth at one end with flanking speaker stacks, a central dancefloor, perimeter banquettes, structural columns, overhead beams and planting. What it does not claim is survey accuracy. Table names and their order along each rail come from the Club Space table map: DJ1 beside the booth, W1 to W9 in the West VIP rows and E1 to E12 in the East VIP rows. Metric positions, riser heights, capacities and rates in the 3D room are reconstructed and labelled as such on every surface, and the view from a table is a render from that coordinate, not a photograph.

Spatial cues taken from two official photographs: a centred far DJ booth, a central disco-ball cluster overhead, circular plant-laden metal trusses on either side, a central dancefloor and perimeter tables. The historical Discotech plan corroborates the general arrangement (DJ upfront, tables west and east, bar to the rear) but is not treated as current inventory. Table numbering stays concept numbering until the venue supplies a plan.

Other rooms at the same address (not bookable here)

Floyd and The Ground share the address but are separate rooms with separate ticket access. This is NOT a complete calendar for those rooms, and none of these nights is bookable through this Terrace table product. All starts are 23:00 EDT.

PRIMA dining integration · live

Dining availability is read live, in the browser, from PRIMA's public read API. Verified 2026-09-13: HTTP 200 with Access-Control-Allow-Origin: *, no credentials required.

  • GET primavip.co/api/members/venues?region=miami&date=YYYY-MM-DD&guest_count=N&time=HH:mm:ss&timeslot_count=5 → data.venues[] with metadata, photos, operating_hours and availability.timeslots
  • GET primavip.co/api/members/venues/{id-or-slug}/availability?…same params → data.timeslots[]

A time is only offered when is_available AND is_bookable are both true and the slot is not within a buffer. MILA returned is_available true with is_bookable false while sold out, so the weaker test would have shown a table that cannot be taken. Closed, waitlist, sold out, unavailable and Soon states are reported as they are. Slot fee_cents is a PRIMA reservation fee, never a meal total and never the Club Space table minimum. Every result carries the timestamp it was fetched at, and stale data is labelled "last checked", never live. 12 curated venues carry verified metadata with PRIMA IDs and slugs preserved, as a fallback for API failure only. Booking completes at primaapp.com/restaurant/<slug>; date and party deep-link parameters are unverified, so the product says "Continue on PRIMA" and repeats the chosen time and guest count instead of claiming a reservation.

PRIMA Dev runs on an external Supabase project. Nothing there was modified, no migration was attempted, and only its public read path was inspected (see src/hooks/api/useMembersVenues.ts in that project).

Asset provenance

Club Space word mark
Supplied by Alex from the venue's Squarespace CDN. Rendered white, unmodified, never recoloured or stretched.
Terrace photograph (2400×1601)
Supplied official venue photograph. Used as venue reference imagery only, and labelled as such wherever it appears.
Event artwork
None used. Nights are set typographically instead, so no artist poster is fabricated.
Restaurant photography
12 curated venues, images served from PRIMA's own ImageKit CDN with the live venue records.
3D room
Hand-built React Three Fiber meshes. No third-party model, no scan, no floor plan.

Build limitations, stated plainly

  • — Requests, venue terms, holds, guests, commissions and itineraries are stored in this project's own database, so a guest link opens on any device. Host and guest data sit behind sign in and row-level security.
  • — Guest links resolve by the hash of an opaque token through a single read function that returns no email, phone, internal note or commission. Links cannot be listed or guessed.
  • — Minimums, capacity, terms, quote approval and commission decisions are restricted to the venue operator role, and no one can approve their own commission proposal.
  • — Payment collection is off: no provider credentials are configured. Checkout runs as a labelled preview with no card fields, no charge and no held table. The live path is already server-side with a signed webhook, an idempotency key, the immutable approved amount and a fresh hold, consent and capacity recheck.
  • — No email or SMS is sent. Share controls open your own mail or messages app.
  • — Every amount shown is an example. Minimums, taxes, service, gratuity and the 10% commission are placeholders pending the venue's rate card.

Missing inputs, needed from the venue

  1. 01Venue floor plan with true table positions, numbering and capacities
  2. 02Photographic or measured view from each table
  3. 03Rate card: minimum spend per table, per night, per season
  4. 04Tax, service charge and gratuity treatment, and who remits
  5. 05Cancellation, refund and no-show policy as the venue writes it
  6. 06Live table inventory API or a shared availability source of truth
  7. 07Stripe account, settlement path and who is merchant of record
  8. 08Approved commission structure per table, per night and per host
  9. 09Which PRIMA restaurants are contractual partners of this programme
  10. 10Rights confirmation for artist imagery, if posters are ever used