diff --git a/server/src/agent/loop.ts b/server/src/agent/loop.ts index f6b8e49..d539b99 100644 --- a/server/src/agent/loop.ts +++ b/server/src/agent/loop.ts @@ -75,6 +75,12 @@ créalo con bash: es tu trabajo, no preguntes por dónde empezar. - Deja el dev server en el script "dev" del package.json, escuchando en el puerto de la variable PORT y con el host abierto. Multi lo levanta y lo muestra a toda la sala; sin eso nadie ve nada. +- Lo que construyas tiene que verse bien también en un teléfono, no solo en pantalla + ancha: nada de anchos fijos en el layout, y que el texto se lea y los botones se + puedan tocar con el dedo. + Por qué: la sala mira el preview desde donde sea, y lo que se publica acaba en un link + que la gente abre en el celular. Una app que solo se ve bien en la computadora está a + medias. - El proyecto vive en un volumen montado, donde los eventos de archivo del sistema no cruzan. Configura el watcher de tu stack por SONDEO (polling) o los cambios no se verán en vivo y la sala se quedará mirando una pantalla congelada. diff --git a/web/src/App.tsx b/web/src/App.tsx index c42f5a8..3455648 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -34,6 +34,25 @@ import { /** Cuántas imágenes caben en un mensaje. El server aplica el mismo tope. */ const MAX_ADJUNTOS = 4; +/** + * A qué ancho se mira el preview. + * + * Un solo botón las cicla en este orden, en vez de tres botones en la barra: + * ya hay siete controles ahí arriba y este se toca poco. + * + * Los anchos son los de siempre para cada clase de pantalla; lo que importa no + * es el número exacto sino cruzar los puntos donde un layout se rompe. + */ +const VISTAS = ["escritorio", "tablet", "movil"] as const; +type Vista = (typeof VISTAS)[number]; + +const ANCHO_DE_VISTA: Record = { + // Sin ancho: el preview ocupa lo que haya, como siempre. + escritorio: undefined, + tablet: "768px", + movil: "390px", +}; + // El roomId vive en el hash de la URL: #/sala/taco-fiesta-42 function readRoomFromHash(): string | null { const m = window.location.hash.match(/#\/sala\/([\w-]+)/); @@ -227,6 +246,13 @@ function Sala({ roomId, name }: { roomId: string | null; name: string }) { * no cabe al lado del preview y pasa a ser una vista más. */ const [tab, setTab] = useState<"chat" | "app" | "back">("app"); + /** + * A qué ancho se está viendo el preview. + * + * Es solo del que mira: cambiarlo no le mueve nada a los demás de la sala, ni + * toca la app. Se angosta el marco, no el proyecto. + */ + const [vista, setVista] = useState("escritorio"); /** * El chat colapsado deja el preview a pantalla completa. * @@ -990,6 +1016,20 @@ function Sala({ roomId, name }: { roomId: string | null; name: string }) { + + {/* A qué ancho se ve el preview. Un solo botón que cicla, y no tres, + porque se toca poco y la barra de arriba ya va llena. Solo aparece + con la app a la vista: en el back no hay nada que redimensionar. */} + {tab === "app" && ( + + )} {tab === "back" && roomId && ( @@ -1001,12 +1041,17 @@ function Sala({ roomId, name }: { roomId: string | null; name: string }) {
{previewReady ? ( <> -