GUI Fact of The Day

Phase 1 — Source adapters & normalization

  • Implement ≥4 adapters (e.g., domain-specific RSS/JSON sites)
  • Query by user-defined domain (astronomy, biology, etc.)
  • Normalize common fields, such as title, description, url, image_url, published_at, source
  • Add short request timeouts

Functional result: A test run fetches recent items for chosen domains from ≥4 sources and prints normalized entries.


Phase 2 — Aggregation & interval fetch

  • Merge results per domain; remove duplicates (URL/title key)
  • Sort newest-first; cap items per domain
  • Interval scheduler (e.g., every 15 min) triggers background fetch
  • Keep a small in-memory cache to avoid rapid refetch

Functional result: On a timer, new items are aggregated, de-duplicated, and ready for display without blocking the app.


Phase 3 — GUI (Tkinter) feed viewer

  • Domain selector, interval control (15/30/60), “Refresh now”
  • Scrollable list of cards: title, source, time, description, optional image
  • Click to open article in browser
  • Non-blocking data fetch in background

Functional result: User selects domains and sees clickable, up-to-date cards with titles, descriptions, and images where available.


Phase 4 — Auto-refresh UX & Error handling

  • Auto-update feeds at the chosen interval
  • Display the “Last update” time
  • Brief banner on fetch failure; keep last good results
  • Lightweight preferences (domains, interval) saved to a small config

Functional result: Feeds update on schedule, the timestamp reflects updates, errors show briefly while prior results remain visible across restarts.