chore: Various improvements and CI setup
- Add Jenkinsfile for CI/CD pipeline - Fix keyboard shortcut '?' handling for help dialog - Update note form and connections components - Add work mode toggle improvements - Update navigation history and usage tracking - Improve validators - Add session summaries
This commit is contained in:
342
resumen/2026-03-22-1942-resumen.md
Normal file
342
resumen/2026-03-22-1942-resumen.md
Normal file
@@ -0,0 +1,342 @@
|
||||
# Recall - Resumen del Proyecto
|
||||
|
||||
## Fecha
|
||||
2026-03-22
|
||||
|
||||
## Descripción
|
||||
Recall es una aplicación de gestión de conocimiento personal (PKM) para captura y recuperación de notas, comandos, snippets y conocimiento técnico.
|
||||
|
||||
## Stack Tecnológico
|
||||
- **Framework**: Next.js 16.2.1 con App Router + Turbopack
|
||||
- **Base de datos**: SQLite via Prisma ORM
|
||||
- **Lenguaje**: TypeScript
|
||||
- **UI**: TailwindCSS + shadcn/ui components
|
||||
- **Testing**: Jest (226 tests)
|
||||
- **Notificaciones**: Sonner (toasts)
|
||||
|
||||
## Estructura del Proyecto
|
||||
|
||||
```
|
||||
src/
|
||||
├── app/
|
||||
│ ├── api/
|
||||
│ │ ├── notes/ # CRUD, versions, quick, backlinks, links, suggest
|
||||
│ │ ├── tags/ # Tags y sugerencias
|
||||
│ │ ├── search/ # Búsqueda avanzada
|
||||
│ │ ├── usage/ # Tracking de uso y co-uso
|
||||
│ │ ├── metrics/ # Métricas internas
|
||||
│ │ ├── centrality/ # Notas centrales
|
||||
│ │ ├── export-import/ # Import/export JSON, Markdown, HTML
|
||||
│ │ ├── import-markdown/ # Importador Markdown mejorado
|
||||
│ │ └── capture/ # Captura externa (bookmarklet)
|
||||
│ ├── notes/[id]/ # Detalle de nota
|
||||
│ ├── edit/[id]/ # Edición de nota
|
||||
│ ├── new/ # Nueva nota
|
||||
│ ├── capture/ # Página de confirmación de captura
|
||||
│ └── settings/ # Configuración
|
||||
├── components/
|
||||
│ ├── ui/ # shadcn/ui components
|
||||
│ ├── dashboard.tsx # Dashboard inteligente
|
||||
│ ├── quick-add.tsx # Captura rápida
|
||||
│ ├── note-form.tsx # Formulario de nota
|
||||
│ ├── note-connections.tsx # Panel de conexiones
|
||||
│ ├── note-list.tsx # Lista de notas
|
||||
│ ├── keyboard-navigable-note-list.tsx # Lista con navegación teclado
|
||||
│ ├── keyboard-hint.tsx # Hint de atajos
|
||||
│ ├── related-notes.tsx # Notas relacionadas
|
||||
│ ├── version-history.tsx # Historial de versiones
|
||||
│ ├── track-note-view.tsx # Tracking de vistas
|
||||
│ ├── search-bar.tsx # Búsqueda en tiempo real
|
||||
│ ├── command-palette.tsx # Command palette (Ctrl+K)
|
||||
│ ├── keyboard-shortcuts-dialog.tsx # Diálogo de atajos
|
||||
│ ├── shortcuts-provider.tsx # Provider de shortcuts
|
||||
│ ├── work-mode-toggle.tsx # Toggle modo trabajo
|
||||
│ ├── draft-recovery-banner.tsx # Banner de recuperación
|
||||
│ ├── backup-restore-dialog.tsx # Restore con preview
|
||||
│ ├── backup-list.tsx # Lista de backups
|
||||
│ ├── bookmarklet-instructions.tsx # Instrucciones del bookmarklet
|
||||
│ ├── recent-context-list.tsx # Historial de navegación
|
||||
│ ├── track-navigation-history.tsx # Tracking de historial
|
||||
│ └── preferences-panel.tsx # Panel de preferencias
|
||||
├── hooks/
|
||||
│ ├── use-global-shortcuts.ts # Atajos globales
|
||||
│ ├── use-note-list-keyboard.ts # Navegación teclado en listas
|
||||
│ ├── use-unsaved-changes.ts # Guard de cambios sin guardar
|
||||
│ └── ...
|
||||
└── lib/
|
||||
├── prisma.ts # Cliente Prisma
|
||||
├── usage.ts # Tracking de uso y co-uso
|
||||
├── search.ts # Búsqueda con scoring
|
||||
├── query-parser.ts # Parser de queries avanzadas
|
||||
├── versions.ts # Historial de versiones
|
||||
├── related.ts # Notas relacionadas
|
||||
├── backlinks.ts # Sistema de enlaces [[wiki]]
|
||||
├── tags.ts # Normalización y sugerencias
|
||||
├── metrics.ts # Métricas de dashboard
|
||||
├── centrality.ts # Cálculo de centralidad
|
||||
├── type-inference.ts # Detección automática de tipo
|
||||
├── link-suggestions.ts # Sugerencias de enlaces
|
||||
├── features.ts # Feature flags
|
||||
├── validators.ts # Zod schemas
|
||||
├── errors.ts # Manejo de errores
|
||||
├── backup.ts # Snapshot de backup
|
||||
├── backup-storage.ts # IndexedDB storage
|
||||
├── backup-policy.ts # Política de retención
|
||||
├── backup-validator.ts # Validación de backups
|
||||
├── restore.ts # Restore de backups
|
||||
├── drafts.ts # Borradores locales
|
||||
├── work-mode.ts # Modo trabajo
|
||||
├── navigation-history.ts # Historial de navegación
|
||||
├── export-markdown.ts # Exportación Markdown
|
||||
├── export-html.ts # Exportación HTML
|
||||
├── import-markdown.ts # Importador Markdown
|
||||
└── external-capture.ts # Captura externa
|
||||
```
|
||||
|
||||
## Modelos de Datos
|
||||
|
||||
### Note
|
||||
```prisma
|
||||
model Note {
|
||||
id String @id @default(cuid())
|
||||
title String
|
||||
content String
|
||||
type String @default("note")
|
||||
isFavorite Boolean @default(false)
|
||||
isPinned Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
creationSource String @default("form")
|
||||
}
|
||||
```
|
||||
|
||||
### NoteUsage
|
||||
```prisma
|
||||
model NoteUsage {
|
||||
id String @id @default(cuid())
|
||||
noteId String
|
||||
eventType String
|
||||
query String?
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
```
|
||||
|
||||
### NoteCoUsage
|
||||
```prisma
|
||||
model NoteCoUsage {
|
||||
id String @id @default(cuid())
|
||||
fromNoteId String
|
||||
toNoteId String
|
||||
weight Int @default(1)
|
||||
}
|
||||
```
|
||||
|
||||
### NoteVersion
|
||||
```prisma
|
||||
model NoteVersion {
|
||||
id String @id @default(cuid())
|
||||
noteId String
|
||||
title String
|
||||
content String
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
```
|
||||
|
||||
### Backlink
|
||||
```prisma
|
||||
model Backlink {
|
||||
sourceNoteId String
|
||||
targetNoteId String
|
||||
}
|
||||
```
|
||||
|
||||
## APIs Principales
|
||||
|
||||
| Endpoint | Método | Descripción |
|
||||
|----------|--------|-------------|
|
||||
| `/api/notes` | GET, POST | Listar/crear notas |
|
||||
| `/api/notes/[id]` | GET, PUT, DELETE | CRUD de nota |
|
||||
| `/api/notes/[id]/versions` | GET, POST | Listar/crear versiones |
|
||||
| `/api/notes/[id]/versions/[vid]` | GET, PUT | Ver/restaurar versión |
|
||||
| `/api/notes/quick` | POST | Creación rápida |
|
||||
| `/api/notes/links` | GET | Sugerencias de enlaces |
|
||||
| `/api/search` | GET | Búsqueda con scoring |
|
||||
| `/api/tags` | GET | Listar/buscar tags |
|
||||
| `/api/tags/suggest` | GET | Sugerencias automáticas |
|
||||
| `/api/usage` | GET | Estadísticas de uso |
|
||||
| `/api/usage/co-usage` | GET | Notas co-usadas |
|
||||
| `/api/metrics` | GET | Métricas de dashboard |
|
||||
| `/api/centrality` | GET | Notas más centrales |
|
||||
| `/api/export-import` | GET, POST | Export/Import (JSON, Markdown, HTML) |
|
||||
| `/api/import-markdown` | POST | Importador Markdown mejorado |
|
||||
| `/api/capture` | POST | Captura externa segura |
|
||||
|
||||
## Features Implementadas
|
||||
|
||||
### MVP-1
|
||||
- CRUD completo de notas
|
||||
- Sistema de tags
|
||||
- Búsqueda básica
|
||||
|
||||
### MVP-2
|
||||
- Búsqueda avanzada con scoring
|
||||
- Quick Add con prefijos (cmd:, snip:, etc.)
|
||||
- Backlinks con sintaxis [[wiki]]
|
||||
- Formularios guiados por tipo de nota
|
||||
|
||||
### MVP-3
|
||||
- Usage tracking (vistas, clics, copias)
|
||||
- Dashboard inteligente
|
||||
- Scoring boost basado en uso
|
||||
- Sugerencias automáticas de tags
|
||||
- Panel "Conectado con"
|
||||
- Quick Add multilínea
|
||||
- Pegado inteligente con detección de tipo
|
||||
- Sugerencia automática de tipo de nota
|
||||
- Sugerencia de enlaces internos
|
||||
- Registro de co-uso entre notas
|
||||
- Métricas internas
|
||||
- Cálculo de notas centrales
|
||||
- Feature flags configurables
|
||||
|
||||
### MVP-4
|
||||
- Query parser para búsquedas avanzadas (`type:`, `tag:`, `is:favorite`, `is:pinned`)
|
||||
- Búsqueda en tiempo real con 300ms debounce
|
||||
- Navegación por teclado (↑↓ Enter ESC) estilo Spotlight
|
||||
- Dropdown de resultados con cache
|
||||
- Sidebar contextual con co-uso
|
||||
- Historial de versiones de notas
|
||||
|
||||
### MVP-5 (Completo)
|
||||
|
||||
**Sprint 1 - Confianza total:**
|
||||
- Sistema de backup automático (IndexedDB)
|
||||
- Política de retención (max 10 backups, 30 días)
|
||||
- Restore con preview y validación
|
||||
- Backup previo automático pre-destructivo
|
||||
- Guard de cambios sin guardar
|
||||
|
||||
**Sprint 2 - Flujo diario desde teclado:**
|
||||
- Command Palette global (Ctrl+K / Cmd+K)
|
||||
- Modelo de acciones para palette
|
||||
- Shortcuts globales (g h, g n, n, /, ?)
|
||||
- Navegación de listas por teclado (↑↓ Enter E F P)
|
||||
|
||||
**Sprint 3 - Contexto y continuidad:**
|
||||
- Sidebar contextual persistente mejorada
|
||||
- Modo trabajo con toggle
|
||||
- Autosave de borradores locales
|
||||
- Historial de navegación contextual
|
||||
|
||||
**Sprint 4 - Captura ubicua:**
|
||||
- Bookmarklet para capturar desde cualquier web
|
||||
- Página de confirmación de captura
|
||||
- Endpoint seguro /api/capture con rate limiting
|
||||
|
||||
**P2 - Exportación, Importación y Settings:**
|
||||
- Exportación Markdown con frontmatter
|
||||
- Exportación HTML legible
|
||||
- Importador Markdown mejorado (frontmatter, tags, wiki links)
|
||||
- Importador Obsidian-compatible
|
||||
- Centro de respaldo en Settings
|
||||
- Panel de preferencias (backup on/off, retención, work mode)
|
||||
- Tests de command palette y captura
|
||||
- Validaciones y límites (50MB backup, 10K notas, etc)
|
||||
|
||||
## Algoritmo de Scoring
|
||||
|
||||
```typescript
|
||||
// Search scoring
|
||||
score = baseScore + favoriteBoost(+2) + pinnedBoost(+1) + usageBoost
|
||||
|
||||
// Related notes scoring
|
||||
score = sameType(+3) + sharedTags(×3) + titleKeywords(max+3) + contentKeywords(max+2) + usageBoost
|
||||
|
||||
// Centrality score
|
||||
centrality = backlinks(×3) + outboundLinks(×1) + usageViews(×0.5) + coUsageWeight(×2)
|
||||
```
|
||||
|
||||
## Atajos de Teclado
|
||||
|
||||
| Atajo | Acción |
|
||||
|-------|--------|
|
||||
| `Ctrl+K` / `Cmd+K` | Command Palette |
|
||||
| `g h` | Ir al Dashboard |
|
||||
| `g n` | Ir a Notas |
|
||||
| `n` | Nueva nota |
|
||||
| `/` | Enfocar búsqueda |
|
||||
| `?` | Mostrar ayuda |
|
||||
| `↑↓` | Navegar listas |
|
||||
| `Enter` | Abrir nota |
|
||||
| `E` | Editar nota (en lista) |
|
||||
| `F` | Favoritar nota (en lista) |
|
||||
| `P` | Fijar nota (en lista) |
|
||||
|
||||
## Tests
|
||||
|
||||
**226 tests** cubriendo:
|
||||
- API routes (CRUD, search, tags, versions)
|
||||
- Search y scoring
|
||||
- Query parser
|
||||
- Notas relacionadas
|
||||
- Backlinks
|
||||
- Type inference
|
||||
- Link suggestions
|
||||
- Usage tracking
|
||||
- Dashboard
|
||||
- Version history
|
||||
- Command items
|
||||
- External capture
|
||||
- Navigation history
|
||||
|
||||
## Comandos
|
||||
|
||||
```bash
|
||||
npm run dev # Desarrollo
|
||||
npm run build # Build producción
|
||||
npm test # Tests (usar npx jest)
|
||||
npx prisma db push # Sync schema
|
||||
npx prisma studio # UI de BD
|
||||
```
|
||||
|
||||
## Configuración de Feature Flags
|
||||
|
||||
```bash
|
||||
FLAG_CENTRALITY=true
|
||||
FLAG_PASSIVE_RECOMMENDATIONS=true
|
||||
FLAG_TYPE_SUGGESTIONS=true
|
||||
FLAG_LINK_SUGGESTIONS=true
|
||||
```
|
||||
|
||||
## Estados de Implementación
|
||||
|
||||
| Feature | Estado |
|
||||
|---------|--------|
|
||||
| CRUD notas | ✅ |
|
||||
| Tags | ✅ |
|
||||
| Búsqueda avanzada | ✅ |
|
||||
| Quick Add | ✅ |
|
||||
| Backlinks [[wiki]] | ✅ |
|
||||
| Usage tracking | ✅ |
|
||||
| Dashboard inteligente | ✅ |
|
||||
| Versiones de notas | ✅ |
|
||||
| Command Palette | ✅ |
|
||||
| Shortcuts globales | ✅ |
|
||||
| Modo trabajo | ✅ |
|
||||
| Backup/Restore | ✅ |
|
||||
| Bookmarklet capture | ✅ |
|
||||
| Export Markdown/HTML | ✅ |
|
||||
| Import Markdown | ✅ |
|
||||
| Settings completo | ✅ |
|
||||
| Feature flags UI | ✅ |
|
||||
| Tests | ✅ (226) |
|
||||
|
||||
## Commits Recientes
|
||||
|
||||
```
|
||||
e66a678 feat: MVP-5 P2 - Export/Import, Settings, Tests y Validaciones
|
||||
8d56f34 feat: MVP-5 Sprint 4 - External Capture via Bookmarklet
|
||||
a40ab18 feat: MVP-5 Sprint 3 - Sidebar, Work Mode, and Drafts
|
||||
cde0a14 feat: MVP-5 Sprint 2 - Command Palette and Global Shortcuts
|
||||
8c80a12 feat: MVP-5 Sprint 1 - Backup/Restore system
|
||||
```
|
||||
Reference in New Issue
Block a user