You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: DownloadableCodeProjects/standalone-lab-projects/sdd-get-started-rss-feed/StakeholderDocuments/AppFeatures.md
+93-11Lines changed: 93 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,41 @@
1
-
2
1
# App features
3
2
4
3
This RSS feed reader is designed around three themes: making it easy to subscribe to sources, making it easy to keep up with new items, and giving you control so your feed doesn’t become overwhelming.
5
4
6
-
## Must have features (single-user, local-only)
5
+
## MVP cutline (deliver first)
6
+
7
+
The MVP is the smallest end-to-end slice that proves the core workflow (subscribe → fetch → store → read) with minimal moving parts.
8
+
9
+
For the MVP, the app MUST:
10
+
11
+
- Let a user add a feed subscription by pasting a feed URL (and remove it later).
12
+
- Let a user manually refresh a feed and see a newest-first list of items.
13
+
- Let a user open an item’s original link.
14
+
- Store subscriptions and items locally so they remain available after restart.
15
+
- Show clear per-feed errors (fetch/parse/etc.) without crashing.
16
+
17
+
For the MVP, the app MAY:
18
+
19
+
- Render item content as plain text only (title + summary) to reduce early complexity.
20
+
- Treat duplicate items as a later hardening step (best-effort is acceptable initially).
21
+
22
+
## MVP behavior rules (defaults)
23
+
24
+
To keep behavior predictable and avoid “mystery waiting”, the MVP follows a few simple rules:
25
+
26
+
- Refresh is manual: clicking “refresh now” fetches the selected feed immediately.
27
+
- The system should not fetch a feed repeatedly in a tight loop. If a feed was refreshed very recently, the backend should throttle additional refresh attempts.
28
+
- Network calls must have timeouts so one slow feed does not stall the system.
29
+
30
+
In MVP these values are not user-configurable; they can be hard-coded:
31
+
32
+
- Manual refresh throttle per feed: 60 seconds
33
+
- HTTP request timeout: 10 seconds
34
+
- Max concurrent feed fetches: 5
35
+
36
+
Background polling and scheduling are intentionally post-MVP.
37
+
38
+
## V1 scope (post-MVP, single-user, local-only)
7
39
8
40
At a minimum, the app will let a single user subscribe to RSS/Atom feeds, fetch updates, and read items with a clean read/unread workflow. Subscriptions can be managed directly, including removing feeds you no longer want.
9
41
@@ -17,30 +49,81 @@ Reliability and safety are part of the must-haves. The app should handle common
17
49
18
50
Finally, the app will support basic organization by allowing feeds to be grouped into folders/collections (for example: News, Tech, Work).
19
51
20
-
### MVP (build this first)
52
+
### Website-to-feed discovery behavior (post-MVP)
53
+
54
+
When a user pastes a website URL (not a direct feed URL), the system should attempt to discover the site’s RSS/Atom feed by:
55
+
56
+
- Following redirects.
57
+
- Looking for standard feed link tags in the HTML (for example `<link rel="alternate">` RSS/Atom entries).
58
+
59
+
If discovery fails, the UI should tell the user a feed could not be found and suggest pasting a direct feed URL.
60
+
61
+
### De-duplication behavior
21
62
22
-
For the first working version, we will focus on a small subset that proves the end-to-end flow:
63
+
The system should avoid storing the same item multiple times within a feed. For the MVP, best-effort de-duplication is acceptable; stronger guarantees are post-MVP.
23
64
24
-
Users can subscribe to a feed by URL, remove a subscription, and manually refresh a feed to pull in new items. The backend will also poll feeds periodically in the background.
65
+
When computing identity:
25
66
26
-
The app stores feeds and items locally and shows a per-feed list of items (newest first). Users can mark items read/unread and mark all as read per feed. Users can open the original article link. The app handles common feed errors without crashing, and it avoids storing duplicate items.
67
+
- Prefer a stable unique identifier from the feed (GUID/id) when present.
68
+
- Otherwise fall back to a reasonable composite (for example link + published date).
27
69
28
-
For the MVP, we are intentionally keeping scope tight. We will not build accounts, sync, notifications, OPML import/export, or advanced filtering rules until the core reader experience is stable.
70
+
### HTTP caching optimization (optional)
71
+
72
+
If a feed returns caching headers (ETag / Last-Modified), the backend may use conditional requests to reduce bandwidth. This is an optimization and not required for the MVP.
73
+
74
+
### MVP (build this first)
75
+
76
+
For the first working version, we will focus on the MVP cutline described above.
77
+
78
+
Sequencing: deliver the manual end-to-end flow first (subscribe → refresh → items). Only once that success-path works reliably should we add discovery, background polling, read/unread, folders, and other “daily use” features.
79
+
80
+
For the MVP, we are intentionally keeping scope tight. We will not build accounts, sync, notifications, OPML import/export, advanced filtering rules, background polling, discovery, folders, or read/unread until the core reader experience is stable.
29
81
30
82
### MVP definition of done
31
83
32
84
The MVP is complete when the following are true:
33
85
34
86
- A user can add a feed by URL and remove it later.
35
87
- A user can refresh a feed on demand and see newly fetched items.
36
-
- The backend polls feeds in the background on a schedule.
37
88
- Items are stored locally and remain available after restarting the app.
38
89
- The UI shows items per feed in newest-first order.
39
90
- A user can open the original article link.
40
-
- A user can mark items as read and mark all items as read for a feed.
41
-
- The app avoids creating duplicate entries for the same item.
42
91
- Feed failures show clear errors and do not crash the app.
43
92
93
+
The following are explicitly post-MVP (V1) features:
94
+
95
+
- Background polling
96
+
- Website-to-feed discovery
97
+
- Read/unread and mark-all-read
98
+
- Folders/collections
99
+
- Strong de-duplication guarantees
100
+
101
+
## Practical notes for running the MVP (developer-facing)
102
+
103
+
- The UI and API run on different localhost ports; that is expected. The UI must be configured with the API base URL.
104
+
- Items appear only after a refresh has successfully run at least once for that subscription.
105
+
- Feed URLs should be treated as user input: trim whitespace and normalize before storing to avoid hard-to-debug issues (for example, a trailing space).
106
+
107
+
## Practical verification flow (developer-facing)
108
+
109
+
Use at least one known-good feed for the first success-path verification before trying stricter or rate-limited sources.
Some popular sources may block or rate-limit automated clients (commonly returning 403/429 or HTML instead of RSS). Treat those as robustness tests, not the first success-path test.
126
+
44
127
## Nice to have features
45
128
46
129
Once the core reader experience is stable, we can improve organization and reading flow with tags/labels, saved/starred (“read later”) items, and strong keyboard shortcuts. We can also offer multiple layouts (compact list, magazine/cards, etc.) so users can choose how dense the UI feels.
@@ -64,4 +147,3 @@ Notifications can be added later for high-priority feeds or keyword matches.
64
147
Integrations and sharing features can come later as well. This includes sharing items to email and chat tools (for example Slack/Teams), sending items to read-later services (for example Pocket/Instapaper/OneNote), and offering quick actions like copying a clean link. It can also include opening links in the system browser or in an in-app browser view. For some workflows, RSS-to-email could be added so selected feeds (or filtered items) are forwarded to an email inbox.
65
148
66
149
Finally, as privacy and data ownership features mature, we can explicitly focus on minimal tracking and clear data ownership/export (for example, ensuring users can always export their data in a usable form).
Copy file name to clipboardExpand all lines: DownloadableCodeProjects/standalone-lab-projects/sdd-get-started-rss-feed/StakeholderDocuments/MVPSystemRules.md
Copy file name to clipboardExpand all lines: DownloadableCodeProjects/standalone-lab-projects/sdd-get-started-rss-feed/StakeholderDocuments/ProjectGoals.md
+38-7Lines changed: 38 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,9 +16,38 @@ Multi-device sync, first-class mobile support, and expanded offline capabilities
16
16
17
17
## Delivery approach
18
18
19
-
Development will follow a spec-driven workflow using GitHub Spec Kit. Each meaningful slice of work should have a lightweight spec that describes the user outcome, acceptance criteria, and any important edge cases (for example, malformed feeds or duplicate items).
19
+
We will build in small increments, validating behavior at each step, rather than attempting a large implementation in a single pass.
20
20
21
-
We will build in small increments, validating behavior at each step, rather than attempting a large implementation in a single pass. Specs will guide implementation order and help keep scope under control.
21
+
Each increment should be described in a short, testable way:
22
+
23
+
- One primary user outcome.
24
+
- A handful of acceptance scenarios (a clear success-path plus 2–3 high-value failures).
25
+
- The edge cases we are *not* solving yet.
26
+
27
+
To keep delivery fast and predictable:
28
+
29
+
- Start with the smallest end-to-end MVP slice first (manual subscribe → refresh → items).
30
+
- Treat discovery, background polling, folders, and read/unread as post-MVP unless explicitly pulled in.
31
+
- Use a known-good feed for the first success-path verification before testing stricter or rate-limited sources.
32
+
- Keep work items small and single-purpose; when a change affects behavior, add/adjust tests first.
33
+
34
+
When writing a work breakdown (tasks):
35
+
36
+
- Prefer tasks that touch one file or one concern.
37
+
- If a task changes multiple concerns, split it.
38
+
- Put test changes first for each behavior change.
39
+
- If you use a marker for parallelizable tasks (for example `[P]`), only mark tasks that do not touch the same files.
40
+
- Keep local dev ports and base URLs explicit and configurable to avoid unnecessary debugging churn.
41
+
42
+
## What "MVP working" means in practice
43
+
44
+
For the first MVP slice, "working" should be validated on a known-good RSS/Atom feed with this flow:
45
+
46
+
1. Add subscription
47
+
2. Trigger manual refresh
48
+
3. View items
49
+
50
+
Only after this success-path works reliably should we use stricter sites (rate-limited/blocked sources) as robustness tests.
22
51
23
52
## Rollout plan
24
53
@@ -47,15 +76,17 @@ Local data should remain the user’s data. The design should make it easy to ke
-**Observability**: Use structured logs with levels; surface actionable error messages; collect minimal opt-in telemetry only.
49
78
-**Release Management**: Use semantic versioning; maintain a changelog; ensure reproducible builds; enable quick rollback.
50
-
-**Documentation & Process**: Keep README/user guide and architecture overview current; write brief specs with acceptance criteria via Spec Kit; definition of done includes tests, docs, and QA checklist.
79
+
-**Documentation & Process**: Keep README/user guide and architecture overview current; write brief requirements with acceptance criteria; definition of done includes tests, docs, and a short QA checklist.
51
80
-**Dependency Management**: Pin versions; update regularly; track licenses; generate an SBOM (e.g., CycloneDX) and verify compliance.
52
81
82
+
## “MVP first” rule of thumb
83
+
84
+
If a requirement introduces background scheduling, concurrency orchestration, or cross-cutting UI state (examples: polling, folders, read/unread), it is probably post-MVP unless the app cannot demonstrate the core workflow without it.
85
+
53
86
## How this document fits with the others
54
87
55
88
This document describes the project at a high level and sets constraints, methodology, and rollout expectations.
56
89
57
-
Detailed, user-facing requirements live in [App Features.md](App%20Features.md).
58
-
59
-
The technology choices and architectural rationale live in [Tech Stack.md](Tech%20Stack.md).
90
+
Detailed, user-facing requirements live in [AppFeatures.md](AppFeatures.md).
60
91
61
-
MVP system behavior rules that inform our specs live in [MVP System Rules.md](MVP%20System%20Rules.md).
92
+
The technology choices and architectural rationale live in [TechStack.md](TechStack.md).
0 commit comments