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.