AI Web FeedsAI Web FeedsOpen web AI reader
  • Features
    Documentation

    Search & Discovery

    Reader article browse plus source discovery through /reader, /sources, source pages, topic pages, and noindex article references

    Source: apps/web/content/docs/features/search.mdx

    AI Web Feeds uses two related search models inside the same product flow: source search for the catalog and post search for the generated article library.

    The Search & Discovery experience lives across the primary reader route /reader and the explicit source catalog route /sources. It answers two different questions from one workspace:

    • Source search helps you find feeds in the curated catalog.
    • Post search helps you find recent articles in the generated article library.
    • Autocomplete draws from both so suggestions stay useful while you type.

    /reader is the default reader route.

    • /reader opens the article workspace
    • /sources opens the explicit source picker
    • /sources/[sourceId] exposes crawlable source metadata
    • /topics/[topicId] exposes crawlable topic collections
    • /articles/[articleId] exposes noindex article attribution pages when a corpus exists

    Post Search

    Article browse and search

    Article browse and article search are backed by data/articles.generated.json, which is exported from articles in the runtime database.

    That means the reader workspace can:

    • search titles, summaries, feed titles, authors, canonical topics, and raw feed labels across the exported corpus
    • filter by feed, topics, source_type, and verified
    • page through results with cursor-based pagination
    • sort by latest, oldest, or source

    The article list is served by GET /api/articles, while ranked article search uses GET /api/search?scope=articles.

    Catalog search remains backed by the checked-in feed catalog.

    Use catalog mode when you want to:

    • filter feeds by source type, topic, or verification state
    • pin one or more feed IDs into the article workspace
    • move from source discovery into the reader without leaving the canonical workspace

    This keeps source discovery available even if the runtime corpus has not been generated yet.

    Autocomplete

    Autocomplete returns a shared suggestion set that can include:

    • feeds
    • articles
    • topics

    That helps the main search box stay useful whether you are starting from a publication name or a subject area.

    Refreshing the Current Results

    Use Refresh latest when you want to check for new posts from the current source list. The generated article library stays the base dataset, and fresh posts are layered on top only when they are truly new.

    Zero-Result Recovery

    When no results match, the app offers direct recovery actions such as:

    • clearing the post filters
    • resetting the current filters
    • opening /sources to review the current source list

    CLI and API

    Catalog search is also available through the CLI and API routes:

    # Optional backend for search analytics logging
    BACKEND_URL=http://localhost:8000

    Usage

    Web Interface

    Navigate to /reader:

    1. Type a query in the workspace search bar
    2. Keep or adjust the shared source-type, topic, verified, and pinned-feed filters
    3. Press Enter to refresh the article list, or use autocomplete suggestions
    4. Switch to /sources when you need to change the source list
    5. Use Refresh latest when you want a non-destructive live overlay on top of the corpus

    Keyboard Shortcuts:

    • Cmd/Ctrl+K: Focus search bar
    • Arrow keys: Navigate autocomplete suggestions
    • Enter: Execute search

    CLI

    # Catalog search
    uv run ai-web-feeds search "transformer attention" --limit 20
    uv run ai-web-feeds search autocomplete openai --limit 5

    Relevant web routes:

    // Corpus-backed article browse
    const browse = await fetch("/api/articles?q=agents&sort=latest&limit=24");
    
    // Source search
    const response = await fetch("/api/search?q=transformer&scope=sources&limit=20");
    const results = await response.json();
    
    // Article search
    const articleResults = await fetch("/api/search?q=neural%20networks&scope=articles&limit=20");
    
    // Autocomplete
    const suggestions = await fetch("/api/search/autocomplete?prefix=mach");

    Performance

    • Autocomplete: Shared catalog/corpus suggestions with cacheable GET responses
    • Source Search: Reads checked-in data without depending on a backend runtime
    • Article Browse/Search: Reads the generated corpus artifact instead of running live feed scans on demand

    Zero Results Handling

    When no article or catalog results are found inside the primary reader workspace, the UI now offers direct recovery actions instead of leaving the user at a dead end.

    • reset to the full catalog when a feed slice is over-constrained
    • jump straight back into the article workspace when catalog filters get too narrow
    • clear article-specific filters while preserving the underlying source list
    • open catalog mode with the current source constraints so you can inspect or widen them

    The UI still reinforces the broader guidance of:

    • returning to catalog mode for broader source discovery
    • fewer filters
    • a wider topic or source-type scope
    • rebuilding the generated corpus if the workspace reports that the artifact is unavailable

    Success Criteria

    • ✅ Reader /reader works without a required Python HTTP backend
    • ✅ Article browse and article search run across the generated corpus
    • ✅ Source results can jump directly into the article workspace inside the primary route model
    • ✅ Autocomplete suggestions are built from the same catalog/corpus model used by the reader
    Search & Discovery | AI Web Feeds