Files
recall/resumen/2026-03-22-1750-resumen.md

6.4 KiB
Raw Permalink Blame History

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
  • Base de datos: SQLite via Prisma ORM
  • Lenguaje: TypeScript
  • UI: TailwindCSS + shadcn/ui components
  • Testing: Jest

Estructura del Proyecto

src/
├── app/                    # Next.js App Router
│   ├── api/               # API routes
│   │   ├── notes/         # CRUD, versions, quick
│   │   ├── 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
│   ├── notes/[id]/        # Detalle de nota
│   ├── edit/[id]/         # Edición de nota
│   └── new/               # Nueva nota
├── components/             # Componentes React
│   ├── 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
│   ├── 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
└── lib/                   # Utilidades
    ├── 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

Modelos de Datos

Note

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

model NoteUsage {
  id        String   @id @default(cuid())
  noteId    String
  eventType String
  query     String?
  createdAt DateTime @default(now())
}

NoteCoUsage

model NoteCoUsage {
  id         String @id @default(cuid())
  fromNoteId String
  toNoteId   String
  weight     Int    @default(1)
}

NoteVersion

model NoteVersion {
  id        String   @id @default(cuid())
  noteId    String
  title     String
  content   String
  createdAt DateTime @default(now())
}
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

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
  • Tests de historial de versiones

Algoritmo de Scoring

// 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)

Tests

211 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

Comandos

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

FLAG_CENTRALITY=true
FLAG_PASSIVE_RECOMMENDATIONS=true
FLAG_TYPE_SUGGESTIONS=true
FLAG_LINK_SUGGESTIONS=true

Roadmap

  • Panel de métricas visible en UI
  • Configuración de feature flags en Settings
  • Visualización del grafo de conocimiento
  • Exportación mejorada (Markdown, HTML)
  • Tests E2E