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

582 lines
14 KiB
Markdown

# 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`
---
## [P2] Ticket 09 — Sugerir links internos mientras se escribe
**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/`