feat: MVP-4 Sprint 1 - Query parser, real-time search, keyboard navigation
- 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>
This commit is contained in:
252
backlog/recall-mvp4-tickets.md
Normal file
252
backlog/recall-mvp4-tickets.md
Normal file
@@ -0,0 +1,252 @@
|
||||
# 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 docker` filtra correctamente
|
||||
- `tag:api error` funciona
|
||||
- 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)
|
||||
Reference in New Issue
Block a user