Files
recall/backlog/recall-mvp3-tickets-claude-code.md
Daniel Arroyo 05b8f3910d feat: MVP-3 Sprint 1 - Usage tracking, smart dashboard, scoring boost
## Registro de Uso
- Nuevo modelo NoteUsage en Prisma
- Tipos de eventos: view, search_click, related_click, link_click, copy_command, copy_snippet
- Funciones: trackNoteUsage, getUsageStats, getRecentlyUsedNotes
- localStorage: recentlyViewed (últimas 10 notas)
- Rastreo de copias en markdown-content.tsx

## Dashboard Rediseñado
- 5 bloques: Recientes, Más usadas, Comandos recientes, Snippets recientes, Según actividad
- Nuevo src/lib/dashboard.ts con getDashboardData()
- Recomendaciones basadas en recentlyViewed

## Scoring con Uso Real
- search.ts: +1 per 5 views (max +3), +2 recency boost
- related.ts: mismo sistema de usage boost
- No eclipsa match textual fuerte

## Tests
- 110 tests pasando (usage, dashboard, related, search)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 16:03:14 -03:00

14 KiB

Recall — Tickets técnicos MVP-3 para Claude Code

Objetivo general

Convertir Recall en una herramienta indispensable de uso diario, enfocada en:

  • recuperación pasiva
  • ranking basado en uso real
  • sugerencias automáticas
  • mapa de conocimiento simple
  • reducción adicional de fricción en captura

EPIC 1 — Dashboard y uso diario

[P1] Ticket 01 — Rediseñar dashboard para valor inmediato

Objetivo
Hacer que la pantalla inicial devuelva valor sin necesidad de buscar.

Contexto
Recall ya soporta búsqueda avanzada, quick add, backlinks, notas relacionadas, tags y UX especializada por tipo. El siguiente paso es que el home priorice descubrimiento y reutilización.

Alcance

  • Reemplazar dashboard actual por bloques orientados a uso:
    • notas recientes
    • notas más usadas
    • comandos recientes
    • snippets recientes
    • sugerencias relacionadas a la actividad reciente
  • Crear endpoint o función de agregación para dashboard
  • Ordenar visualmente por relevancia, no solo por fecha

No incluye

  • métricas históricas avanzadas
  • personalización por usuario

Criterios de aceptación

  • Al abrir /, se ven al menos 4 bloques útiles
  • “Más usadas” no depende solo de updatedAt
  • Los bloques no rompen con base vacía
  • El dashboard responde correctamente con 0, pocas o muchas notas

Archivos sugeridos

  • src/app/page.tsx
  • src/components/dashboard.tsx
  • src/lib/dashboard.ts
  • src/app/api/dashboard/route.ts (opcional)

Notas técnicas

  • Reutilizar scoring y modelos existentes
  • Mantener SSR o server components donde tenga sentido

[P1] Ticket 02 — Registrar eventos de uso de notas

Objetivo
Capturar señales reales de uso para mejorar ranking y sugerencias.

Alcance

  • Crear modelo de uso o contador agregado
  • Registrar eventos mínimos:
    • apertura de nota
    • copia de comando
    • copia de snippet
    • uso desde quick add relacionado
  • Exponer utilidades para incrementar métricas

No incluye

  • tracking externo
  • analytics de terceros

Criterios de aceptación

  • Abrir una nota incrementa su contador de uso
  • Copiar contenido especializado suma señal adicional
  • La captura falla de forma segura sin romper la UI
  • Se puede consultar el uso agregado por nota

Archivos sugeridos

  • prisma/schema.prisma
  • src/lib/usage.ts
  • src/app/api/notes/[id]/usage/route.ts
  • src/components/note-card.tsx
  • src/components/markdown-content.tsx

Notas técnicas

  • Preferir modelo simple:
    • NoteUsage por evento o
    • campos agregados en Note
  • Si eliges eventos, agregar tarea/helper de agregación futura

[P1] Ticket 03 — Mostrar “según tu actividad reciente”

Objetivo
Crear recuperación pasiva basada en uso reciente.

Alcance

  • Detectar últimas notas abiertas/usadas
  • Sugerir notas relacionadas en dashboard
  • Crear bloque “Según tu actividad reciente”

Criterios de aceptación

  • Si hay actividad reciente, aparecen sugerencias relevantes
  • Si no hay actividad, el bloque se oculta o usa fallback
  • El bloque muestra por qué se recomienda una nota

Archivos sugeridos

  • src/lib/dashboard.ts
  • src/components/dashboard.tsx
  • src/lib/related.ts
  • src/lib/usage.ts

EPIC 2 — Ranking inteligente y recuperación pasiva

[P1] Ticket 04 — Extender scoring con señales de uso real

Objetivo
Mejorar la relevancia de búsqueda y recomendaciones con comportamiento real.

Alcance

  • Extender search.ts y/o related.ts para incluir:
    • cantidad de aperturas
    • copias
    • recencia de uso
    • frecuencia de uso
  • Ajustar pesos de scoring

No incluye

  • machine learning
  • embeddings

Criterios de aceptación

  • Una nota muy usada sube en empates razonables
  • El ranking sigue priorizando match textual fuerte
  • El score es explicable y testeable

Archivos sugeridos

  • src/lib/search.ts
  • src/lib/related.ts
  • src/lib/usage.ts
  • __tests__/search.test.ts
  • __tests__/related.test.ts

Notas técnicas

  • No permitir que uso alto eclipse resultados textualmente irrelevantes
  • Mantener scoring determinístico

[P1] Ticket 05 — Crear recomendaciones pasivas en detalle de nota

Objetivo
Que una nota devuelva otras útiles sin necesidad de nueva búsqueda.

Alcance

  • En vista de detalle agregar bloque:
    • “También podrías necesitar”
  • Basar sugerencias en:
    • backlinks
    • related score
    • uso conjunto
    • tags compartidos

Criterios de aceptación

  • El bloque aparece en detalle de nota
  • Muestra entre 3 y 6 sugerencias
  • Muestra razón resumida de recomendación
  • Excluye nota actual y duplicados

Archivos sugeridos

  • src/app/notes/[id]/page.tsx
  • src/components/related-notes.tsx
  • src/lib/recommendations.ts

[P2] Ticket 06 — Registrar co-uso entre notas

Objetivo
Detectar notas que suelen usarse juntas.

Alcance

  • Al abrir una nota, registrar relación con notas abiertas recientemente
  • Generar señal de co-uso
  • Exponer helper para recomendar “suelen usarse juntas”

Criterios de aceptación

  • El sistema puede devolver notas co-usadas
  • No hay duplicados ni relaciones simétricas inconsistentes
  • La implementación escala razonablemente para dataset pequeño/medio

Archivos sugeridos

  • prisma/schema.prisma
  • src/lib/co-usage.ts
  • src/lib/recommendations.ts

EPIC 3 — Sugerencias automáticas y enriquecimiento

[P1] Ticket 07 — Sugerir tags automáticamente al escribir

Objetivo
Reducir esfuerzo manual en clasificación.

Alcance

  • Analizar título y contenido del formulario
  • Sugerir tags existentes según:
    • coincidencias de términos
    • frecuencia histórica
    • tipo de nota
  • Mostrar sugerencias no invasivas

Criterios de aceptación

  • Al escribir contenido aparecen sugerencias útiles
  • El usuario puede aceptar o ignorar sugerencias
  • No se agregan tags automáticamente sin acción del usuario
  • Funciona con debounce

Archivos sugeridos

  • src/app/api/tags/suggest/route.ts
  • src/lib/tags.ts
  • src/components/note-form.tsx

Notas técnicas

  • Priorizar tags existentes para evitar proliferación innecesaria

[P2] Ticket 08 — Sugerir tipo de nota automáticamente

Objetivo
Acelerar creación cuando el usuario pega contenido ambiguo.

Alcance

  • Detectar patrones de contenido para sugerir tipo:
    • bloque de código → snippet
    • comando shell → command
    • lista de pasos → procedure
    • ingredientes/pasos → recipe
    • contexto/decisión → decision
  • Mostrar recomendación editable

Criterios de aceptación

  • El formulario propone un tipo probable
  • El usuario puede mantener o cambiar el tipo
  • No sobrescribe tipo si el usuario ya eligió uno manualmente

Archivos sugeridos

  • src/lib/type-inference.ts
  • src/components/note-form.tsx
  • __tests__/type-inference.test.ts

Objetivo
Fortalecer la red de conocimiento sin depender de memoria del usuario.

Alcance

  • Analizar contenido y detectar posibles referencias a notas existentes
  • Sugerir convertir términos en [[nota]]
  • Permitir inserción con un click

Criterios de aceptación

  • El sistema detecta coincidencias plausibles con títulos existentes
  • El usuario puede insertar el link sugerido
  • No genera links automáticos sin confirmación

Archivos sugeridos

  • src/lib/backlinks.ts
  • src/lib/link-suggestions.ts
  • src/components/note-form.tsx

EPIC 4 — Mapa de conocimiento simple

[P1] Ticket 10 — Crear panel “Conectado con”

Objetivo
Dar una vista de contexto inmediata sin construir un grafo complejo.

Alcance

  • En detalle de nota, agregar panel lateral o bloque:
    • backlinks
    • links salientes
    • relacionadas
    • co-usadas
  • Agrupar visualmente cada tipo de relación

Criterios de aceptación

  • La nota muestra claramente su red local
  • Se distinguen tipos de conexión
  • Los enlaces navegan correctamente
  • Con 0 conexiones el bloque no se rompe

Archivos sugeridos

  • src/app/notes/[id]/page.tsx
  • src/components/note-connections.tsx
  • src/lib/backlinks.ts
  • src/lib/related.ts
  • src/lib/recommendations.ts

[P2] Ticket 11 — Identificar notas centrales

Objetivo
Detectar nodos importantes del conocimiento personal.

Alcance

  • Calcular una métrica simple de centralidad usando:
    • backlinks
    • links salientes
    • uso
    • co-uso
  • Mostrar bloque “Notas centrales” en dashboard

Criterios de aceptación

  • El dashboard muestra las notas más centrales
  • La métrica está documentada y es reproducible
  • Los resultados cambian al aumentar conexiones reales

Archivos sugeridos

  • src/lib/centrality.ts
  • src/lib/dashboard.ts
  • src/components/dashboard.tsx
  • __tests__/centrality.test.ts

EPIC 5 — Captura aún más rápida

[P1] Ticket 12 — Mejorar Quick Add para texto multilinea

Objetivo
Permitir capturar cosas más complejas sin abrir el formulario completo.

Alcance

  • Soportar textarea o modo expandido en quick-add
  • Mantener parseo de prefijos y tags
  • Permitir pegar bloques de texto/código/listas

Criterios de aceptación

  • Se puede guardar una nota multilinea desde quick add
  • El parser mantiene tags y tipo correctamente
  • No rompe el flujo actual de una sola línea

Archivos sugeridos

  • src/components/quick-add.tsx
  • src/lib/quick-add.ts
  • src/app/api/notes/quick/route.ts

[P2] Ticket 13 — Pegado inteligente en Quick Add y formulario

Objetivo
Inferir estructura útil cuando el usuario pega contenido.

Alcance

  • Detectar si el pegado parece:
    • comando
    • snippet
    • checklist
    • markdown
  • Preformatear el contenido para mejor guardado
  • Ofrecer sugerencia de tipo o plantilla

Criterios de aceptación

  • Pegar código sugiere snippet
  • Pegar checklist preserva formato
  • Pegar comando corto no destruye el flujo rápido

Archivos sugeridos

  • src/lib/paste-analysis.ts
  • src/components/quick-add.tsx
  • src/components/note-form.tsx

EPIC 6 — Métricas y observabilidad de producto

[P2] Ticket 14 — Crear métricas internas simples

Objetivo
Medir qué partes del producto generan valor real.

Alcance

  • Crear panel o función para obtener:
    • notas más abiertas
    • tipos más usados
    • tags más usados
    • quick add vs formulario
  • Exponer datos al dashboard o settings

Criterios de aceptación

  • Las métricas se calculan sin servicios externos
  • Se pueden consultar desde UI
  • No impactan negativamente el rendimiento percibido

Archivos sugeridos

  • src/lib/metrics.ts
  • src/app/settings/page.tsx o src/app/page.tsx
  • src/app/api/metrics/route.ts

[P2] Ticket 15 — Instrumentar origen de creación de nota

Objetivo
Saber qué flujo usan más los usuarios.

Alcance

  • Registrar si la nota se creó desde:
    • quick add
    • formulario completo
    • importación
  • Guardar origen de creación
  • Exponerlo en métricas

Criterios de aceptación

  • Cada nota nueva guarda su origen
  • Las métricas muestran distribución por origen
  • No rompe notas existentes

Archivos sugeridos

  • prisma/schema.prisma
  • src/app/api/notes/route.ts
  • src/app/api/notes/quick/route.ts
  • src/app/api/export-import/route.ts
  • src/lib/metrics.ts

EPIC 7 — Calidad y estabilidad

[P1] Ticket 16 — Tests unitarios para ranking y recomendaciones MVP-3

Objetivo
Proteger la lógica nueva antes de seguir iterando.

Alcance

  • Tests para:
    • usage.ts
    • dashboard.ts
    • recommendations.ts
    • type-inference.ts
    • centrality.ts

Criterios de aceptación

  • Casos felices y bordes cubiertos
  • Tests reproducibles con datos determinísticos
  • Los pesos de scoring quedan documentados por test

[P1] Ticket 17 — Tests de integración para dashboard y usage tracking

Objetivo
Validar flujos reales del MVP-3.

Alcance

  • Probar:
    • apertura/uso de nota
    • dashboard enriquecido
    • recomendaciones
    • métricas base

Criterios de aceptación

  • Existen seeds o fixtures simples
  • Los endpoints responden con estructura consistente
  • No hay regresiones en APIs existentes

[P2] Ticket 18 — Feature flags internas para MVP-3

Objetivo
Introducir features progresivamente sin romper experiencia principal.

Alcance

  • Crear configuración simple para activar/desactivar:
    • centralidad
    • recomendaciones pasivas
    • sugerencias de tipo
    • sugerencias de links
  • Leer flags desde config local o env

Criterios de aceptación

  • Cada feature nueva puede apagarse sin romper la app
  • Los componentes respetan flags en servidor y cliente

Archivos sugeridos

  • src/lib/features.ts
  • src/app/layout.tsx
  • componentes afectados

Orden recomendado de implementación

Sprint 1

  • Ticket 02 — Registrar eventos de uso de notas
  • Ticket 04 — Extender scoring con señales de uso real
  • Ticket 01 — Rediseñar dashboard para valor inmediato
  • Ticket 03 — Mostrar “según tu actividad reciente”
  • Ticket 16 — Tests unitarios MVP-3 base

Sprint 2

  • Ticket 05 — Recomendaciones pasivas en detalle
  • Ticket 07 — Sugerir tags automáticamente
  • Ticket 10 — Panel “Conectado con”
  • Ticket 17 — Tests de integración

Sprint 3

  • Ticket 12 — Quick Add multilinea
  • Ticket 13 — Pegado inteligente
  • Ticket 08 — Sugerir tipo automáticamente
  • Ticket 09 — Sugerir links internos

Sprint 4

  • Ticket 06 — Registrar co-uso
  • Ticket 11 — Identificar notas centrales
  • Ticket 14 — Métricas internas simples
  • Ticket 15 — Origen de creación
  • Ticket 18 — Feature flags internas

Plantilla sugerida para cada issue en Claude Code

Título

[P1] Registrar eventos de uso de notas

Contexto

Recall ya cuenta con CRUD, búsqueda con scoring, quick add, backlinks, relaciones y tests. Ahora se necesita capturar señales reales de uso para mejorar ranking y recomendaciones.

Objetivo

Registrar aperturas y acciones clave sobre notas para alimentar el dashboard, la recuperación pasiva y el ranking inteligente.

Alcance

  • modelo o estructura de persistencia
  • utilidades de registro
  • integración mínima con UI y/o endpoints
  • tests asociados

No incluye

  • analytics de terceros
  • tracking publicitario
  • panel complejo de observabilidad

Criterios de aceptación

  • ...
  • ...
  • ...

Archivos a tocar

  • ...
  • ...

Notas técnicas

  • mantener compatibilidad con Prisma + SQLite
  • implementación segura ante fallos
  • no romper experiencia actual

Definición de Done

  • Código implementado y tipado
  • Tests pasando
  • Sin regresiones en CRUD/búsqueda/quick add
  • UI usable en estados vacío, normal y borde
  • Lógica desacoplada en lib/