The Lobby is the default room loaded when the virtual office initializes — itsDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/gcsconsultores/centros-estrategicos-gcs/llms.txt
Use this file to discover all available pages before exploring further.
RoomId is 'lobby' and currentRoom is set to this value as the initial state inside VirtualOffice. It serves as the visual front door to GCS Consultores Empresariales: a hero section featuring the company description, key statistics (500+ companies advised, 15+ years of experience, 98% client satisfaction), and Sally’s animated welcome message. Below the hero, a responsive card grid presents every consulting room the current user is authorized to see, letting visitors orient themselves and navigate with a single click.
Room Cards
Each consulting room is represented by aRoomCard component. Cards are built from the ROOMS constant in lib/constants.ts — the Lobby filters the full record to an array, removes its own entry, and applies role-based visibility rules before rendering.
Every RoomCard surfaces the following fields from the Room interface:
| Field | Type | Description |
|---|---|---|
name | string | Full display name (e.g. “Sala de Compliance”) |
shortName | string | Abbreviated label used in compact layouts (e.g. “Compliance”) |
description | string | One-line summary shown on the card face |
icon | string | Lucide icon name rendered as the card’s visual anchor |
color | 'primary' | 'secondary' | 'accent' | Controls the card’s color theme using GCS brand tokens |
type | RoomAccess | Displayed as a badge — 'public' rooms are open to all; 'private' rooms require the consultor role |
features | string[] | Bullet list of key capabilities shown in expanded or hover state |
ctaText | string | Label for the card’s call-to-action button |
The Lobby applies intelligent filtering before rendering cards: it always excludes its own
'lobby' entry, then shows all rooms to consultor users and only type === 'public' rooms to cliente users. If no rooms pass the filter, a fallback message is displayed instead of an empty grid.Navigation
Room navigation is event-driven and stateless from the Lobby’s perspective — it simply calls back up toVirtualOffice via the onRoomChange prop.
When a visitor clicks a RoomCard, the following sequence occurs:
RoomCard fires onEnter(room.id)
The card calls the
onEnter callback (aliased from onRoomChange) with the target RoomId.VirtualOffice updates currentRoom
handleRoomChange stores the previous room in previousRoom state and sets currentRoom to the new RoomId.Sally greeting is appended
A new
SallyMessage is constructed using SALLY_GREETINGS[room] and pushed onto chatHistory, so her contextual welcome is ready the moment the user opens the chat panel.Sally Welcome
When the virtual office first loads, auseEffect in VirtualOffice seeds chatHistory with an initial SallyMessage drawn from SALLY_GREETINGS.lobby:
setInterval typing simulation (30 ms per character) inside a speech bubble next to Sally’s avatar image. The blinking cursor disappears once the full string has been typed. Clicking Continuar conversación or Hablar con Sally opens the full SallyChat side panel where the conversation can continue.
Header Navigation
TheHeader component is a fixed top bar rendered by VirtualOffice above every room, including the Lobby. It provides persistent navigation without requiring a page reload.
Key elements of the Header:
- GCS Logo —
gcs-logo.pnginside a circular container, withCOMPANY_INFO.shortNameandCOMPANY_INFO.taglinedisplayed alongside onsmscreens and above. - Room indicator progress bar — A 1 px gradient bar below the nav that fills proportionally based on the active room’s position in the
navItemsarray, giving a subtle visual sense of location. - Desktop navigation — A horizontal row of icon + label buttons, one per visible room. The active room receives
bg-primary text-primary-foregroundstyling; inactive items use a muted hover state. - Role badge — A small
<span>in the top-right area that displays"Consultor"or"Cliente"based onuser?.role. - User icon button — Navigates to
/loginfor unauthenticated users or to/for authenticated users viauseRouter. - Contactar button — A prominently colored CTA button hidden on mobile (
hidden sm:flex). - Mobile sheet menu — On screens narrower than
lg, the desktop nav collapses into a ShadcnSheettriggered by a hamburger icon. Each room link shows the fullroom.nameandroom.descriptioninside the drawer.
The Lobby itself is a
'public' room — ROOMS.lobby.type === 'public' — so it is always accessible regardless of the user’s role or eligibility status. The eligibility gate that blocks access to the entire office is evaluated in VirtualOffice before any room renders; once a user passes that gate, the Lobby is unconditionally available.