~/cases/owly-newsActive

Owly News

One Rust core, two interfaces — adding optional AI without making it the application.

Solo Engineer · Open Source Project · 2025 - present

Architecture

owly-core owns domain behavior, SQLite persistence, refresh orchestration, events and the summarizer boundary. Tauri/Svelte and ratatui stay at the edges.

Graceful degradation

Provider health gates summarization; unavailable providers leave articles retryable while feeds remain usable.

Trade-offs

A shared core prevents behavioral drift, but frontend adapters must preserve the core boundaries.

  • Feeds enter the shared Rust core through ingest and refresh.
  • SQLite, search and events remain in owly-core.
  • Tauri/Svelte and ratatui frontends consume the same behavior; summarization is optional.
Owly News · shared core

Decisions & trade-offs

DecisionWhyTrade-off
Summarization behind a traitThe feed reader remains useful when an LLM is unavailable.Pending work and retries need explicit state.

Result

  • The architecture documents bounded refresh concurrency, SQLite WAL, typed Tauri events and a pure TUI state machine.

Evidence

Shared behavior
Rust core

Desktop and terminal frontends

Local persistence
SQLite

WAL and concurrent access

LLM boundary
Optional

Feeds continue without summarization

What I'd change today

AI is most useful here as a replaceable capability around a dependable reader core.