Communitygithub.com

YepAPI/habilidades

Comentarios en hilo, @menciones, reacciones, cola de moderación, IU optimista y paginación por cursor.

¿Qué es habilidades?

Esta habilidad implementa un sistema completo de comentarios y discusiones en hilo, diseñado para ser integrado en aplicaciones web modernas. Soporta comentarios anidados mediante una clave foránea `parent_id` en la tabla de comentarios, permitiendo respuestas jerárquicas. Incluye funcionalidades como @menciones para notificar a usuarios, reacciones con emojis (con restricciones de unicidad para evitar duplicados), y un sistema de moderación con estado (publicado, marcado, eliminado) y lista de palabras automáticas. La interfaz de usuario optimista agrega comentarios al instante y los confirma con el servidor, revirtiendo en caso de error. La paginación por cursor carga comentarios más antiguos al hacer scroll, y el borrado suave preserva el hilo mostrando marcadores de posición. Es ideal para desarrolladores que construyen sistemas de discusión escalables y con experiencia de usuario fluida.

Compatible con~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/YepAPI/skills/tree/HEAD/skills/comments-discussions

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Comentarios y Discusiones

Reglas

  • Comentarios en hilo: clave foránea parent_id en la tabla de comentarios — null para nivel superior, referencia al padre para respuestas
  • IU optimista: agregar comentario a la UI de inmediato, confirmar con respuesta del servidor, revertir en error
  • @menciones: analizar @usuario en el cuerpo del comentario — mostrar menú desplegable de búsqueda de usuario al escribir @, notificar a los usuarios mencionados
  • Reacciones: tabla separada reactions (commentId, userId, emoji) — restricción única en (commentId, userId, emoji)
  • Moderación: campo status (publicado, marcado, eliminado) — cola de moderación para contenido marcado, marcado automático con lista de palabras
  • Borrado suave: establecer marca de tiempo deletedAt — mostrar marcador de posición "eliminado" para comentarios con respuestas, ocultar completamente comentarios eliminados huérfanos
  • Paginación por cursor: cursor (commentId) + limit — ordenado por createdAt, cargar comentarios más antiguos al hacer scroll
  • Historial de ediciones: almacenar ediciones en tabla separada o arreglo JSON — mostrar indicador "editado" con la última marca de tiempo de edición

Patrones

// Modelo de datos del comentario
// comments: id, postId, authorId, parentId (nullable), body, status, deletedAt, createdAt, updatedAt
// reactions: id, commentId, userId, emoji, createdAt (unique: [commentId, userId, emoji])
// mentions: id, commentId, mentionedUserId, createdAt

// Consulta en hilo — obtener nivel superior + respuestas anidadas
const comments = await db.query.comments.findMany({
  where: and(eq(comments.postId, postId), isNull(comments.parentId)),
  with: {
    author: { columns: { id: true, name: true, avatar: true } },
    replies: {
      with: { author: { columns: { id: true, name: true, avatar: true } } },
      orderBy: [asc(comments.createdAt)],
    },
    reactions: true,
  },
  orderBy: [desc(comments.createdAt)],
  limit: 20,
});

// Agregar comentario optimista (React Query)
const addComment = useMutation({
  mutationFn: (body: string) => api.post(`/posts/${postId}/comments`, { body }),
  onMutate: async (body) => {
    await queryClient.cancelQueries({ queryKey: ["comments", postId] });
    const previous = queryClient.getQueryData(["comments", postId]);
    queryClient.setQueryData(["comments", postId], (old: Comment[]) => [
      { id: `temp-${Date.now()}`, body, author: currentUser, createdAt: new Date() },
      ...old,
    ]);
    return { previous };
  },
  onError: (_err, _body, context) => {
    queryClient.setQueryData(["comments", postId], context?.previous);
  },
  onSettled: () => queryClient.invalidateQueries({ queryKey: ["comments", postId] }),
});

Evitar

  • Profundidad de anidación ilimitada — limitar a 2-3 niveles, luego aplanar respuestas más profundas
  • Cargar todos los comentarios de una vez — usar paginación por cursor, especialmente en discusiones activas
  • Solo análisis de menciones del lado del cliente — validar y extraer menciones del lado del servidor para notificaciones
  • Eliminación dura de comentarios con respuestas — esto huérfana el hilo; usar borrado suave y mostrar marcador de posición
  • Reacciones sin restricciones únicas — permite reacciones duplicadas del mismo usuario

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

YepAPI/skills

WCAG 2.1 AA — semantic HTML, keyboard navigation, screen readers.

YepAPI/skills

Experiment setup, variant splitting, statistical significance, and feature flag integration.

YepAPI/skills

CRUD generators, data tables, user management, role-based access, and bulk operations.

YepAPI/skills

Monitor what ChatGPT and Gemini say about your brand using YepAPI.

YepAPI/skills

Queue workers with BullMQ/Inngest/Trigger.dev, job retries, dead letter queues, concurrency.

YepAPI/skills

Commander.js, interactive prompts with Clack, spinners, colors, config files, exit codes, and npm publishing.

YepAPI/skills

cmdk integration, Cmd+K trigger, fuzzy search, grouped actions, keyboard navigation, and dynamic action registration.

YepAPI/skills

Content planning with trend and sentiment data from YepAPI.

YepAPI/skills

Content calendar, keyword-driven planning, and content briefs.

YepAPI/skills

Theme switching with CSS variables, system preference detection, next-themes, and persistence.

YepAPI/skills

Competitive analysis between domains using YepAPI.

YepAPI/skills

Layout grids, KPI cards, data tables with sorting/filtering, sidebar navigation, and responsive breakpoints.

YepAPI/skills

Data encryption — TLS everywhere, AES-256-GCM for PII, bcrypt passwords, encrypted backups.

YepAPI/skills

Chart patterns with Recharts/Nivo/D3, responsive containers, color scales, and accessibility.

YepAPI/skills

Drizzle schema definition, push vs migrate, type-safe queries, relations, transactions, and prepared statements.

YepAPI/skills

Upload handling, resize/compress, CDN delivery, blur placeholders, and next/image patterns.

YepAPI/skills

Local business and Google Maps research using YepAPI.

YepAPI/skills

Cursor-based pagination, IntersectionObserver, virtualized lists with @tanstack/react-virtual, and scroll position restoration.

YepAPI/skills

Tenant isolation (row-level vs schema), subdomain routing, per-tenant config, and data partitioning.

YepAPI/skills

Chat UI components, streaming responses with AI SDK, context window management, and RAG patterns.

Skills relacionados