# Resumen del Proyecto - 2026-03-22 ## Nombre **Recall** - Sistema de gestión de notas personales ## Descripción Aplicación web para crear, editar, buscar y organizar notas personales con soporte para tags, tipos de notas, favoritos, pins, captura rápida, backlinks y relaciones entre notas. --- ## Tech Stack | Categoría | Tecnología | |-----------|------------| | Framework | Next.js 16.2.1 (React 19.2.4) | | Base UI | @base-ui/react 1.3.0 | | Database | SQLite con Prisma ORM | | Validation | Zod 4.3.6 | | Styling | Tailwind CSS 4 + CSS Variables | | Icons | Lucide React | | Markdown | react-markdown + remark-gfm | | Syntax Highlight | react-syntax-highlighter | | Toast | sonner 2.0.7 | | Testing | Jest | --- ## Estructura del Proyecto ``` src/ ├── app/ │ ├── api/ │ │ ├── export-import/route.ts │ │ ├── notes/ │ │ │ ├── route.ts │ │ │ ├── [id]/route.ts │ │ │ │ ├── backlinks/route.ts │ │ │ │ └── route.ts │ │ │ ├── quick/route.ts │ │ │ └── suggest/route.ts │ │ ├── search/route.ts │ │ └── tags/ │ │ ├── route.ts │ │ └── suggest/route.ts │ ├── notes/[id]/page.tsx │ ├── notes/page.tsx │ ├── new/page.tsx │ ├── edit/[id]/page.tsx │ ├── settings/page.tsx │ ├── layout.tsx │ └── page.tsx ├── components/ │ ├── ui/ # shadcn/ui components │ ├── dashboard.tsx │ ├── header.tsx │ ├── markdown-content.tsx # Markdown con syntax highlight │ ├── note-card.tsx │ ├── note-form.tsx # Form con campos guiados │ ├── note-list.tsx │ ├── quick-add.tsx # Ctrl+N quick add │ ├── related-notes.tsx │ ├── search-bar.tsx │ ├── delete-note-button.tsx │ └── tag-filter.tsx ├── lib/ │ ├── prisma.ts │ ├── utils.ts │ ├── validators.ts │ ├── errors.ts # Error handling estándar │ ├── search.ts # Búsqueda con scoring │ ├── quick-add.ts # Parser para captura rápida │ ├── tags.ts # Normalización y sugerencias │ ├── templates.ts # Plantillas por tipo │ ├── related.ts # Notas relacionadas │ ├── backlinks.ts # Sistema de backlinks │ └── guided-fields.ts # Campos guiados por tipo └── types/ └── note.ts ``` --- ## Modelo de Datos (Prisma) ### Note | Campo | Tipo | Descripción | |-------|------|-------------| | id | String | CUID único | | title | String | Título | | content | String | Contenido en Markdown | | type | String | command, snippet, decision, recipe, procedure, inventory, note | | isFavorite | Boolean | Favorita | | isPinned | Boolean | Fijada | | createdAt | DateTime | Creación | | updatedAt | DateTime | Última modificación | ### Tag | Campo | Tipo | Descripción | |-------|------|-------------| | id | String | CUID único | | name | String | Nombre único (lowercase) | ### Backlink Relación bidireccional entre notas via `[[nombre-nota]]` --- ## APIs | Método | Ruta | Descripción | |--------|------|-------------| | GET | `/api/notes` | Listar notas | | POST | `/api/notes` | Crear nota | | GET | `/api/notes/[id]` | Obtener nota | | PUT | `/api/notes/[id]` | Actualizar nota | | DELETE | `/api/notes/[id]` | Eliminar nota | | GET | `/api/notes/[id]/backlinks` | Backlinks recibidos | | POST | `/api/notes/quick` | Captura rápida | | GET | `/api/notes/suggest` | Sugerencias de notas | | GET | `/api/search` | Búsqueda con scoring | | GET | `/api/tags` | Listar/sugerir tags | | GET | `/api/tags/suggest` | Sugerencias por contenido | | GET/POST | `/api/export-import` | Exportar/importar | --- ## Funcionalidades Implementadas ### 1. Captura Rápida (Quick Add) - Shortcut global `Ctrl+N` - Sintaxis: `[tipo:][título] #tag1 #tag2` - Tipos: `cmd:`, `snip:`, `dec:`, `rec:`, `proc:`, `inv:` - API: `POST /api/notes/quick` ### 2. Búsqueda y Recuperación - Scoring: título exacto > parcial > favoritos > pinned > recencia - Búsqueda fuzzy (tolerante a errores de escritura) - Resaltado de términos con excerpt - Filtros por tipo y tags ### 3. Relaciones entre Notas - **Backlinks automáticos:** detecta `[[nombre-nota]]` - **Notas relacionadas:** scoring por tags, tipo, palabras - API: `GET /api/notes/[id]/backlinks` ### 4. Campos Guiados por Tipo - Command: comando, descripción, ejemplo - Snippet: lenguaje, código, descripción - Decision: contexto, decisión, alternativas, consecuencias - Recipe: ingredientes, pasos, tiempo - Procedure: objetivo, pasos, requisitos - Inventory: item, cantidad, ubicación ### 5. UX por Tipo - **Command:** botón copiar - **Snippet:** syntax highlighting - **Procedure:** checkboxes interactivos ### 6. Sistema de Tags - Normalización automática (lowercase, trim) - Autocomplete en formularios - Sugerencias basadas en contenido --- ## Tests ```bash npx jest __tests__/ # 46 passing, 3 skipped ``` --- ## Comandos ```bash npm install # Instalar dependencias npx prisma db push # Sincronizar schema con BD npm run dev # Desarrollo (localhost:3000) npm run build # Build producción ``` --- ## Rutas de la Aplicación | Ruta | Descripción | |------|-------------| | `/` | Dashboard | | `/notes` | Lista de notas | | `/notes/[id]` | Detalle de nota | | `/new` | Crear nota | | `/edit/[id]` | Editar nota | | `/settings` | Exportar/importar | --- ## Notas Técnicas - App Router (Next.js 13+) - Server Components para datos - Client Components para interactividad - Prisma con SQLite - Zod para validación - Errores API con formato `{ success, data, error, timestamp }`