Source kinds, Learn tab and catalog update #9
@@ -6,29 +6,32 @@ or write a daily briefing. It's meant to replace the n8n → Discord workflow.
|
||||
|
||||
## Features (prototype)
|
||||
|
||||
- **Today**: all articles from the enabled sources in the last 12/24/48 h, newest
|
||||
first. Filter by language or source, pull to refresh.
|
||||
- **Learn**: articles from the enabled Learning sources (engineering blogs,
|
||||
system design explainers, AI research write-ups) from the last 14 days, newest
|
||||
first. Learning sources aren't part of the Briefing.
|
||||
- **Today**: all articles from the enabled News sources in the last 12/24/48 h,
|
||||
newest first. Filter by language or source, pull to refresh.
|
||||
- **Learn**: two sections, newest first. **Learning** has posts from the enabled
|
||||
Learning sources (engineering blogs, system design explainers, AI research
|
||||
write-ups) from the last 14 days; **Fun** has comics, memes and IT horror
|
||||
stories from the enabled Fun sources from the last 3 days. Neither is part of
|
||||
the Briefing.
|
||||
- **Reading in the app**: tapping an article opens a clean **reader view** (text,
|
||||
headings, lists, quotes, images) without ads or cookie banners. The globe icon
|
||||
switches to the **original page** in an in-app WebView, for paywalls or sites
|
||||
that block reader view. **Summarize with AI** uses the same downloaded text, so
|
||||
the summary is based on the full article, not just the RSS teaser. Links in the
|
||||
briefing open the same way.
|
||||
- **Briefing**: AI picks the 6–10 most important stories of the day, merges
|
||||
coverage from different outlets, and links every topic to its sources. Every
|
||||
briefing is saved on the device (`briefings.json` in the app's private
|
||||
storage); the history button lists them by month, tap to read, swipe to delete
|
||||
(with undo).
|
||||
- **Briefing**: AI picks the 6–10 most important stories of the day from the
|
||||
News sources, merges coverage from different outlets, and links every topic to
|
||||
its articles. Every briefing is saved on the device (`briefings.json` in the
|
||||
app's private storage); the history button lists them by month, tap to read,
|
||||
swipe to delete (with undo).
|
||||
- **Paid articles and ads hidden**: heise+ and Golem `(g+)` are recognized by
|
||||
their title; SPIEGEL+ and t3n Pro by a marker in the article page, which the app
|
||||
checks once per new article in the background (it reads only until the marker,
|
||||
and remembers results for 14 days). Paid-subscriber posts from Substack newsletters
|
||||
and remembers results for 14 days). Paid-subscriber posts from Sources on Substack
|
||||
(Interconnects, Ahead of AI, …) are recognized in the feed itself, where Substack
|
||||
cuts them off with a "Read more" link. Sponsored posts (`Anzeige:`) are hidden too.
|
||||
The feed header shows how many were hidden; both filters can be turned off.
|
||||
The header of Today and of each Learn section shows how many were hidden; both
|
||||
filters can be turned off.
|
||||
- **Ad and cookie-banner blocking** in the original-page view: requests to ~80
|
||||
ad/tracker hosts and the common consent managers (Sourcepoint, OneTrust,
|
||||
consentmanager, Usercentrics, Didomi, Cookiebot, …) are blocked, and a
|
||||
@@ -38,16 +41,17 @@ or write a daily briefing. It's meant to replace the n8n → Discord workflow.
|
||||
same request as Golem's own "Zustimmen" button (`/abo/setconsentcookie.php`,
|
||||
valid for a day) and reuses the cookie for reader view and the in-app page.
|
||||
With it off, the app shows the teaser and an "Open website anyway" option.
|
||||
- **Sources**: 23 curated feeds (13 German, 10 English), toggle each one, or add any
|
||||
RSS/Atom feed as a News, Learning or Fun source (it's validated before being
|
||||
added). The tab groups Sources by kind, then by language.
|
||||
- **Sources**: 42 curated Sources (13 German, 29 English): 23 News, 16 Learning
|
||||
and 3 Fun sources. Toggle each one, or add any RSS/Atom feed as a News,
|
||||
Learning or Fun source (it's validated before being added). The tab groups
|
||||
Sources by kind, then by language.
|
||||
- **Dark mode**: System / Light / Dark in Settings (applies instantly). The
|
||||
original-page view follows it too: when the phone is dark, sites use their own
|
||||
dark design or Android darkens them; when only the app is dark, the app inverts
|
||||
the page colours and keeps photos and videos as they are.
|
||||
- **Settings**: AI provider (off / Claude API / n8n webhook), model, summary
|
||||
language (German/English, whatever the source language), time window, paid/ad
|
||||
filters, ad and cookie-banner blocking.
|
||||
language (German/English, whatever the source language), time window for News,
|
||||
paid/ad filters, ad and cookie-banner blocking.
|
||||
|
||||
## Running
|
||||
|
||||
@@ -236,8 +240,8 @@ Reddit blocks reader view, so a meme shows the picture from the feed.
|
||||
```
|
||||
lib/
|
||||
main.dart App entry, theme
|
||||
data/default_sources.dart Curated feed list
|
||||
models/ Article, Source, DailyBriefing, AppSettings
|
||||
data/default_sources.dart Curated Source catalog (News, Learning, Fun)
|
||||
models/ Article, Source and its kind, DailyBriefing, AppSettings
|
||||
services/
|
||||
feed_parser.dart RSS 2.0 / RSS 1.0 / Atom parser, date parsing
|
||||
feed_service.dart Parallel fetching, dedupe, time window
|
||||
@@ -246,9 +250,17 @@ lib/
|
||||
claude_summarizer.dart Claude Messages API over HTTP
|
||||
n8n_summarizer.dart n8n webhook bridge
|
||||
storage.dart Settings, sources, briefing persistence
|
||||
paywall_service.dart Paid/sponsored detection (titles + page marker)
|
||||
paywall_service.dart Paid/sponsored detection (titles, Substack cut-off, page marker)
|
||||
content_blocking.dart Ad/tracker/consent blocklists for the WebView
|
||||
consent_service.dart Accepts consent walls (Golem) and keeps the cookies
|
||||
state/app_state.dart ChangeNotifier holding app state
|
||||
ui/ Screens (Today, Article, Briefing, Sources, Settings)
|
||||
ui/
|
||||
home_shell.dart Tabs: Today, Briefing, Learn, Sources, Settings
|
||||
feed_screen.dart Today: News articles with language/source filters
|
||||
briefing_screen.dart Briefing (briefing_history_screen.dart: saved ones)
|
||||
learn_screen.dart Learn: Learning and Fun sections
|
||||
sources_screen.dart Sources by kind and language, adding a Source
|
||||
settings_screen.dart Settings
|
||||
article_screen.dart Reader view and original page
|
||||
common.dart Shared helpers and widgets
|
||||
```
|
||||
Reference in new issue
Block a user