Copy y tono
Todo texto que ve un usuario tiene reglas firmes.
Dos reglas base
Sección titulada «Dos reglas base»- Tú-form, no usted-form. Cercano y directo. “Tu publicación”, “puedes editarla”, “tienes 3 disputas”.
- Sin emojis en UI core. Aceptable en marketing puntual o emails de bienvenida; no en errores, confirmaciones, ni admin.
Dónde aplica
Sección titulada «Dónde aplica»- Web — todo lo que el usuario ve en pantalla: títulos, descripciones, placeholders, helper text, errores de validación, empty states.
- Toasts — éxito, error, info, warning.
- Emails — bienvenida, confirmación de orden, dispute, password reset.
- Admin — sí, también la UI de admin. Si Yoel u otro admin la lee, sigue las reglas.
Tono según contexto
Sección titulada «Tono según contexto»| Contexto | Tono | Ejemplo |
|---|---|---|
| Marketing / hero | Entusiasta, breve | ”Encuentra cartas TCG en Chile.” |
| Acción / CTA | Imperativo claro | ”Publica una carta”, “Agrega al carrito” |
| Confirmación | Calmado, neutro | ”Tu publicación está activa.” |
| Error | Honesto, sin culpa al usuario | ”No pudimos cargar las cartas. Inténtalo de nuevo.” |
| Empty state | Sugerente, propositivo | ”Aún nadie vende esta carta. Sé el primero.” |
| Admin | Funcional, breve | ”Eliminar listing” (no “¿Estás 100% seguro?”) |
Microcopy frecuente
Sección titulada «Microcopy frecuente»| Concepto | Cómo lo decimos |
|---|---|
| Botón comprar | ”Comprar ahora” / “Agregar al carrito” |
| Botón vender | ”Vender esta carta” / “Publicar” |
| Estado vacío de listings | ”Aún nadie vende esta carta.” |
| Sin resultados de búsqueda | ”No encontramos cartas con ese nombre.” |
| Confirmación de orden | ”Tu compra está confirmada.” |
| Eliminar (destructivo) | “Eliminar” + AlertDialog con “Esta acción no se puede deshacer.” |
| Sesión expirada | ”Tu sesión expiró. Vuelve a iniciar sesión.” |
| Cargando | ”Cargando…” (sin gerundios largos) |
| Loading skeleton | sin texto, solo skeleton visual |
Errores
Sección titulada «Errores»Patrón: explicar qué pasó + qué puede hacer el usuario.
❌ Mal: “Error 500” / “Algo salió mal” / “Operación fallida”.
✅ Bien:
- “No pudimos publicar tu carta. Revisa la conexión e inténtalo de nuevo.”
- “Esa carta ya no está disponible. Otro comprador la tomó.”
- “Tu pago no se pudo procesar. Mercado Pago devolvió el dinero a tu medio de pago.”
Nunca culpar al usuario. Decir “no pudimos” en lugar de “no proporcionaste correctamente”.
Validaciones de formulario
Sección titulada «Validaciones de formulario»- Mensaje al lado del campo, no en alert.
- Imperativo amable: “Ingresa un email válido.” (no “Email inválido” — frío).
- Si el campo está bien, sin mensaje (no celebrar lo correcto).
Precios
Sección titulada «Precios»Formato chileno: $12.500 (punto como separador de miles, sin centavos, signo $ pegado).
Usar formatPriceCents(cents) de src/lib/format.ts. Nunca formatear manualmente en JSX.
Formato relativo en UI principal, absoluto en detalle:
- Listings activos / órdenes recientes → “hace 2 días”, “hace 3 horas”.
- Historial / admin → fecha absoluta con
Intl.DateTimeFormat('es-CL', ...).
Usar ClientDateText para fechas relativas en cliente (evita hydration mismatch).
Pluralización
Sección titulada «Pluralización»Manejar singular/plural explícitamente. No usar “(s)” ni “1 carta(s)”.
const text = count === 1 ? '1 carta' : `${count} cartas`;Multi-TCG
Sección titulada «Multi-TCG»Cuando hablamos de “cartas”, aplica a todos los TCGs. No decir “tu colección Pokémon” si la página es multi-TCG. Ver Multi-TCG para detalles.
Mismas reglas aplican. Adicional:
- Saludo: “Hola, [nombre]” (no “Estimado/a”).
- Despedida: ”— El equipo de tcgcards” (sin “Atte.”).
- Sin emojis salvo en bienvenida.
- Acción principal como botón, no como link enterrado en el texto.
Para gestión técnica de emails ver Email setup y la memoria del proyecto sobre Cloudflare Routing + Resend.