- Add query-parser.ts with AST for type:, tag:, is:favorite, is:pinned filters - Integrate parser into search API - Add real-time search with 300ms debounce in search-bar - Add keyboard navigation (↑↓ Enter ESC) for Spotlight-like UX - Add dropdown results display with loading state - Add 22 tests for query parser Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.1 KiB
4.1 KiB
Recall — Tickets técnicos MVP-4 (Camino Producto)
🎯 Objetivo
Convertir Recall en una herramienta confiable, rápida y diaria, enfocada en:
- búsqueda tipo Google personal
- navegación instantánea
- confianza (historial + backup)
- contexto activo
🧩 EPIC 1 — Búsqueda avanzada (Google personal)
[P1] Ticket 01 — Parser de query avanzada
Objetivo
Permitir búsquedas expresivas tipo: docker tag:backend type:command
Alcance
- Crear
src/lib/query-parser.ts - Soportar:
- texto libre
type:tag:is:favorite,is:pinned
- Devolver AST simple
Criterios
- Queries válidas parsean correctamente
- Soporta combinación de filtros + texto
- Tests unitarios incluidos
[P1] Ticket 02 — Integrar query avanzada en search
Objetivo
Aplicar parser en /api/search
Alcance
- Filtrar por AST antes de scoring
- Mantener scoring existente
Criterios
type:command dockerfiltra correctamentetag:api errorfunciona- No rompe búsqueda actual
[P1] Ticket 03 — Búsqueda en tiempo real
Objetivo
Actualizar resultados mientras el usuario escribe
Alcance
- Debounce en
search-bar.tsx - Fetch automático
- Estado loading ligero
Criterios
- Resultados cambian en <300ms
- No bloquea UI
[P1] Ticket 04 — Navegación por teclado en búsqueda
Objetivo
UX tipo Spotlight
Alcance
- ↑ ↓ para moverse
- Enter para abrir
- ESC para cerrar
Criterios
- Navegación sin mouse
- Estado seleccionado visible
🧠 EPIC 2 — Contexto activo
[P1] Ticket 05 — Sidebar contextual inteligente
Objetivo
Mostrar contexto dinámico mientras navegas
Alcance
- Crear
note-context-sidebar.tsx - Mostrar:
- relacionadas
- co-uso
- backlinks
- recientes
Criterios
- Siempre muestra contenido relevante
- No rompe layout responsive
[P2] Ticket 06 — Sugerencias dinámicas en lectura
Objetivo
Recomendar contenido mientras lees
Alcance
- Hook en
notes/[id]/page.tsx - Actualizar sugerencias según scroll/uso
Criterios
- Sugerencias cambian según contexto
- No afecta performance
🔐 EPIC 3 — Confianza total
[P1] Ticket 07 — Historial de versiones
Objetivo
Permitir ver y revertir cambios
Alcance
- Modelo
NoteVersion - Guardar snapshot en cada update
- Endpoint
/api/notes/[id]/versions
Criterios
- Se pueden listar versiones
- Se puede restaurar versión
- No rompe edición actual
[P1] Ticket 08 — UI historial de versiones
Objetivo
Visualizar cambios
Alcance
- Vista en
notes/[id] - Mostrar lista de versiones
- Botón restaurar
Criterios
- UX clara
- Confirmación antes de revertir
[P2] Ticket 09 — Backup automático
Objetivo
Evitar pérdida de datos
Alcance
- Export JSON automático
- Guardar en local (descarga o storage)
Criterios
- Backup se genera periódicamente
- No bloquea app
⚡ EPIC 4 — Rendimiento y UX
[P1] Ticket 10 — Cache de resultados de búsqueda
Objetivo
Reducir latencia
Alcance
- Cache en cliente por query
- Invalidación simple
Criterios
- Queries repetidas son instantáneas
- No datos stale críticos
[P2] Ticket 11 — Preload de notas frecuentes
Objetivo
Abrir notas más rápido
Alcance
- Prefetch en hover/listado
- Usar Next.js prefetch
Criterios
- Navegación instantánea en notas frecuentes
🧪 EPIC 5 — Calidad
[P1] Ticket 12 — Tests query avanzada
- parser
- integración search
[P1] Ticket 13 — Tests historial versiones
- creación
- restore
- edge cases
[P2] Ticket 14 — Tests navegación teclado
- selección
- acciones
🗺️ Orden sugerido
Sprint 1
- Query parser
- Integración search
- Real-time search
- Tests base
Sprint 2
- Navegación teclado
- Sidebar contextual
- Cache búsqueda
Sprint 3
- Historial versiones (API + UI)
Sprint 4
- Backup automático
- Preload notas
- Tests finales
✅ Definition of Done
- Feature usable sin bugs críticos
- Tests pasando
- No regresiones
- UX fluida (<300ms interacción)