Inicio Manual de uso

Manual de uso

La capa de comentarios, paso a paso.

Alt+clic sobre tu app en desarrollo, escribe qué cambiar y el comentario queda como un archivo JSON dentro de tu proyecto. Esta guía cubre todo lo que existe y lo que viene en la v2.

Disponible ya está en la rama principal. v2 rama feat/overlay-v2, aún no en la principal.
1

Instalación y arranque

Disponible

Necesitas Node ≥ 22 y pnpm. Perfect Front corre en tu máquina; no hay cuenta ni nube.

  1. Clona el repositorio y entra en la carpeta.
  2. Instala dependencias y construye.
  3. Desde la raíz de tu proyecto (no la de Perfect Front) ejecuta perfect-front o su alias comment.
terminal
# una sola vez
git clone https://github.com/jorgeguzmanq/perfect-front.git
cd perfect-front
pnpm install
pnpm build

# cada día, en la carpeta de TU proyecto
perfect-front

El comando detecta tu proyecto, arranca tu dev server, levanta el servidor local y un proxy (por defecto en 127.0.0.1:7788) que reenvía tu app e inyecta la capa. Abre el navegador en la URL del proxy y se queda vivo en primer plano: Ctrl+C apaga todo lo que inició.

Si la carpeta solo tiene .html y ningún runner, Perfect Front la sirve con su propio servidor estático (usa index.html, o te pide elegir la página).

Opciones

OpciónQué hace
--no-openNo abre el navegador.
--no-proxySin proxy y, por tanto, sin capa. Úsalo si tu app depende del origen del dev server (cookies, OAuth, CORS).
--server-port <n>Puerto del servidor local.
--detachSegundo plano: abre el navegador y devuelve la terminal.

Subcomandos

ComandoQué hace
startArranca en segundo plano, sin abrir el navegador.
stopDetiene lo que inició Perfect Front (dev server propio y proxy). Nunca toca procesos ajenos.
statusEstado del servidor local, el proyecto y el proxy.
logsSalida del dev server y del proxy.
Qué se guarda

El estado de ejecución queda en .perfect-front/run/ (PID, puerto, URL original; sin tokens). Tu código no se modifica.

2

Activar la capa

Disponible

La capa viene activa pero en reposo: un clic normal no se intercepta y tu app funciona igual.

  • Alt + clic sobre un elemento: abre el comentario de ese elemento.
  • Ctrl/Cmd + ⇧ + C: alterna el modo selección; ahí el clic normal comenta. Esc sale.
  • También puedes usar el botón Comentar del lanzador (esquina inferior derecha).

Estados

Tras guardar, la capa queda lista para elegir otro elemento, sin volver a activarla. Esc cancela y regresa a reposo en cualquier punto.

Mientras guardas, el campo se bloquea y el botón muestra «Guardando…». Si el servidor local no responde, tu texto se conserva y puedes pulsar Reintentar. Si intentas guardar vacío, el campo se marca con un error.

Ojo con Chrome: Ctrl+⇧+C abre DevTools en Chrome en algunas configuraciones. Si te pasa, usa el botón Comentar del lanzador.

Qué se guarda

Nada hasta que pulses Guardar (Ctrl+↵). Si apagas la capa, se recuerda en el navegador para la próxima visita.

3

Apuntar

Disponiblev2: navegación, varios, reordenar, copiar

Primero decides a qué te refieres. Un comentario puede apuntar a un elemento, a varios o a toda la vista.

localhost:5173/planes
Ejemplo

Elige tu plan

InicialPara probar
div.card.destacadoEquipoPara crecer
EmpresaA medida
1
Un elemento resaltado con su selector y un pin con el número del comentario.

Navegar por el DOM v2

Con el elemento elegido, afina sin volver a hacer clic:

  • ↑ sube al padre; ↓ baja al primer hijo.
  • ← / → van al hermano anterior o siguiente.
  • Los botones se apagan cuando no hay a dónde ir (por ejemplo, el primer hermano no tiene ←).

Selección múltiple v2

⇧ + clic suma o quita elementos (o el botón Sumar del panel). Todos viajan en un solo comentario. Aparece una bandeja con un chip por elemento; el chip con borde de acento es el foco. Las flechas mueven solo el foco. En Estilos puedes aplicar «Solo el foco» o «Los N elementos».

Con Toda la vista el comentario no apunta a ningún elemento (sirve para «la página se siente apretada»).

Reordenar hermanos v2

En la pestaña Estructura mueves un elemento entre sus hermanos con «Mover antes» / «Mover después». Es una propuesta: se previsualiza en la página, viaja con el comentario y se puede Deshacer. El código no cambia.

Propuesta guardada: «mover de 3 a 1» (posiciones desde 1).

Copiar ubicación v2

El botón de copiar de la cabecera del panel abre «Copiar como»:

FormatoEjemploPara
Archivo y líneasrc/components/Card.tsx:42Editor o PR
Selector CSSmain > section.plans > div.cardTests, DevTools
Referencia Perfect Frontpf://planes#cardPegar dentro de otro comentario
Markdown`archivo:línea` · div.card en /planesIssue o prompt
Los N elementosuna lista con - por elementoSolo con varios

«Archivo:línea» necesita que el elemento lleve data-pf-src (plugin de build, aún no existe); sin él se copian los demás formatos.

Qué se guarda

Los elementos extra van en extraTargets[] (hasta 19 además del principal); el movimiento, en proposals[] como reorder con from y to. Copiar ubicación no guarda nada: solo copia al portapapeles.

4

Describir

Disponiblev2: pestañas

Aquí dices qué debería cambiar. El comentario de texto está disponible hoy; las pestañas del panel completo son v2.

El panel: identidad y copiar arriba, objetivo y navegación, pestañas, y acciones abajo. Ilustración de ejemplo.

Comentario de texto Disponible

  1. Escribe qué habría que cambiar (hasta 10 000 caracteres).
  2. Pulsa Guardar o Ctrl+↵.
Qué se guarda

El texto, la ruta y URL, el selector (con candidatos), el texto y HTML del elemento, el viewport y el rectángulo. Ver sección 8.

Contenido e i18n v2

La pestaña Contenido edita el texto del elemento y lo pinta en la página mientras escribes; Cancelar lo deshace. Hay tres casos:

Texto fijo

Escrito directo en el código. Ves «Antes» y «Después».

Clave i18n

Viene de archivos de idioma. Eliges ES / EN / PT y el alcance: Todas las apariciones o Solo aquí (propone una clave nueva, p. ej. clave_2). Las traducciones que faltan se marcan.

Dinámico

Mezcla texto y datos. Las {variables} están bloqueadas: no se pueden quitar; si falta una, se avisa.

Aviso de longitud

Si el texto nuevo es más de 25 % más largo, se avisa que puede desbordar el diseño.

Si no escribes comentario, se genera uno automático del tipo «Cambiar texto de … a …» (regla descrita en el diseño; no verificada en código).

Qué se guarda

Una propuesta text_fixed, text_dynamic o text_i18n con «antes → después». El proyecto no se modifica.

Estilos: editable vs. foundation v2

La pestaña Estilos separa lo que puedes cambiar de lo que solo se consulta:

Editable: vive en el código del proyecto (módulos CSS, Tailwind, inline). Foundation: tokens, reset y librerías; solo se comenta, no se cambia.

Cada cambio muestra «antes → después» y se ve en vista previa en vivo; Revertir (por fila o todo) o cerrar el panel la deshace. Si una propiedad usa un token, se indica «usa --token».

Qué se guarda

Una propuesta style con cada propiedad (before → after, origen editable o foundation). El código fuente no se toca.

Imágenes v2

  • Pegar: Ctrl+V con el panel abierto.
  • Soltar: arrastra archivos sobre la zona de imágenes («Suelta para adjuntar»).
  • Abrir: botón «Abrir…».
  • Hasta 20 adjuntos por comentario. Formatos: PNG, JPEG y WebP (el esquema compartido no admite GIF aunque el prototipo lo muestre); hasta 5 MB cada una.
  • Se copian a .perfect-front/attachments/ y el JSON guarda rutas relativas al proyecto.
Qué se guarda

attachments[] (rutas) y attachmentInfo[] con name, source (paste, drop, open o capture), mimeType y bytes.

Captura de nodo v2

Una capa propia enmarca el nodo y lo renderiza de nuevo a 1×, 2×, 3× o 4× (no agranda una imagen).

  1. En el panel: Capturar ▾ → Nodo seleccionado, o Alt+⇧+S.
  2. Marca las escalas que quieras. Cada una muestra su tamaño real en px antes de capturar.
  3. Con varios nodos elige por separado o juntos.
  4. Pulsa Capturar. Si el nodo está fuera de pantalla, la página se desplaza sola; el overlay se oculta durante la captura y no hay parpadeo. No muevas la página mientras dura.
  5. Revisa el resultado: Adjuntar, Copiar, Descargar o Capturar de nuevo.
Ejemplo arriba, un nodo pequeño; abajo, uno grande con escalas apagadas.

Una escala se apaga (con el motivo a la vista) si el resultado pasa de 16 384 px por lado, de 100 M px en total, o de 5 MB tras renderizar. Elige una menor o captura solo una parte.

Copiar y descargar

  • Copiar al portapapeles: copia la imagen como PNG, lista para pegar en un chat o documento.
  • Descargar: guarda pf-<selector>-<escala>x.png; Descargar todas baja cada escala.
  • Requisitos: contexto seguro (localhost o 127.0.0.1) y la página enfocada. Si el navegador rechaza copiar, usa Descargar.

Imágenes de otro origen sin CORS pueden salir en blanco en la captura.

Qué se guarda

Al Adjuntar, las escalas se copian a .perfect-front/attachments/ y quedan atadas al comentario con source: "capture". Copiar y Descargar no guardan nada en el proyecto.

5

Eliminar elemento

v2Nuevo

Para decir «esto sobra» sin escribir nada: el botón Eliminar elemento del panel guarda un comentario con el texto «Eliminar este elemento.», con una nota opcional que explique por qué.

Ejemplo
BannerTexto de ejemplo2
El elemento se marca con trazo discontinuo y un pin rojo.

Nunca borra código. Es solo un comentario: quien lo lea (tú o un agente) decide cómo aplicarlo.

Qué se guarda

Un comentario normal con el texto «Eliminar este elemento.» (más tu nota) y el objetivo seleccionado.

6

Organizar

v2

Grupos y cola de lectura

En la pestaña Cola atas el comentario a un grupo: varios comentarios que se entienden juntos, en orden y con contexto. Opciones: Grupo nuevo, Añadir a un grupo, Atar a un comentario… (se coloca justo después del elegido) y Sacar del grupo.

  • Nota de contexto: un texto que explica el objetivo del grupo.
  • Entender el grupo antes de actuar: quien ejecute lee la nota y toda la cola, en orden, antes de tocar nada.
  • Con grupo, Guardar pasa a Guardar en la cola. Cada ítem muestra su estado (Pendiente, En curso, Resuelto).
Cola del grupo «A». Pines del grupo se pintan en otro color y se unen con líneas punteadas en la página.

Cajón de comentarios

Desde el menú del lanzador (Más opciones → Comentarios) se abre el cajón, aparte del editor: pestañas Abiertos, Grupos y Resueltos. Al hacer clic en un ítem vas a su pin. En un grupo, Copiar como brief arma un resumen para pegar.

Pines

Cada comentario deja un pin numerado sobre el elemento: azul si está abierto, verde si está resuelto, otro color si pertenece a un grupo. El conteo aparece en el lanzador.

Qué se guarda

En el comentario: group: { id, position } (la cola es el orden por position). El nombre, la nota y readFirst viven en el grupo.

7

Dashboard, CLI y agentes

Disponible

El dashboard del servidor local lista tus proyectos y comentarios. Para trabajar sin navegador ni servidor, el CLI opera directo sobre .perfect-front/ y no modifica nunca tu código: tú (o tu agente) cambias el código y luego registras la resolución.

ComandoEfecto
listPor defecto solo pending. Filtros: --status, --collection, --q.
show <id>Datos completos para localizar el elemento.
claim <id>pending → in_progress.
resolve <id> --summary "…"Registra la resolución (--files, --verification, --commit, --by agent|human).
edit <id> --comment "…"Cambia el texto del comentario.
move <id…> --to <colección>Mueve a una colección existente.
status <id> <estado>Cambia el estado. Sin id: estado del servidor.
ignore / reopenMarca como ignorado, o vuelve a pending.
export --format mdMarkdown a stdout o a un .md dentro de .perfect-front (--out).

<id> acepta el ID completo (pf_ + 26 caracteres) o un prefijo único. Con --json, stdout trae un único objeto JSON: {"ok":true,…} o {"ok":false,"error":{"code","message"}}. Para no pisar cambios ajenos usa --expect-updated-at <iso> (alias --rev).

Flujo recomendado

terminal
perfect-front list --json
perfect-front claim <id>
perfect-front show <id> --json
# cambia el código y verifica (build, lint, tests)
perfect-front resolve <id> --summary "qué cambió y por qué" \
  --files src/a.tsx --verification "pnpm build ok" --by agent

Para localizar el elemento, en orden de confianza: ruta, texto, selectores, HTML y, si hay, la captura. Si no lo localizas con confianza, no lo resuelvas: anota el resultado parcial con edit (conservando el texto original) y deja in_progress o pending.

Códigos de salida

CódigoSignificado
0OK
1Error interno
2Uso o validación (opción inválida, id ambiguo, --out fuera de .perfect-front)
3Proyecto o carpeta .perfect-front no encontrados
4 / 5 / 130Proceso, nada en ejecución, Ctrl+C (los del arranque, no los de comentarios)
6Id o colección no encontrados
7Conflicto: revisión obsoleta o transición no permitida
8Datos ilegibles o error de almacenamiento

Bloque para tu CLAUDE.md / AGENTS.md

Pégalo en el archivo de instrucciones del proyecto para que tu agente sepa cómo trabajar. El contrato completo está en packages/cli/AGENTS.md del repositorio.

CLAUDE.md
## Comentarios visuales (Perfect Front)

Para aplicar comentarios visuales: ejecuta `perfect-front list --json` (solo pendientes;
`--status in_progress|all` para otros). Por cada comentario: `perfect-front claim <id>`,
luego `perfect-front show <id> --json` y localiza el elemento por `location.route`,
`location.text`, `selector`/`selectorCandidates` y `location.html` (si hay `attachments`,
mira la captura). Cambia el codigo, verifica (build/lint/tests) y registra con
`perfect-front resolve <id> --summary "..." --files a,b --verification "..." --by agent`.
Si no localizas el elemento con confianza, NO lo resuelvas: anota el resultado parcial con
`perfect-front edit <id> --comment "..."` (conservando el texto original) y deja el
estado en `in_progress` o `pending`.
Usa `--expect-updated-at <iso>` para no pisar cambios ajenos. Codigos de salida: 0 ok,
2 uso, 3 sin proyecto, 6 id no encontrado, 7 conflicto/revision obsoleta, 8 datos.
Contrato completo: packages/cli/AGENTS.md del repo perfect-front.
8

Guardado, privacidad, límites y ayuda

Disponible

Dónde se guarda

Todo vive dentro de tu proyecto, en .perfect-front/. Un comentario = un archivo JSON.

"id": "pf_01K7A…", "status": "pending", "scope": "element",
"comment": "El título se corta en móvil.",
"location": { "route": "/planes", "selector": "main > div.card", … },
"viewport": { … }, "attachments": [ … ], "resolution": null

Los archivos v1 siguen siendo legibles; la v2 añade sections[], extraTargets[], proposals[] y group.

Privacidad

Sin nube. El servidor local y el proxy escuchan solo en 127.0.0.1; no se envía nada a terceros. Puedes versionar .perfect-front/ en Git o ignorarlo, según prefieras.

Límites conocidos

  • El proxy solo reenvía destinos HTTP; con HTTPS no hay capa (se avisa en la terminal).
  • La app se sirve desde otro origen (127.0.0.1:<puerto del proxy>): localStorage, cookies y orígenes permitidos quedan separados. Si dependes de ellos, usa --no-proxy.
  • HTML comprimido pese a quitar accept-encoding, o en UTF-16, no se inyecta.
  • Máximo 20 adjuntos y 5 MB por imagen; reordenar, estilos y contenido son propuestas, nunca cambian el código.
  • La v2 todavía es un prototipo de diseño: algunas piezas descritas aquí aún no tienen código en la rama principal.

Solución de problemas

SíntomaQué hacer
No aparece la capa y la terminal dice «SIN CAPA DE COMENTARIOS»Lee el motivo y la acción que indica. Revisa que abres la URL del proxy, no la del dev server.
El navegador bloquea el script (CSP)Si tu app envía Content-Security-Policy con script-src o default-src, permite 'self' o desactiva la CSP en desarrollo.
Tu dev server usa HTTPSEl proxy no lo soporta; sirve en HTTP en desarrollo.
Ctrl+⇧+C abre DevTools en ChromeUsa el botón Comentar del lanzador, o Alt+clic.
«No se pudo guardar: el servidor local no responde»Tu texto se conserva. Revisa perfect-front status y pulsa Reintentar.
Copiar al portapapeles fallaUsa localhost o 127.0.0.1, enfoca la página y reintenta; o usa Descargar.

Sin resultados para tu búsqueda.