summaryrefslogtreecommitdiff
path: root/project_feedreader.md
blob: 77baa8bbafd7feaf7fefce361fd073467aecf203 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
---
name: project-feedreader
description: "FeeDreader (formerly \"Feeds\") Android RSS reader app (org.terst.feedreader) built for Peter — standalone greenfield project, separate from doot"
metadata: 
  node_type: memory
  type: project
  originSessionId: 375c858e-e817-41e8-a076-7920d22eab2b
  modified: 2026-09-07T07:08:26.805Z
---

Building "FeeDreader" (renamed 2026-07-23 from "Feeds" — pun on "fee dreader", avoiding
paywalls), a standalone Android RSS/Atom reader app for Peter, package `org.terst.feedreader`,
repo at `/workspace/feedreader` (separate git repo from doot, same local git identity).
Greenfield build authorized with "just go for it - greenfield, simple design, just build."

Core feature set: RSS/Atom subscriptions (now with OPML-category folder grouping +
case-insensitive sort, and a virtual "Last fetch failed" section), full article +
WebView/Readability.js reader-mode view, OPML import/export, keyword mute/highlight filters,
save-to-Stash integration (explicit action, not automatic), Android share-sheet target.
Explicitly excluded: local full-text search, home-screen widget, notifications, social
features. Has an owl-themed adaptive launcher icon (hand-authored vector, no external design
tool available) and a short paywall-avoidance philosophy note in Settings.

**Why:** Inoreader (his prior RSS reader) removed OPML export, forcing a migration off it — his ~107 feeds were pulled via Inoreader's Reader API (ClientLogin) and re-packaged as OPML for import into this app.

**Build trap (verified 2026-09-03): `/workspace/feedreader` has uncommitted
dependency-upgrade work sitting in the working tree** — AGP 8.3.2→8.13.2,
Kotlin 2.0.21→2.2.21, Gradle 8.6→9.5, compileSdk/minSdk/targetSdk 34→36, plus the
whole androidx family bumped (the BACKLOG's "AGP / compileSdk upgrade" item,
started but never finished or committed). Building without noticing produces a
**66MB APK instead of ~18MB** — minSdk 36 flips AGP to storing `classes.dex`
uncompressed — which exceeds the 30MB file-send limit. Before building a debug
APK to send, check `git status`; if those five files are dirty, stash them
(`git stash push -- app/build.gradle.kts build.gradle.kts gradle/wrapper/... gradlew`),
build, then `git stash pop` to leave the tree as found. Don't commit or discard
that work — it isn't finished and isn't mine.

**How to apply:** Peter's workflow for this app is hands-on testing rounds — he sideloads a build to his phone, uses it for a while, then sends a batch of bug reports/feature requests in one message. Expect iterative APK rebuild-and-resend cycles, not a single big spec upfront. Room DB schema is at **v11** as of 2026-09-18 (was v6 on 2026-07-23 when `FeedEntity.folder` was added); see `AppDatabase.kt`'s migration comments — several past migrations needed a full table rebuild (Room validates exact column match, not just superset) rather than a plain ADD COLUMN. See [[feedback_feedreader_apk_naming]], [[project_feedreader_emulator]] and [[project_feedreader_apk_publishing]].