unvibed.
Menu
Free UI audit

Ship-safe check · Agent-built demo

Room Tone

Decision. Hold any claim that this preview reserves a real rehearsal. The screen displayed “Room B reserved at 14:00” and one refresh restored “Select a one-hour slot.” The £24/hour offer, four seats and booking time are fictional. The test exercised no payment or real reservation.

Scope. Clean Chromium contexts at 1440 × 900 and 390 × 844, local production build of demo/after/booking, revision c0686e7, 8 November 2026. The operator, legal entity, seller, target markets, tax treatment and support arrangements were not supplied. GBP alone does not establish UK operation.

This is not legal advice.

Evidence

  • E1. On /, the visitor sees the room plan, duration, £24/hour price, disabled 09:00 slot and two available times. At both widths, Tab reached Start time and Reserve room with a 3 px focus outline. The runner selected 14:00 programmatically after native key selection was inconclusive. Enter confirmed the slot and disabled Reserve room. Desktop · Phone
  • E2. The completed action generated no network request. Each new context and reload had zero cookie names, localStorage keys and sessionStorage keys. No external request or WebSocket surfaced on these paths. Nine foreground/background text samples per initial viewport returned no issue in the measured contrast check. Browser receipt
  • E3. The handler stores the selected time and confirmation only in React state. The page has zero forms and links. Fonts, icons and the floor plan are bundled locally. Scope excludes server logs, third-party checkout, booking records, legal pages elsewhere and production configuration. Booking handler · Layout · Declared packages
Room Tone test capture at 1440 pixels wide
Desktop · 1440 × 900
Room Tone test capture at 390 pixels wide
Phone · 390 × 844
Browser receipt
{
  "source": "demo/after/booking",
  "revision": "c0686e7b0f8b795f39c0d97a7cb7d60b88259a3e",
  "runAt": "2026-11-08T08:53:47.708Z",
  "runtime": "Next production build, Chromium 156.0.8078.80",
  "views": [
    {
      "viewport": [
        1440,
        900
      ],
      "pages": {
        "/": {
          "heading": "REHEARSAL\nROOM B.",
          "controls": [
            {
              "kind": "select",
              "type": "select-one",
              "label": "Start time",
              "maxLength": null
            },
            {
              "kind": "button",
              "type": "submit",
              "label": "Reserve room",
              "maxLength": null
            }
          ],
          "forms": 0,
          "links": [],
          "images": [
            {
              "file": "/art/floor.svg",
              "alt": "Room B plan showing four seats, the upright piano and the entrance"
            }
          ],
          "localKeys": [],
          "sessionKeys": [],
          "cookieNames": [],
          "contrast": {
            "sampleCount": 9,
            "issues": []
          }
        },
        "/ after reload": {
          "heading": "REHEARSAL\nROOM B.",
          "controls": [
            {
              "kind": "select",
              "type": "select-one",
              "label": "Start time",
              "maxLength": null
            },
            {
              "kind": "button",
              "type": "submit",
              "label": "Reserve room",
              "maxLength": null
            }
          ],
          "forms": 0,
          "links": [],
          "images": [
            {
              "file": "/art/floor.svg",
              "alt": "Room B plan showing four seats, the upright piano and the entrance"
            }
          ],
          "localKeys": [],
          "sessionKeys": [],
          "cookieNames": [],
          "contrast": {
            "sampleCount": 9,
            "issues": []
          }
        }
      },
      "keyboardToTime": [
        {
          "label": "Start time",
          "outline": "solid 3px",
          "matched": true
        }
      ],
      "slotSelection": "Playwright selectOption, keyboard switching unverified",
      "keyboardToReserve": [
        {
          "label": "Reserve room",
          "outline": "solid 3px",
          "matched": true
        }
      ],
      "confirmation": "Room B reserved at 14:00",
      "buttonDisabled": true,
      "afterReload": "Select a one-hour slot.",
      "blockedOutsideHosts": [],
      "actionRequests": [],
      "webSocketAttempts": []
    },
    {
      "viewport": [
        390,
        844
      ],
      "pages": {
        "/": {
          "heading": "REHEARSAL\nROOM B.",
          "controls": [
            {
              "kind": "select",
              "type": "select-one",
              "label": "Start time",
              "maxLength": null
            },
            {
              "kind": "button",
              "type": "submit",
              "label": "Reserve room",
              "maxLength": null
            }
          ],
          "forms": 0,
          "links": [],
          "images": [
            {
              "file": "/art/floor.svg",
              "alt": "Room B plan showing four seats, the upright piano and the entrance"
            }
          ],
          "localKeys": [],
          "sessionKeys": [],
          "cookieNames": [],
          "contrast": {
            "sampleCount": 9,
            "issues": []
          }
        },
        "/ after reload": {
          "heading": "REHEARSAL\nROOM B.",
          "controls": [
            {
              "kind": "select",
              "type": "select-one",
              "label": "Start time",
              "maxLength": null
            },
            {
              "kind": "button",
              "type": "submit",
              "label": "Reserve room",
              "maxLength": null
            }
          ],
          "forms": 0,
          "links": [],
          "images": [
            {
              "file": "/art/floor.svg",
              "alt": "Room B plan showing four seats, the upright piano and the entrance"
            }
          ],
          "localKeys": [],
          "sessionKeys": [],
          "cookieNames": [],
          "contrast": {
            "sampleCount": 9,
            "issues": []
          }
        }
      },
      "keyboardToTime": [
        {
          "label": "Start time",
          "outline": "solid 3px",
          "matched": true
        }
      ],
      "slotSelection": "Playwright selectOption, keyboard switching unverified",
      "keyboardToReserve": [
        {
          "label": "Reserve room",
          "outline": "solid 3px",
          "matched": true
        }
      ],
      "confirmation": "Room B reserved at 14:00",
      "buttonDisabled": true,
      "afterReload": "Select a one-hour slot.",
      "blockedOutsideHosts": [],
      "actionRequests": [],
      "webSocketAttempts": []
    }
  ]
}

Findings

Privacy policy
Owner input

E3 has no notice link. Obtain the controller, host/logs, recipients and retention. Publish verified information before collecting customer details. Test from the booking entry point.

Terms
Owner input

E3 has no terms. Ask the actual venue for its booking obligations and attendance rules. Link its approved terms before commitment and test the link by keyboard.

Refund policy
Owner input

E1 displays a rate but there is no transaction or cancellation route. Confirm the operator’s cancellation, rescheduling, mandatory rights and seed-refund replay before selling.

Cookie policy
Observed

E2 found no cookies or browser storage at entry or reload. Record the scope and rerun the inventory if hosted analytics, embeds or payments are introduced.

Consent banner
Outside tested flow

E2/E3 revealed no optional device access. Obtain a production tag inventory, then test untouched/reject/accept/revoke if applicable.

Form consents
Outside tested flow

E3 has a slot control, no form, personal field or marketing choice. If reminders or mailing are added, test the reservation with optional marketing off.

Data minimization
Observed

E1/E3 require a start time and no identification to demonstrate the task. Verify a production booking collects only fields justified for confirmation or attendance.

Third-party SDKs
Observed

E2/E3 found local Next, React, fonts and icons and no external requests. Ask the host about server monitoring and processors. Repeat on a deployed test domain.

Dark patterns
Observed

Full 09:00 is visibly disabled. E1 exposes availability and a single confirm action. The misleading durable outcome is addressed in row 12. Test cancel/reschedule if created.

Hidden fees
Unverified

E1 shows £24 for one hour. There is no bill, tax line or checkout. The operator should compare a sandbox final total to the first displayed price.

Fake reviews
Outside tested flow

The source and screen contain no customer ratings or testimonials. Require provenance and permission before adding any.

Unsupported claims
Gap

“Reserved” disappears after reload, with zero booking request. Label this as a local demo at the decision point. For a live service require owner evidence of a durable reservation before using that confirmation.

Alt text
Observed

The floor plan alternative names four seats, piano and entrance. Check it against the drawing whenever the plan changes. Floor plan

Color contrast
Observed

Nine sampled visible text pairs per viewport produced no finding. Recheck button, disabled, focus and image-backed states separately before launch. E2 is a partial test.

Keyboard navigation
Unverified

Tab and Enter reached and confirmed the booking with a visible outline. ArrowDown/Enter did not establish 14:00 in this runner. Test native selection, reverse Tab and return focus on supported platforms.

Business details
Owner input

“Room Tone” is the only brand in E1. Obtain the trader's verified name, address and support contact, then check their placement before purchase.

Age consent
Owner input

No age field or audience information. Confirm venue access rules, target market and how children’s data would be processed before adding an age flow.

Unsubscribe link
Outside tested flow

No marketing form, email SDK or message. If reminders or promotions are introduced, classify the messages and run a seed-mail suppression test for commercial mail.

Stock image licenses
Observed

The plan is a tracked original SVG. No remote stock photograph was requested. Retain generator history and supplier notices for icons/fonts in the delivery. Asset records

Data deletion
Outside tested flow

Refresh discarded the booking state, with no stored customer record found. If bookings, receipts or logs are added, the operator must map processors, exceptions and a tested request route.

Implementation handoff

  1. Designer. Change the preview’s confirmation to identify a local demonstration. Repeat the 14:00 task, refresh and check that the copy accurately describes the outcome.
  2. Venue operator. Supply the seller identity, confirmed total, contract point, cancellation terms, delivery channel and operating markets. Publish the approved terms/refund links beside the booking decision. If selling to EU consumers, ask counsel whether a specific-date leisure exception applies to the actual contract. Consumer Rights Directive, articles 6, 8 and 16
  3. Operator and engineer. Inventory host logs, processors and retention. Place the approved privacy contact and notice wherever a real booking begins. Test durable confirmation, cancellation and any rights request in a sandbox. The example supplied review findings only. No auth, payments, records or demo implementation changed.

Compare this demo · UI Rescue pricing