feat: add desktop subscription group management - #32
Conversation
|
Hey @Priveetee, where would you like the group management page to live? Currently it is accessed through a Manage groups button under Subscriptions → Channels, as shown below. Would you prefer to:
Current placement (desktop preview with sample data):
|
|
Mmmh, I think that keeping it as a separate page for now makes the most sense, opened through the Manage groups button under Subscriptions → Channels. This keeps the existing Videos / Channels navigation simple and preserves Channels as the normal subscription list, while the group manager stays focused on organization. I wouldn’t replace the Channels page. We can revisit a dedicated Groups tab later if discoverability becomes an issue. For now, the current placement feels right to me. |
|
And please don't forget to split ur commit ;p |
4405d41 to
8683521
Compare
Priveetee
left a comment
There was a problem hiding this comment.
I went through the PR again. I like the direction of the UI and the amount of work that went into it! :)
There are two important points I’d like to sort out before merging.
The first one is the channel-list pagination. The UI only slices props.channels after /subscriptions/group-memberships has already returned and parsed the complete membership projection. The Server also builds that complete projection in memory before sending it. With a large subscription list, the first page still waits for the full response, all database work, and all browser allocations. Changing page only changes which already-loaded rows are rendered.
This matters for TypeType #172, which is specifically about managing large subscription lists. Could we move page, limit, search, and group-membership filtering into the Server contract, return the requested page with its total count, and add the matching OpenAPI and route/service tests? The frontend could then render the returned page directly instead of paginating a complete in-memory projection.
I’d also like to keep this PR focused on the actual frontend implementation and its tests. Could you remove all Markdown files introduced by the PR: DESIGN.md, PRODUCT.md, docs/subscription-groups-fixture.md, and docs/subscription-groups-ux.md? I don’t want any new .md files in this PR. They contain planning notes, design summaries, fixture instructions, and verification claims rather than files required for the feature itself. Some of the claims are also ahead of the current implementation, especially the statement that selection works across every page while the complete list is still loaded up front.
Once the pagination contract is handled on the Server side and the extra Markdown files are removed, I’ll gladly review the PR again! ;)
If you need a hand with the Server-side code or the integration, don’t hesitate to ask, I’ll be happy to help! :)
|
Hey @Priveetee, I marked this ready for review too early by mistake—sorry for the premature signal. It is back in draft while the coordinated frontend/server change is reviewed. Following your latest review:
Frontend checks passed (376 tests), and the server checks passed (1,248 tests, 3 skipped). Firefox/WebKit and a browser session against the running Kotlin server still need verification. Latest desktop UI at 1280 × 720, using the disposable 150-channel fixture: |
|
oki doki np, take ur time :) |
5ff837d to
915c9c6
Compare
|
I think this is in a decent state for review now. next I'll probably work on the import export flow in the mock, import completes → show what was restored → optionally organize channels → finish, with grouping remaining optional. #32 already gives us much of the manager UI, pagination, selection and membership handling to reuse. Its current post-import link opens the full manager we can probably reuse a lot of the components here. anything I should be aware of? one thing that came up is group merging / duplication handling in imports we need a new route and flow for. and probably other stuff I'm forgetting. |
# Conflicts: # apps/web/src/components/portability-import-panel.tsx
Dismissed after all review threads were resolved and the requested changes were validated.
|
Thx a lot for all ur work, u can be proud of urself, LGTM ;P |


Add a desktop subscription group manager at
/subscriptions/groups, opened from Subscriptions → Channels → Manage groups, following the placement discussion.Refs TypeType #172. Paginated membership reads and selected-channel refreshes use the API merged in TypeType-Server #86 (
576a0241ondev). This PR stays a draft until the Firefox/WebKit and live-server acceptance pass is recorded.bun run dev:groups-fixture) with overlapping memberships and the merged paginated contract: endpoint validation, lookup limits and body-size rejection mirror the server. No new Markdown files are included.Scope and acceptance criteria
Desktop group CRUD, inline/bulk membership editing, server pagination/search, retained selections and error recovery are included. Compact mobile composition and organization of only newly imported channels are explicitly deferred; the post-import link opens the full manager. The stacked narrow-screen fallback is not the proposed mobile workflow. This is a partial implementation of #172 and does not close that issue.
Validation
bun run check,bun run test(394 passed),bun run knip,bun run sherif,bun run buildandgit diff --checkpassed after mergingdev.devas576a0241after its full suite (1,251 passed, 3 skipped), build, OpenAPI and coverage checks passed against PostgreSQL 16, including route/service tests with 25,000 channels and 112,500 memberships, Unicode search and account isolation. The merge includes the maintainer's follow-up (trigram search indexes, shared read locks, read-only avatar enrichment).890b86cmergesorigin/dev(conflicts resolved in the message catalogs andauthedJson).Latest desktop preview
Disposable fixture data, with Cooking selected, its matching bulk target and the inline group combobox open.