| Age | Commit message | Author | Files | +/- |
|---|---|---|---|---|
feat: Add collaborative lists (#2146) …* feat: Add collaborative lists backend implementation This commit implements the core backend functionality for collaborative lists, allowing multiple users to share and interact with bookmark lists. Database changes: - Add listCollaborators table to track users with access to lists and their roles (viewer/editor) - Add addedBy field to bookmarksInLists to track who added bookmarks - Add relations for collaborative list functionality Access control updates: - Update List model to support role-based access (owner/editor/viewer) - Add methods to check and enforce permissions for list operations - Update Bookmark model to allow access through collaborative lists - Modify bookmark queries to include bookmarks from collaborative lists List collaboration features: - Add/remove/update collaborators - Get list of collaborators - Get lists shared with current user - Only manual lists can have collaborators tRPC procedures: - addCollaborator: Add a user as a collaborator to a list - removeCollaborator: Remove a collaborator from a list - updateCollaboratorRole: Change a collaborator's role - getCollaborators: Get all collaborators for a list - getSharedWithMe: Get all lists shared with the current user - cloneBookmark: Clone a bookmark to the current user's collection Implementation notes: - Editors can add/remove bookmarks from the list (must own the bookmark) - Viewers can only view bookmarks in the list - Only the list owner can manage collaborators and list metadata - Smart lists cannot have collaborators (only manual lists) - Users cannot edit bookmarks they don't own, even in shared lists * feat: Add collaborative lists frontend UI This commit implements the frontend user interface for collaborative lists, allowing users to view shared bookmarks and manage list collaborators. New pages: - /dashboard/shared: Shows bookmarks from lists shared with the user - Displays bookmarks from all collaborative lists - Uses SharedBookmarks component - Shows empty state when no lists are shared Navigation: - Added "Shared with you" link to sidebar with Users icon - Positioned after "Home" in main navigation - Available in both desktop and mobile sidebar Collaborator management: - ManageCollaboratorsModal component for managing list collaborators - Add collaborators by user ID with viewer/editor role - View current collaborators with their roles - Update collaborator roles inline - Remove collaborators - Shows empty state when no collaborators - Integrated into ListOptions dropdown menu - Accessible via "Manage Collaborators" menu item Components created: - SharedBookmarks.tsx: Server component fetching shared lists/bookmarks - ManageCollaboratorsModal.tsx: Client component with tRPC mutations - /dashboard/shared/page.tsx: Route for shared bookmarks page UI features: - Role selector for viewer/editor permissions - Real-time collaborator list updates - Toast notifications for success/error states - Loading states for async operations - Responsive design matching existing UI patterns Implementation notes: - Uses existing tRPC endpoints (getSharedWithMe, getCollaborators, etc.) - Follows established modal patterns from ShareListModal - Integrates seamlessly with existing list UI - Currently uses user ID for adding collaborators (email lookup TBD) * fix typecheck * add collaborator by email * add shared list in the sidebar * fix perm issue * hide UI components from non list owners * list leaving * fix shared bookmarks showing up in homepage * fix getBookmark access check * e2e tests * hide user specific fields from shared lists * simplify bookmark perm checks * disable editable fields in bookmark preview * hide lists if they don't have options * fix list ownership * fix highlights * move tests to trpc * fix alignment of leave list * make tag lists unclickable * allow editors to remove from list * add a badge for shared lists * remove bookmarks of user when they're removed from a list * fix tests * show owner in the manage collab modal * fix hasCollab * drop shared with you * i18n * beta badge * correctly invalidate caches on collab change * reduce unnecessary changes * Add ratelimits * stop manually removing bookmarks on remove * some fixes * fixes * remove unused function * improve tests --------- Co-authored-by: Claude <noreply@anthropic.com> |
Mohamed Bassem | 40 | -596/+6705 | |
| fix: Fix server side error on clipboard check | MohamedBassem | 1 | -2/+12 | |
ui(web): Copy link button greyed out when clipboard not available (#1209) …* ui(web): Now the copy link button is greyed out when clipboard is not available * Fix: handled navigator check safely |
ekambains | 1 | -0/+2 | |
| chore: Rename hoarder packages to karakeep | MohamedBassem | 230 | -644/+654 | |
| feat: Allow editing bookmark details | MohamedBassem | 14 | -102/+732 | |
feat: Add support for smart lists (#802) …* feat: Add support for smart lists * i18n * Fix update list endpoint * Add a test for smart lists * Add header to the query explainer * Hide remove from lists in the smart context list * Add proper validation to list form --------- Co-authored-by: Deepak Kapoor <41769111+orthdron@users.noreply.github.com> |
Mohamed Bassem | 26 | -100/+2045 | |
| feat: Add delete bookmark confirmation dialog. Fixes #776 (#787) | Nicole Li | 6 | -38/+110 | |
feature: Add i18n support. Fixes #57 (#635) …* feature(web): Add basic scaffolding for i18n * refactor: Switch most of the app's strings to use i18n strings * fix: Remove unused i18next-resources-for-ts command * Add user setting * More translations * Drop the german translation for now |
Mohamed Bassem | 56 | -281/+929 | |
feature(web): Add ability to manually trigger full page archives. Fixes #398… …* [Feature Request] Ability to select what to "crawl full page archive" #398 Added the ability to start a full page crawl for links and also in bulk operations added the ability to refresh links as a bulk operation as well * minor icon and wording changes --------- Co-authored-by: MohamedBassem <me@mbassem.com> |
kamtschatka | 5 | -6/+89 | |
refactor: added the bookmark type to the database (#256) …* refactoring asset types Extracted out functions to silently delete assets and to update them after crawling Generalized the mapping of assets to bookmark fields to make extending them easier * Added the bookmark type to the database Introduced an enum to have better type safety cleaned up the code and based some code on the type directly * add BookmarkType.UNKNWON * lint and remove unused function --------- Co-authored-by: MohamedBassem <me@mbassem.com> |
kamtschatka | 27 | -120/+1266 | |
| feature(web): Change the AddList modal to allow adding and removing bookmarks… | MohamedBassem | 4 | -139/+219 | |
| refactor: Move the shared types to the shared package | MohamedBassem | 53 | -241/+260 | |
| feature(web): Allow uploading directly into lists/tags. Fixes #69 | MohamedBassem | 19 | -144/+258 | |
| feature: Extract hook logic into separate package and add a new action bar in… | MohamedBassem | 23 | -330/+672 | |
| fix: Refresh the search cache when a bookmark is deleted. Fixes #26 | MohamedBassem | 1 | -0/+5 | |
| fix: Allow setting demo mode creds when demo mode is enabled | MohamedBassem | 7 | -23/+39 | |
| feature(web): Add support for removing items from lists | MohamedBassem | 5 | -16/+96 | |
| feature(web): Add support for demo mode | MohamedBassem | 13 | -19/+89 | |
| lint: Lint and format the entire repo with the new configs | MohamedBassem | 122 | -411/+424 | |
| structure: Create apps dir and copy tooling dir from t3-turbo repo | MohamedBassem | 396 | -9511/+10350 | |
| refactor: Move all components to the top level directory | MohamedBassem | 70 | -2430/+2430 | |
| refactor: Extract trpc logic into its package | MohamedBassem | 51 | -1536/+1793 | |
| Fix: Correctly invalidate the bookmark cache when it's favourited | MohamedBassem | 1 | -7/+14 | |
| build: Fix formatting | MohamedBassem | 2 | -10/+9 | |
| fix: Less aggressive invalidation when a bookmark is deleted | MohamedBassem | 1 | -1/+1 | |
| fix: Fix Edit tags not populating tags when link is first added | MohamedBassem | 3 | -18/+20 | |
| feature: Add support for creating and updating lists | MohamedBassem | 23 | -5/+2030 | |
| feature: Add support for markdown in the text bookmarks | MohamedBassem | 7 | -39/+692 | |
| feature: Add support for storing and previewing raw notes | MohamedBassem | 21 | -175/+1196 | |
| feature: Add copy link to bookmark options | MohamedBassem | 1 | -0/+12 | |
| feature: Add support for adding/removing tags | MohamedBassem | 6 | -52/+365 | |
| ui: hydrate the react query cache in the client side components | MohamedBassem | 9 | -15/+56 | |
| Migrating to react query for client side queries | MohamedBassem | 11 | -96/+197 | |
| feature: Add ability to refresh bookmark details | MohamedBassem | 5 | -4/+76 | |
| refactor: Migrating to trpc instead of next's route handers | MohamedBassem | 28 | -521/+343 | |
| [feature] Add the ability to favourite and archive bookmarks | MohamedBassem | 8 | -59/+163 |