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



The problem
Most note and task apps make you decide where something belongs before you can save it: pick a notebook, a project, a list, a tag. That decision cost is what stops most captures from happening. CoreOS removes it: you write free-form text, it is persisted on device, and AI organizes it later — never before, never at the expense of the original.
Key technical decisions
Persist before classifying
The SQLite insert happens before any AI call. If the model fails, the capture stays pending and is retryable from Today: raw text is never lost.
raw_text is canonical
The LLM only emits metadata (type, suggested title, tags): it never rewrites, summarizes or splits the user text. Notes store the original verbatim.
Local-first, no backend
No server, no accounts, no cloud sync. SQLite lives on device and API keys stay in expo-secure-store (iOS Keychain / Android EncryptedSharedPreferences).
Real search: FTS5
A notes_fts virtual table with porter unicode61 tokenizer and bm25 ranking, kept in sync by triggers on INSERT/UPDATE/DELETE.
What I actually built
- —A personal V1 with three tabs: Today (overdue-first tasks plus pending captures with retry), Capture (a single text field) and Library (notes grouped by recency with full-text search).
- —An async classifier that dispatches captures into five types (note, expense, task, habit, sleep) with client-side schema enforcement and an optimistic lock in the same transaction.
- —Capture beyond the app: iOS share sheet and coreos://capture deeplink.
- —Markdown editor with autosave, pin, soft-delete with undo, and date normalization for free-form inputs (today, tomorrow, d/m/y, ISO).
- —A pipeline with documented invariants: sequential processing, exported functions that never throw, and a mutex against concurrent batches.
Trade-off
Data without UI (for now). The classifier already writes the expense, habit and sleep tables, but their management screens are intentionally out of V1: I prefer capturing structured data today and designing the UI later over delaying the core pipeline. The cost is honest — there is data you cannot browse in the app yet.
Current state
v0.1.0 · personal V1 in active development. Not a commercial product. No automated test suite yet: quality rests on TypeScript strict, ESLint and typecheck before every change.
Links
How I work here: define before building — AGENTS.md with explicit limits for agents, TypeScript strict and ESLint. CoreOS works on main without PRs; the evidence is the upfront definition.View projects →