CoreOS
Capture first. Organize later.
v0.1.0 · V1 personal · En desarrollo activo



El problema
La mayoría de apps de notas y tareas te obligan a decidir dónde va algo antes de guardarlo: elige cuaderno, proyecto, lista, etiqueta. Ese coste de decisión es lo que frena la mayoría de capturas. CoreOS lo elimina: escribes texto libre, se persiste en el dispositivo y la IA lo organiza después — nunca antes, nunca a costa del original.
Decisiones técnicas clave
Persistir antes de clasificar
El insert en SQLite ocurre antes de cualquier llamada a la IA. Si el modelo falla, la captura queda pending y se reintenta desde Today: el texto crudo nunca se pierde.
raw_text es canónico
El LLM solo emite metadatos (tipo, título sugerido, tags): nunca reescribe, resume ni parte el texto del usuario. En notas, el original se guarda verbatim.
Local-first sin backend
Sin servidor, sin cuentas, sin sync en la nube. SQLite vive en el dispositivo y las API keys en expo-secure-store (iOS Keychain / Android EncryptedSharedPreferences).
Búsqueda real: FTS5
Tabla virtual notes_fts con tokenizer porter unicode61 y ranking bm25, sincronizada por triggers en INSERT/UPDATE/DELETE.
Qué construí realmente
- —Una V1 personal con tres pestañas: Today (tareas con overdue-first y capturas pendientes con reintento), Capture (un único campo de texto) y Library (notas agrupadas por recencia con búsqueda full-text).
- —Un clasificador asíncrono que despacha capturas a cinco tipos (nota, gasto, tarea, hábito, sueño), con schema forzado en cliente y lock optimista en la misma transacción.
- —Captura desde fuera de la app: share sheet de iOS y deeplink coreos://capture.
- —Editor Markdown con autosave, pin, soft-delete con undo y normalización de fechas en texto libre (hoy, mañana, d/m/y, ISO).
- —Pipeline con invariantes documentadas: procesado secuencial, funciones exportadas que nunca lanzan excepciones y mutex contra lotes concurrentes.
Trade-off
Datos sin UI (por ahora). El clasificador ya escribe las tablas de gastos, hábitos y sueño, pero sus pantallas de gestión quedan fuera de la V1 a propósito: prefiero capturar el dato estructurado hoy y diseñar la UI después, antes que retrasar el pipeline central. El coste es honesto: hay datos que aún no se pueden consultar desde la app.
Estado actual
v0.1.0 · V1 personal en desarrollo activo. No es un producto comercial. Todavía no hay suite de tests automatizada: la calidad se apoya en TypeScript strict, ESLint y typecheck antes de cada cambio.
Enlaces
Cómo trabajo aquí: definir antes de construir — AGENTS.md con límites explícitos para agentes, TypeScript strict y ESLint. CoreOS trabaja en main sin PRs; la evidencia es la definición previa.Ver proyectos →