Skip to content

user-defined channel watchlist — add any public Telegram channel by @username #1994

@ayad318

Description

@ayad318

Feature area

News panels / RSS feeds

Description

A @username input field in the Telegram Intel panel that lets users add any public Telegram channel to a personal watchlist, persisted in localStorage. The user types a username, sees a preview (channel title + member count), then clicks Add. Their saved channels appear as removable pills and their posts render alongside the curated feed.

No user login to Telegram required. The relay's existing authenticated GramJS session already has permission to read any public channel — this only needs two new GET routes on the relay and ~170 lines of frontend/service code.

User flow:

  1. User types @ukraine_news in a new input in the panel
  2. Frontend debounces 800ms → calls GET /telegram/resolve?username=ukraine_news
  3. Relay resolves via client.getEntity() → returns title + member count, cached in Redis 24h
  4. Panel shows: "Ukraine News · 89k members [+ Add]"
  5. User clicks Add → saved to localStorage under telegram:watchlist:v1
  6. Panel calls GET /telegram/channel?username=ukraine_news&limit=20
  7. Relay fetches via client.getMessages(), cached 60s (same TTL as curated feed)
  8. Posts appear with a removable pill tag

Problem it solves

The Telegram Intel panel is currently locked to the 26 curated OSINT channels hardcoded in the Railway relay.

This is especially limiting for:

  • Anyone who wants a specific telegram channel to look from
  • Researchers and analysts who follow known channels not in the curated list
  • Users outside the Middle East / Ukraine focus who want locally relevant OSINT channels

Alternatives considered

  • Telegram Login Widget: only provides user identity, not a channel-reading session. Adds per-user session storage complexity with no benefit since the relay session already covers public channels.
  • contacts.search keyword search: possible but Telegram rate-limits this aggressively. Better as a follow-up once username-based lookup is stable.
  • Expanding the hardcoded 26: doesn't scale and requires a relay redeploy for every user request.

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions