articleCountLine, RefreshButton and RefreshableList live in common.dart.
LearnScreen._describe becomes _windowLabel there, and LearnScreen._section
is _kindSection like in SourcesScreen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- SourceKind carries whether it feeds the Briefing, its fixed time window
(Learning, Fun) and whether reading is picture-led (Fun); windowOf and
the reader read from it.
- AppState.briefingArticles is the one place that says only News sources
feed the Briefing; generateBriefing and the Briefing tab use it.
- articlesOf, hiddenCountOf and briefingArticles share one filter.
- FeedService.fetchAll takes windowOf: like AppState.windowOf.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The class and its file (lib/models/source.dart) follow the glossary term.
Persisted JSON keys are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps the Learning catalog from #6 and puts the Fun group after it, in the
catalog and the README. Adds the end-to-end check #4 left for Fun: a custom
Fun feed added on the Sources tab shows up in the Learn tab's Fun section,
not in Today.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Learn tab gets a Fun section below Learning with the last 3 days of
Fun articles. Fun articles stay out of Today and the Briefing. New curated
Fun sources: xkcd and The Daily WTF (on by default) and r/ProgrammerHumor
top of the day (off).
Reader view for Fun articles shows the picture whole in the body instead
of as a 16:9 banner cropped to fit, and doesn't call a comic without text
a teaser. When the page gives no picture (Reddit blocks reader view), the
feed's image is shown. The extractor now keeps an image's title text as a
caption (xkcd's last joke), images in blockquotes and behind in-page
anchors (The Daily WTF's Error'd screenshots), drops image maps and
license boxes, and on a text tie prefers the page with more blocks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Sources tab shows News, Learning and Fun sections, each split by
language; kinds or languages without Sources get no header. The add-feed
dialog has a kind picker that defaults to News.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every Source now has a kind: News, Learning or Fun. Curated Sources default
to News, and custom Sources persist their kind (ones saved before default
to News). Each kind has its own time window: News follows the 12/24/48 h
setting, Learning reaches back 14 days, Fun 3 days.
A new Learn tab between Briefing and Sources lists Learning articles with
the same paid/sponsored filters and reader view as Today. It is built from
a list of kinds so a Fun section can follow. Today and the Briefing only
use News. ByteByteGo is the first Learning source, on by default.
The home shell names its tabs instead of using hard-coded indexes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Flutter app that collects daily tech news from German and English RSS/Atom
feeds, with a reader view, AI article summaries and daily briefings (Claude
API or n8n webhook), paywall/sponsored filtering and ad/consent blocking.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>