rcgit

/ karakeep
follow (on) | order: default date topo
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