Las 11 entidades CRUD comparten esqueleto — tabla, filtros, botón crear, sheet lateral de
edición (ResponsiveFormDialog) — pero la interacción central del panel, "quiero ver
esta entidad", está fracturada. La fila casi nunca es clickeable: hay que encontrar el menú "⋯".
Y cuando por fin llegas, cada ruta contesta distinto:
| Entidad | "Ver" hoy | El problema |
|---|---|---|
| Pacientes | Página de detalle con 5 tabs | La única con página. El modelo correcto — y nadie más lo sigue. |
| Doctores | No existe — solo editar o eliminar | La entidad estrella del negocio no se puede ver, solo abrir su formulario de 445 líneas. |
| Citas | "Ver detalle" está deshabilitado | Un botón muerto en producción desde hace meses. |
| Clínicas | Click en fila abre el formulario de edición | El sheet más denso del panel: foto, dirección, horarios por día y un dialog anidado — 565 líneas en un drawer. |
| Comunicaciones | Sheet de solo lectura | El único peek de verdad — pero nadie más lo tiene. |
La fila no responde
Solo clinics y la cola de revisión de doctores reaccionan al click en la fila. En el resto, la acción vive escondida en el menú "⋯" — el gesto más natural de una tabla no hace nada en 9 de 11 rutas.
Drawers que ya no caben
El drawer nació para formularios cortos y hoy carga fichas completas: clinics (565 líneas), la edición de doctors (445). Sin URL, sin breadcrumb, sin tabs — todo apretado en 512 píxeles de ancho.
Menudencias que la implementación arrastra: la mitad de las rutas sincroniza filtros a la URL
(nuqs) y la otra mitad los pierde al recargar; /users es un placeholder "en construcción" visible
en el sidebar; el estado de los dialogs vive a veces en la página y a veces dentro de la celda de la tabla.
En vez de cuatro comportamientos, uno: click en la fila abre un peek — un drawer de lectura rápida, no el formulario — en todas las tablas del panel. Desde el peek, "abrir como página" lleva a la ruta real de la entidad; ⌘click en la fila va directo. El drawer deja de ser el formulario-de-todo y pasa a ser lo que es en Notion: una ventana para mirar sin perder la lista, con salida a página cuando toca trabajar.
Toda la fila es clickeable, con hover visible. El menú "⋯" queda para acciones rápidas (editar, eliminar).
Identidad, estado y los datos que responden el 80% de las consultas. Esc cierra, ↑↓ navega entre filas.
/doctors/[id] como ya existe /patients/[id]. Compartible,
con breadcrumb y espacio para crecer.
Quién recibe qué. Página completa solo donde la densidad la justifica: las cuatro entidades núcleo. Los catálogos livianos — un idioma, una especialidad, un motivo de visita — se quedan en drawer: para "nombre + estado", una página sería ceremonia vacía. Y los flujos que ya funcionan no se tocan: el wizard de crear cita sigue siendo modal (es un flujo, no una ficha) y la cola de revisión SACS conserva su drawer ancho (es una cola de trabajo).
La sección 06 asigna las 18 rutas una a una: qué hace el click, quién tiene peek, quién tiene página. Esa tabla es el contrato de implementación.
Hoy el login es una página en blanco con el formulario flotando. La propuesta lo lleva a
noche completo con --grad-hero — el mismo degradado radial del manual — y dos
auroras de la paleta (menta arriba, petroleo abajo) que derivan lentísimo, 12 segundos por
ciclo, casi imperceptible: la pantalla está viva sin moverse. El isotipo, gigante y al 7%,
sangra por la esquina — marca de agua, no decoración. El formulario vive en una lámina
noche-soft translúcida de radio 20 (el radio de lámina de ACP-113), campos oscuros con foco
menta, y un botón pill menta con tinta noche. Al enviar, la aurora pulsa una vez.
Con prefers-reduced-motion, todo queda quieto: el degradado solo.
Detalles que importan: el foco del campo activo es borde menta + halo al 18% — visible sobre noche sin gritar. El botón menta con tinta noche da 8.9:1 de contraste. La aurora se dibuja con dos radiales de la paleta (menta .34, petroleo .38) difuminados — cero colores nuevos. El wordmark es el vector del manual, nunca texto.
Doctores como ejemplo — la ruta con más filtros y la asimetría más grave (hoy ni siquiera tiene "ver"). La fila entera responde al click y lo dice con el hover. El peek abre a la derecha con la identidad, el estado SACS y los datos de consulta frecuente; arriba a la izquierda, "abrir como página"; abajo, editar — que ahí sí abre el formulario de siempre. La lista sigue visible detrás: mirar tres doctores seguidos son tres clicks, no tres viajes.
Nada de mayúsculas gritadas: los encabezados de columna van en sentence case, sin
letter-spacing — la voz editorial de Amedi también aplica dentro del producto. El peek reusa el
Sheet de ACP-113 (radio 20, overlay noche) con un cuerpo de solo lectura; el scrim acá es
más suave (.38) que el de un dialog porque la lista debe seguir legible detrás.
El mismo doctor, ya como ruta real — el patrón que /patients/[id] estrenó y que doctors,
clinics y appointments heredan: hero de identidad + tabs + cards editables. Acá cabe lo que el
drawer nunca pudo cargar: la agenda, los documentos SACS, la actividad. El breadcrumb resuelve el
nombre (como ya hace con pacientes) y la URL se comparte en un mensaje de equipo sin explicar nada.
Clinics hereda esto tal cual — su formulario de 565 líneas se reparte en tabs (Información, Horarios, Ubicación, Doctores) y el drawer queda como peek. Appointments revive su "ver detalle" con esta misma plantilla en versión compacta: la cita, su paciente, su doctor, su historial de estados.
Para un idioma, una especialidad o un motivo de visita — dos campos y un switch — el peek y el formulario son la misma cosa: el click abre directamente el drawer de edición, como hoy, pero con el lenguaje de ACP-113 y la fila clickeable. Sin página, sin ceremonia.
La matriz · 18 rutas, un contrato
| Ruta | Click en fila | Detalle | Nota |
|---|---|---|---|
| /doctors | Peek | Página nueva | /doctors/[id] — hero + Resumen · Agenda · Documentos · Actividad. |
| /patients | Peek | Página (existe) | Gana el peek; su página de 5 tabs ya es el modelo. |
| /clinics | Peek | Página nueva | El sheet de 565 líneas se reparte en tabs; el click deja de abrir la edición. |
| /appointments | Peek | Página nueva | Revive el "ver detalle" muerto. El wizard modal de crear no se toca. |
| /doctors/review | Drawer ancho | No aplica | Cola de trabajo: su drawer de 720px es el patrón correcto. Solo se retinta. |
| /communications | Peek (existe) | No aplica | Su sheet de solo lectura ya es un peek — se alinea al lenguaje y listo. |
| /admins · /profiles · /roles | Drawer de edición | No aplica | Fila clickeable → drawer. Roles conserva su matriz de permisos dentro. |
| /announcements | Drawer de edición | No aplica | Denso pero efímero — no amerita URL propia. |
| /specialties · /languages · /visit-reasons | Drawer de edición | No aplica | Catálogos de dos campos: click = editar, como la maqueta de arriba. |
| /notifications | Navega al destino | No aplica | Cada notificación ya lleva a su entidad — se queda. |
| /users | — | — | Sale del sidebar hasta que exista. Un placeholder no es una ruta. |
| / · /account | No aplica | No aplica | Dashboard y cuenta: fuera del alcance de esta propuesta. |
Regla de asignación: página completa solo si la entidad acumula historia (citas, documentos, actividad) o su ficha excede lo que 512px de drawer muestran sin scroll infinito. Todo lo demás, drawer. Ante la duda, drawer — promover a página después es barato; degradar una página, no.
Aurora en /(auth)
Solo layout.tsx y estilos: el fondo, las auroras, la lámina. El formulario RHF+Zod
actual no se toca. Es la fase más visible y la más barata.
Un componente, todas las tablas
EntityPeek sobre el Sheet de ACP-113 + onRowClick en
AdminDataTable (⌘click navega). Entra ruta por ruta, empezando por doctors.
doctors, clinics, appointments
Clonan el patrón de /patients/[id] (hero + tabs + EditableCard). Clinics migra su
formulario a tabs; appointments estrena detalle compacto.
Las menudencias
nuqs en las 5 rutas que no lo tienen, estado de dialogs siempre en la página, /users fuera del sidebar, sentence case en encabezados de tabla.
Cada fase entrega sola y ninguna rompe la anterior: el peek convive con el menú "⋯", las páginas nuevas son rutas nuevas, y los drawers de edición actuales siguen siendo el destino de "Editar".
El panel se usa 8 horas al día: que cada click responda.
Un login que recibe con la marca encendida, filas que se abren al tocarlas, un peek para mirar y una página para trabajar. La misma regla en las 18 rutas — y ninguna pregunta sin respuesta.
Login Aurora + patrón peek→página + la matriz de 18 rutas.
admin-restyle (paleta) y ACP-113 (componentes) — esta pieza los asume.
Confirmar → design-ship publica y arma el proyecto → goal-phases lo vuelve ejecutable.