gitextract_zd_j__6h/ ├── .claude/ │ └── settings.json ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── feature_request.yml │ │ └── question.yml │ └── workflows/ │ ├── android.yml │ ├── ci.yml │ ├── claude.yml │ ├── cli.yml │ ├── docker.yml │ ├── extension.yml │ ├── ios.yml │ ├── mcp.yml │ └── sdk.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .npmrc ├── .oxfmtrc.json ├── .oxlintrc.json ├── AGENTS.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── apps/ │ ├── browser-extension/ │ │ ├── .gitignore │ │ ├── .oxlintrc.json │ │ ├── components.json │ │ ├── index.html │ │ ├── manifest.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── src/ │ │ │ ├── BookmarkDeletedPage.tsx │ │ │ ├── BookmarkSavedPage.tsx │ │ │ ├── CustomHeadersPage.tsx │ │ │ ├── Layout.tsx │ │ │ ├── Logo.tsx │ │ │ ├── NotConfiguredPage.tsx │ │ │ ├── OptionsPage.tsx │ │ │ ├── SavePage.tsx │ │ │ ├── SignInPage.tsx │ │ │ ├── Spinner.tsx │ │ │ ├── background/ │ │ │ │ ├── background.ts │ │ │ │ └── protocol.ts │ │ │ ├── components/ │ │ │ │ ├── BookmarkLists.tsx │ │ │ │ ├── ListsSelector.tsx │ │ │ │ ├── NoteEditor.tsx │ │ │ │ ├── TagList.tsx │ │ │ │ ├── TagsSelector.tsx │ │ │ │ └── ui/ │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── dynamic-popover.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── switch.tsx │ │ │ │ └── textarea.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ ├── utils/ │ │ │ │ ├── ThemeProvider.tsx │ │ │ │ ├── badgeCache.ts │ │ │ │ ├── css.ts │ │ │ │ ├── providers.tsx │ │ │ │ ├── settings.ts │ │ │ │ ├── storagePersister.ts │ │ │ │ ├── trpc.ts │ │ │ │ ├── type.ts │ │ │ │ └── url.ts │ │ │ └── vite-env.d.ts │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── cli/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .oxlintrc.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── commands/ │ │ │ │ ├── admin.ts │ │ │ │ ├── bookmarks.ts │ │ │ │ ├── dump.ts │ │ │ │ ├── lists.ts │ │ │ │ ├── migrate.ts │ │ │ │ ├── tags.ts │ │ │ │ ├── whoami.ts │ │ │ │ └── wipe.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── globals.ts │ │ │ │ ├── output.ts │ │ │ │ └── trpc.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── landing/ │ │ ├── .oxlintrc.json │ │ ├── README.md │ │ ├── components/ │ │ │ └── ui/ │ │ │ └── button.tsx │ │ ├── components.json │ │ ├── index.html │ │ ├── lib/ │ │ │ └── utils.ts │ │ ├── package.json │ │ ├── postcss.config.cjs │ │ ├── public/ │ │ │ ├── robots.txt │ │ │ └── sitemap.xml │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── Apps.tsx │ │ │ ├── Homepage.tsx │ │ │ ├── Navbar.tsx │ │ │ ├── Pricing.tsx │ │ │ ├── Privacy.tsx │ │ │ ├── SEO.tsx │ │ │ ├── Terms.tsx │ │ │ ├── components/ │ │ │ │ ├── Banner.tsx │ │ │ │ ├── CallToAction.tsx │ │ │ │ ├── FeatureShowcase.tsx │ │ │ │ ├── FeaturesGrid.tsx │ │ │ │ ├── Footer.tsx │ │ │ │ ├── Hero.tsx │ │ │ │ ├── Layout.tsx │ │ │ │ ├── OpenSource.tsx │ │ │ │ └── Platforms.tsx │ │ │ ├── constants.ts │ │ │ └── main.tsx │ │ ├── tailwind.config.ts │ │ ├── tsconfig.json │ │ ├── vite-env.d.ts │ │ └── vite.config.ts │ ├── mcp/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .oxlintrc.json │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── bookmarks.ts │ │ │ ├── index.ts │ │ │ ├── lists.ts │ │ │ ├── shared.ts │ │ │ ├── tags.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── mobile/ │ │ ├── .gitignore │ │ ├── .npmrc │ │ ├── .oxlintrc.json │ │ ├── app/ │ │ │ ├── +not-found.tsx │ │ │ ├── _layout.tsx │ │ │ ├── dashboard/ │ │ │ │ ├── (tabs)/ │ │ │ │ │ ├── (highlights)/ │ │ │ │ │ │ ├── _layout.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── (home)/ │ │ │ │ │ │ ├── _layout.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── (lists)/ │ │ │ │ │ │ ├── _layout.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── (settings)/ │ │ │ │ │ │ ├── _layout.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── (tags)/ │ │ │ │ │ │ ├── _layout.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── _layout.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── _layout.tsx │ │ │ │ ├── archive.tsx │ │ │ │ ├── bookmarks/ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── manage_lists.tsx │ │ │ │ │ │ └── manage_tags.tsx │ │ │ │ │ └── new.tsx │ │ │ │ ├── favourites.tsx │ │ │ │ ├── lists/ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ ├── edit.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── new.tsx │ │ │ │ ├── search.tsx │ │ │ │ ├── settings/ │ │ │ │ │ ├── bookmark-default-view.tsx │ │ │ │ │ ├── reader-settings.tsx │ │ │ │ │ └── theme.tsx │ │ │ │ └── tags/ │ │ │ │ └── [slug].tsx │ │ │ ├── error.tsx │ │ │ ├── index.tsx │ │ │ ├── server-address.tsx │ │ │ ├── sharing.tsx │ │ │ ├── signin.tsx │ │ │ └── test-connection.tsx │ │ ├── app.config.js │ │ ├── babel.config.js │ │ ├── components/ │ │ │ ├── CustomHeadersModal.tsx │ │ │ ├── FullPageError.tsx │ │ │ ├── Logo.tsx │ │ │ ├── SplashScreenController.tsx │ │ │ ├── TailwindResolver.tsx │ │ │ ├── bookmarks/ │ │ │ │ ├── BookmarkAssetImage.tsx │ │ │ │ ├── BookmarkAssetView.tsx │ │ │ │ ├── BookmarkCard.tsx │ │ │ │ ├── BookmarkHtmlHighlighterDom.tsx │ │ │ │ ├── BookmarkLinkPreview.tsx │ │ │ │ ├── BookmarkLinkTypeSelector.tsx │ │ │ │ ├── BookmarkLinkView.tsx │ │ │ │ ├── BookmarkList.tsx │ │ │ │ ├── BookmarkTextMarkdown.tsx │ │ │ │ ├── BookmarkTextView.tsx │ │ │ │ ├── BottomActions.tsx │ │ │ │ ├── NotePreview.tsx │ │ │ │ ├── PDFViewer.tsx │ │ │ │ ├── TagPill.tsx │ │ │ │ └── UpdatingBookmarkList.tsx │ │ │ ├── highlights/ │ │ │ │ ├── HighlightCard.tsx │ │ │ │ └── HighlightList.tsx │ │ │ ├── navigation/ │ │ │ │ └── stack.tsx │ │ │ ├── reader/ │ │ │ │ └── ReaderPreview.tsx │ │ │ ├── settings/ │ │ │ │ └── UserProfileHeader.tsx │ │ │ ├── sharing/ │ │ │ │ ├── ErrorAnimation.tsx │ │ │ │ ├── LoadingAnimation.tsx │ │ │ │ └── SuccessAnimation.tsx │ │ │ └── ui/ │ │ │ ├── ActionButton.tsx │ │ │ ├── Avatar.tsx │ │ │ ├── Button.tsx │ │ │ ├── ChevronRight.tsx │ │ │ ├── Divider.tsx │ │ │ ├── EmptyState.tsx │ │ │ ├── FullPageSpinner.tsx │ │ │ ├── GroupedList.tsx │ │ │ ├── Input.tsx │ │ │ ├── SearchInput/ │ │ │ │ ├── SearchInput.ios.tsx │ │ │ │ ├── SearchInput.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Skeleton.tsx │ │ │ ├── Text.tsx │ │ │ └── Toast.tsx │ │ ├── eas.json │ │ ├── globals.css │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── hooks.ts │ │ │ ├── providers.tsx │ │ │ ├── readerSettings.tsx │ │ │ ├── session.ts │ │ │ ├── settings.ts │ │ │ ├── upload.ts │ │ │ ├── useColorScheme.tsx │ │ │ ├── useMenuIconColors.ts │ │ │ └── utils.ts │ │ ├── metro.config.js │ │ ├── nativewind-env.d.ts │ │ ├── package.json │ │ ├── plugins/ │ │ │ ├── camera-not-required.js │ │ │ ├── network_security_config.xml │ │ │ └── trust-local-certs.js │ │ ├── tailwind.config.js │ │ ├── theme/ │ │ │ ├── colors.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── web/ │ │ ├── .oxlintrc.json │ │ ├── @types/ │ │ │ └── i18next.d.ts │ │ ├── README.md │ │ ├── app/ │ │ │ ├── admin/ │ │ │ │ ├── admin_tools/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── background_jobs/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── overview/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── users/ │ │ │ │ └── page.tsx │ │ │ ├── api/ │ │ │ │ ├── [[...route]]/ │ │ │ │ │ └── route.ts │ │ │ │ ├── auth/ │ │ │ │ │ └── [...nextauth]/ │ │ │ │ │ └── route.tsx │ │ │ │ └── bookmarks/ │ │ │ │ └── export/ │ │ │ │ └── route.tsx │ │ │ ├── check-email/ │ │ │ │ └── page.tsx │ │ │ ├── dashboard/ │ │ │ │ ├── @modal/ │ │ │ │ │ ├── (.)preview/ │ │ │ │ │ │ └── [bookmarkId]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── [...catchAll]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── default.tsx │ │ │ │ ├── archive/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── bookmarks/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── cleanups/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── error.tsx │ │ │ │ ├── favourites/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── feeds/ │ │ │ │ │ └── [feedId]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── highlights/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── lists/ │ │ │ │ │ ├── [listId]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ ├── preview/ │ │ │ │ │ └── [bookmarkId]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── search/ │ │ │ │ │ └── page.tsx │ │ │ │ └── tags/ │ │ │ │ ├── [tagId]/ │ │ │ │ │ └── page.tsx │ │ │ │ └── page.tsx │ │ │ ├── forgot-password/ │ │ │ │ └── page.tsx │ │ │ ├── invite/ │ │ │ │ └── [token]/ │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── logout/ │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ ├── public/ │ │ │ │ ├── layout.tsx │ │ │ │ └── lists/ │ │ │ │ └── [listId]/ │ │ │ │ ├── not-found.tsx │ │ │ │ └── page.tsx │ │ │ ├── reader/ │ │ │ │ ├── [bookmarkId]/ │ │ │ │ │ └── page.tsx │ │ │ │ └── layout.tsx │ │ │ ├── reset-password/ │ │ │ │ └── page.tsx │ │ │ ├── settings/ │ │ │ │ ├── ai/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── api-keys/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── assets/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── backups/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── broken-links/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── feeds/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── import/ │ │ │ │ │ ├── [sessionId]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── info/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── rules/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── stats/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── subscription/ │ │ │ │ │ └── page.tsx │ │ │ │ └── webhooks/ │ │ │ │ └── page.tsx │ │ │ ├── signin/ │ │ │ │ └── page.tsx │ │ │ ├── signup/ │ │ │ │ └── page.tsx │ │ │ └── verify-email/ │ │ │ └── page.tsx │ │ ├── components/ │ │ │ ├── DemoModeBanner.tsx │ │ │ ├── KarakeepIcon.tsx │ │ │ ├── admin/ │ │ │ │ ├── AddUserDialog.tsx │ │ │ │ ├── AdminCard.tsx │ │ │ │ ├── AdminNotices.tsx │ │ │ │ ├── BackgroundJobs.tsx │ │ │ │ ├── BasicStats.tsx │ │ │ │ ├── BookmarkDebugger.tsx │ │ │ │ ├── CreateInviteDialog.tsx │ │ │ │ ├── InvitesList.tsx │ │ │ │ ├── InvitesListSkeleton.tsx │ │ │ │ ├── ResetPasswordDialog.tsx │ │ │ │ ├── ServiceConnections.tsx │ │ │ │ ├── UpdateUserDialog.tsx │ │ │ │ ├── UserList.tsx │ │ │ │ └── UserListSkeleton.tsx │ │ │ ├── dashboard/ │ │ │ │ ├── BulkBookmarksAction.tsx │ │ │ │ ├── EditableText.tsx │ │ │ │ ├── ErrorFallback.tsx │ │ │ │ ├── GlobalActions.tsx │ │ │ │ ├── SortOrderToggle.tsx │ │ │ │ ├── UploadDropzone.tsx │ │ │ │ ├── ViewOptions.tsx │ │ │ │ ├── bookmarks/ │ │ │ │ │ ├── AssetCard.tsx │ │ │ │ │ ├── BookmarkActionBar.tsx │ │ │ │ │ ├── BookmarkCard.tsx │ │ │ │ │ ├── BookmarkFormattedCreatedAt.tsx │ │ │ │ │ ├── BookmarkLayoutAdaptingCard.tsx │ │ │ │ │ ├── BookmarkMarkdownComponent.tsx │ │ │ │ │ ├── BookmarkOptions.tsx │ │ │ │ │ ├── BookmarkOwnerIcon.tsx │ │ │ │ │ ├── BookmarkTagsEditor.tsx │ │ │ │ │ ├── BookmarkedTextEditor.tsx │ │ │ │ │ ├── Bookmarks.tsx │ │ │ │ │ ├── BookmarksGrid.tsx │ │ │ │ │ ├── BookmarksGridSkeleton.tsx │ │ │ │ │ ├── BulkManageListsModal.tsx │ │ │ │ │ ├── BulkTagModal.tsx │ │ │ │ │ ├── DeleteBookmarkConfirmationDialog.tsx │ │ │ │ │ ├── EditBookmarkDialog.tsx │ │ │ │ │ ├── EditorCard.tsx │ │ │ │ │ ├── FooterLinkURL.tsx │ │ │ │ │ ├── LinkCard.tsx │ │ │ │ │ ├── ManageListsModal.tsx │ │ │ │ │ ├── NoBookmarksBanner.tsx │ │ │ │ │ ├── NotePreview.tsx │ │ │ │ │ ├── SummarizeBookmarkArea.tsx │ │ │ │ │ ├── TagList.tsx │ │ │ │ │ ├── TagModal.tsx │ │ │ │ │ ├── TagsEditor.tsx │ │ │ │ │ ├── TextCard.tsx │ │ │ │ │ ├── UnknownCard.tsx │ │ │ │ │ ├── UpdatableBookmarksGrid.tsx │ │ │ │ │ ├── action-buttons/ │ │ │ │ │ │ └── ArchiveBookmarkButton.tsx │ │ │ │ │ └── icons.tsx │ │ │ │ ├── cleanups/ │ │ │ │ │ └── TagDuplicationDetention.tsx │ │ │ │ ├── feeds/ │ │ │ │ │ └── FeedSelector.tsx │ │ │ │ ├── header/ │ │ │ │ │ ├── Header.tsx │ │ │ │ │ └── ProfileOptions.tsx │ │ │ │ ├── highlights/ │ │ │ │ │ ├── AllHighlights.tsx │ │ │ │ │ └── HighlightCard.tsx │ │ │ │ ├── lists/ │ │ │ │ │ ├── AllListsView.tsx │ │ │ │ │ ├── BookmarkListSelector.tsx │ │ │ │ │ ├── CollapsibleBookmarkLists.tsx │ │ │ │ │ ├── DeleteListConfirmationDialog.tsx │ │ │ │ │ ├── EditListModal.tsx │ │ │ │ │ ├── LeaveListConfirmationDialog.tsx │ │ │ │ │ ├── ListHeader.tsx │ │ │ │ │ ├── ListOptions.tsx │ │ │ │ │ ├── ManageCollaboratorsModal.tsx │ │ │ │ │ ├── MergeListModal.tsx │ │ │ │ │ ├── PendingInvitationsCard.tsx │ │ │ │ │ ├── PublicListLink.tsx │ │ │ │ │ ├── RssLink.tsx │ │ │ │ │ └── ShareListModal.tsx │ │ │ │ ├── preview/ │ │ │ │ │ ├── ActionBar.tsx │ │ │ │ │ ├── AssetContentSection.tsx │ │ │ │ │ ├── AttachmentBox.tsx │ │ │ │ │ ├── BookmarkPreview.tsx │ │ │ │ │ ├── HighlightsBox.tsx │ │ │ │ │ ├── LinkContentSection.tsx │ │ │ │ │ ├── NoteEditor.tsx │ │ │ │ │ ├── ReaderSettingsPopover.tsx │ │ │ │ │ ├── ReaderView.tsx │ │ │ │ │ ├── ReadingProgressBanner.tsx │ │ │ │ │ ├── TextContentSection.tsx │ │ │ │ │ ├── content-renderers/ │ │ │ │ │ │ ├── AmazonRenderer.tsx │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── TikTokRenderer.tsx │ │ │ │ │ │ ├── XRenderer.tsx │ │ │ │ │ │ ├── YouTubeRenderer.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── registry.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── highlights.ts │ │ │ │ ├── rules/ │ │ │ │ │ ├── RuleEngineActionBuilder.tsx │ │ │ │ │ ├── RuleEngineConditionBuilder.tsx │ │ │ │ │ ├── RuleEngineEventSelector.tsx │ │ │ │ │ ├── RuleEngineRuleEditor.tsx │ │ │ │ │ └── RuleEngineRuleList.tsx │ │ │ │ ├── search/ │ │ │ │ │ ├── QueryExplainerTooltip.tsx │ │ │ │ │ ├── SearchInput.tsx │ │ │ │ │ └── useSearchAutocomplete.ts │ │ │ │ ├── sidebar/ │ │ │ │ │ ├── AllLists.tsx │ │ │ │ │ └── InvitationNotificationBadge.tsx │ │ │ │ └── tags/ │ │ │ │ ├── AllTagsView.tsx │ │ │ │ ├── BulkTagAction.tsx │ │ │ │ ├── CreateTagModal.tsx │ │ │ │ ├── DeleteTagConfirmationDialog.tsx │ │ │ │ ├── EditableTagName.tsx │ │ │ │ ├── MergeTagModal.tsx │ │ │ │ ├── MultiTagSelector.tsx │ │ │ │ ├── TagAutocomplete.tsx │ │ │ │ ├── TagOptions.tsx │ │ │ │ └── TagPill.tsx │ │ │ ├── invite/ │ │ │ │ └── InviteAcceptForm.tsx │ │ │ ├── public/ │ │ │ │ └── lists/ │ │ │ │ ├── PublicBookmarkGrid.tsx │ │ │ │ └── PublicListHeader.tsx │ │ │ ├── settings/ │ │ │ │ ├── AISettings.tsx │ │ │ │ ├── AddApiKey.tsx │ │ │ │ ├── ApiKeySettings.tsx │ │ │ │ ├── ApiKeySuccess.tsx │ │ │ │ ├── BackupSettings.tsx │ │ │ │ ├── ChangePassword.tsx │ │ │ │ ├── DeleteAccount.tsx │ │ │ │ ├── DeleteApiKey.tsx │ │ │ │ ├── FeedSettings.tsx │ │ │ │ ├── ImportExport.tsx │ │ │ │ ├── ImportSessionCard.tsx │ │ │ │ ├── ImportSessionDetail.tsx │ │ │ │ ├── ImportSessionsSection.tsx │ │ │ │ ├── ReaderSettings.tsx │ │ │ │ ├── RegenerateApiKey.tsx │ │ │ │ ├── SettingsPage.tsx │ │ │ │ ├── SubscriptionSettings.tsx │ │ │ │ ├── UserAvatar.tsx │ │ │ │ ├── UserDetails.tsx │ │ │ │ ├── UserOptions.tsx │ │ │ │ ├── WebhookEventSelector.tsx │ │ │ │ └── WebhookSettings.tsx │ │ │ ├── shared/ │ │ │ │ └── sidebar/ │ │ │ │ ├── MobileSidebar.tsx │ │ │ │ ├── ModileSidebarItem.tsx │ │ │ │ ├── Sidebar.tsx │ │ │ │ ├── SidebarItem.tsx │ │ │ │ ├── SidebarLayout.tsx │ │ │ │ ├── SidebarVersion.tsx │ │ │ │ └── TSidebarItem.ts │ │ │ ├── signin/ │ │ │ │ ├── CredentialsForm.tsx │ │ │ │ ├── ForgotPasswordForm.tsx │ │ │ │ ├── OAuthAutoRedirect.tsx │ │ │ │ ├── ResetPasswordForm.tsx │ │ │ │ ├── SignInForm.tsx │ │ │ │ └── SignInProviderButton.tsx │ │ │ ├── signup/ │ │ │ │ └── SignUpForm.tsx │ │ │ ├── subscription/ │ │ │ │ └── QuotaProgress.tsx │ │ │ ├── theme-provider.tsx │ │ │ ├── ui/ │ │ │ │ ├── action-button.tsx │ │ │ │ ├── action-confirming-dialog.tsx │ │ │ │ ├── alert.tsx │ │ │ │ ├── avatar.tsx │ │ │ │ ├── back-button.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── copy-button.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── field.tsx │ │ │ │ ├── file-picker-button.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── full-page-spinner.tsx │ │ │ │ ├── info-tooltip.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── kbd.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── markdown/ │ │ │ │ │ ├── markdown-editor.tsx │ │ │ │ │ ├── markdown-readonly.tsx │ │ │ │ │ ├── plugins/ │ │ │ │ │ │ └── toolbar-plugin.tsx │ │ │ │ │ └── theme.ts │ │ │ │ ├── multiple-choice-dialog.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── radio-group.tsx │ │ │ │ ├── scroll-area.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── spinner.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toggle.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── user-avatar.tsx │ │ │ ├── utils/ │ │ │ │ ├── BookmarkAlreadyExistsToast.tsx │ │ │ │ ├── ValidAccountCheck.tsx │ │ │ │ └── useShowArchived.tsx │ │ │ └── wrapped/ │ │ │ ├── ShareButton.tsx │ │ │ ├── WrappedContent.tsx │ │ │ ├── WrappedModal.tsx │ │ │ └── index.ts │ │ ├── components.json │ │ ├── instrumentation.node.ts │ │ ├── instrumentation.ts │ │ ├── lib/ │ │ │ ├── attachments.tsx │ │ │ ├── auth/ │ │ │ │ └── client.ts │ │ │ ├── bookmark-drag.ts │ │ │ ├── bulkActions.ts │ │ │ ├── bulkTagActions.ts │ │ │ ├── clientConfig.tsx │ │ │ ├── drag-and-drop.ts │ │ │ ├── haptic.ts │ │ │ ├── hooks/ │ │ │ │ ├── bookmark-search.ts │ │ │ │ ├── relative-time.ts │ │ │ │ ├── upload-file.ts │ │ │ │ ├── useBookmarkImport.ts │ │ │ │ ├── useDialogFormReset.ts │ │ │ │ └── useImportSessions.ts │ │ │ ├── i18n/ │ │ │ │ ├── client.ts │ │ │ │ ├── locales/ │ │ │ │ │ ├── ar/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── cs/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── da/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── de/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── el/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── en/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── en_US/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── es/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── fa/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── fi/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── fr/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ga/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── gl/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── hr/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── hu/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── it/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ja/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ko/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── nb_NO/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── nl/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── pl/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── pt/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── pt_BR/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ru/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── sk/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── sl/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── sv/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── tr/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── uk/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── vi/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── zh/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ └── zhtw/ │ │ │ │ │ └── translation.json │ │ │ │ ├── provider.tsx │ │ │ │ ├── server.ts │ │ │ │ └── settings.ts │ │ │ ├── providers.tsx │ │ │ ├── readerSettings.tsx │ │ │ ├── store/ │ │ │ │ ├── useInBookmarkGridStore.ts │ │ │ │ ├── useInSearchPageStore.ts │ │ │ │ └── useSortOrderStore.ts │ │ │ ├── userLocalSettings/ │ │ │ │ ├── bookmarksLayout.tsx │ │ │ │ ├── types.ts │ │ │ │ └── userLocalSettings.ts │ │ │ ├── userSettings.tsx │ │ │ └── utils.ts │ │ ├── next-env.d.ts │ │ ├── next.config.mjs │ │ ├── package.json │ │ ├── postcss.config.cjs │ │ ├── public/ │ │ │ ├── blur.avif │ │ │ └── manifest.json │ │ ├── server/ │ │ │ ├── api/ │ │ │ │ └── client.ts │ │ │ └── auth.ts │ │ ├── tailwind.config.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ └── workers/ │ ├── .oxlintrc.json │ ├── exit.ts │ ├── index.ts │ ├── metascraper-plugins/ │ │ ├── metascraper-amazon-improved.ts │ │ └── metascraper-reddit.ts │ ├── metrics.ts │ ├── network.ts │ ├── package.json │ ├── scripts/ │ │ └── parseHtmlSubprocess.ts │ ├── server.ts │ ├── trpc.ts │ ├── tsconfig.json │ ├── tsdown.config.ts │ ├── utils.ts │ ├── workerTracing.ts │ ├── workerUtils.ts │ └── workers/ │ ├── adminMaintenance/ │ │ └── tasks/ │ │ ├── migrateLinkHtmlContent.ts │ │ └── tidyAssets.ts │ ├── adminMaintenanceWorker.ts │ ├── assetPreprocessingWorker.ts │ ├── backupWorker.ts │ ├── crawlerWorker.ts │ ├── feedWorker.ts │ ├── importWorker.ts │ ├── inference/ │ │ ├── inferenceWorker.ts │ │ ├── summarize.ts │ │ └── tagging.ts │ ├── ruleEngineWorker.ts │ ├── searchWorker.ts │ ├── utils/ │ │ ├── __fixtures__/ │ │ │ └── twz-feed.xml │ │ ├── feedParser.test.ts │ │ ├── feedParser.ts │ │ ├── fetchBookmarks.ts │ │ └── parseHtmlSubprocessIpc.ts │ ├── videoWorker.ts │ └── webhookWorker.ts ├── charts/ │ └── README.md ├── docker/ │ ├── Dockerfile │ ├── Dockerfile.dev │ ├── docker-compose.build.yml │ ├── docker-compose.dev.yml │ ├── docker-compose.yml │ └── root/ │ └── etc/ │ └── s6-overlay/ │ └── s6-rc.d/ │ ├── init-db-migration/ │ │ ├── run │ │ ├── type │ │ └── up │ ├── svc-web/ │ │ ├── dependencies.d/ │ │ │ └── init-db-migration │ │ ├── run │ │ └── type │ ├── svc-workers/ │ │ ├── dependencies.d/ │ │ │ └── init-db-migration │ │ ├── run │ │ └── type │ └── user/ │ └── contents.d/ │ └── .gitkeep ├── docs/ │ ├── .gitignore │ ├── .oxlintrc.json │ ├── README.md │ ├── babel.config.js │ ├── docs/ │ │ ├── 01-getting-started/ │ │ │ ├── 01-intro.md │ │ │ ├── 02-screenshots.md │ │ │ └── _category_.json │ │ ├── 02-installation/ │ │ │ ├── 01-docker.md │ │ │ ├── 02-unraid.md │ │ │ ├── 03-archlinux.md │ │ │ ├── 04-kubernetes.md │ │ │ ├── 06-debuntu.md │ │ │ ├── 07-minimal-install.md │ │ │ ├── 08-truenas.md │ │ │ ├── 09-cloud-hosting.md │ │ │ ├── 10-pikapods.md │ │ │ └── _category_.json │ │ ├── 03-configuration/ │ │ │ ├── 01-environment-variables.md │ │ │ ├── 02-different-ai-providers.md │ │ │ └── _category_.json │ │ ├── 04-using-karakeep/ │ │ │ ├── _category_.json │ │ │ ├── advanced-workflows.md │ │ │ ├── bookmarking.md │ │ │ ├── import.md │ │ │ ├── lists.md │ │ │ ├── quick-sharing.md │ │ │ ├── search-query-language.md │ │ │ └── tags.md │ │ ├── 05-integrations/ │ │ │ ├── 02-command-line.md │ │ │ ├── 03-mcp.md │ │ │ ├── 05-singlefile.md │ │ │ ├── 06-rss-feeds.md │ │ │ └── _category_.json │ │ ├── 06-administration/ │ │ │ ├── 01-security-considerations.md │ │ │ ├── 02-FAQ.md │ │ │ ├── 03-openai.md │ │ │ ├── 05-troubleshooting.md │ │ │ ├── 06-server-migration.md │ │ │ ├── 07-legacy-container-upgrade.md │ │ │ ├── 08-hoarder-to-karakeep-migration.md │ │ │ └── _category_.json │ │ ├── 07-community/ │ │ │ ├── 01-community-projects.md │ │ │ ├── 02-community-channels.md │ │ │ └── _category_.json │ │ ├── 08-development/ │ │ │ ├── 01-setup.md │ │ │ ├── 02-directories.md │ │ │ ├── 03-database.md │ │ │ ├── 04-architecture.md │ │ │ └── _category_.json │ │ └── api/ │ │ ├── _category_.json │ │ ├── add-bookmark-to-list.api.mdx │ │ ├── admin-update-user.api.mdx │ │ ├── attach-asset-to-bookmark.api.mdx │ │ ├── attach-tags-to-bookmark.api.mdx │ │ ├── check-bookmark-url.api.mdx │ │ ├── create-backup.api.mdx │ │ ├── create-bookmark.api.mdx │ │ ├── create-highlight.api.mdx │ │ ├── create-list.api.mdx │ │ ├── create-tag.api.mdx │ │ ├── delete-backup.api.mdx │ │ ├── delete-bookmark.api.mdx │ │ ├── delete-highlight.api.mdx │ │ ├── delete-list.api.mdx │ │ ├── delete-tag.api.mdx │ │ ├── detach-asset-from-bookmark.api.mdx │ │ ├── detach-tags-from-bookmark.api.mdx │ │ ├── download-backup.api.mdx │ │ ├── get-asset.api.mdx │ │ ├── get-backup.api.mdx │ │ ├── get-bookmark-highlights.api.mdx │ │ ├── get-bookmark-lists.api.mdx │ │ ├── get-bookmark.api.mdx │ │ ├── get-current-user-stats.api.mdx │ │ ├── get-current-user.api.mdx │ │ ├── get-highlight.api.mdx │ │ ├── get-list-bookmarks.api.mdx │ │ ├── get-list.api.mdx │ │ ├── get-tag-bookmarks.api.mdx │ │ ├── get-tag.api.mdx │ │ ├── karakeep-api.info.mdx │ │ ├── list-backups.api.mdx │ │ ├── list-bookmarks.api.mdx │ │ ├── list-highlights.api.mdx │ │ ├── list-lists.api.mdx │ │ ├── list-tags.api.mdx │ │ ├── remove-bookmark-from-list.api.mdx │ │ ├── replace-asset-on-bookmark.api.mdx │ │ ├── search-bookmarks.api.mdx │ │ ├── sidebar.ts │ │ ├── summarize-bookmark.api.mdx │ │ ├── update-bookmark.api.mdx │ │ ├── update-highlight.api.mdx │ │ ├── update-list.api.mdx │ │ ├── update-tag.api.mdx │ │ └── upload-asset.api.mdx │ ├── docusaurus.config.ts │ ├── package.json │ ├── sidebars.ts │ ├── src/ │ │ ├── css/ │ │ │ └── custom.css │ │ └── theme/ │ │ └── DocSidebarItem/ │ │ └── Category/ │ │ └── index.tsx │ ├── static/ │ │ ├── .nojekyll │ │ ├── _redirects │ │ └── robots.txt │ ├── tsconfig.json │ ├── versioned_docs/ │ │ ├── version-v0.28.0/ │ │ │ ├── 01-intro.md │ │ │ ├── 02-installation/ │ │ │ │ ├── 01-docker.md │ │ │ │ ├── 02-unraid.md │ │ │ │ ├── 03-archlinux.md │ │ │ │ ├── 04-kubernetes.md │ │ │ │ ├── 05-pikapods.md │ │ │ │ ├── 06-debuntu.md │ │ │ │ ├── 07-minimal-install.md │ │ │ │ ├── 08-truenas.md │ │ │ │ └── _category_.json │ │ │ ├── 03-configuration.md │ │ │ ├── 04-screenshots.md │ │ │ ├── 05-quick-sharing.md │ │ │ ├── 06-openai.md │ │ │ ├── 07-development/ │ │ │ │ ├── 01-setup.md │ │ │ │ ├── 02-directories.md │ │ │ │ ├── 03-database.md │ │ │ │ ├── 04-architecture.md │ │ │ │ └── _category_.json │ │ │ ├── 08-security-considerations.md │ │ │ ├── 09-command-line.md │ │ │ ├── 09-mcp.md │ │ │ ├── 10-import.md │ │ │ ├── 11-FAQ.md │ │ │ ├── 12-troubleshooting.md │ │ │ ├── 13-community-projects.md │ │ │ ├── 14-guides/ │ │ │ │ ├── 01-legacy-container-upgrade.md │ │ │ │ ├── 02-search-query-language.md │ │ │ │ ├── 03-singlefile.md │ │ │ │ ├── 04-hoarder-to-karakeep-migration.md │ │ │ │ ├── 05-different-ai-providers.md │ │ │ │ ├── 06-server-migration.md │ │ │ │ └── _category_.json │ │ │ └── api/ │ │ │ ├── _category_.json │ │ │ ├── add-a-bookmark-to-a-list.api.mdx │ │ │ ├── attach-asset.api.mdx │ │ │ ├── attach-tags-to-a-bookmark.api.mdx │ │ │ ├── create-a-new-bookmark.api.mdx │ │ │ ├── create-a-new-highlight.api.mdx │ │ │ ├── create-a-new-list.api.mdx │ │ │ ├── create-a-new-tag.api.mdx │ │ │ ├── delete-a-bookmark.api.mdx │ │ │ ├── delete-a-highlight.api.mdx │ │ │ ├── delete-a-list.api.mdx │ │ │ ├── delete-a-tag.api.mdx │ │ │ ├── detach-asset.api.mdx │ │ │ ├── detach-tags-from-a-bookmark.api.mdx │ │ │ ├── get-a-single-asset.api.mdx │ │ │ ├── get-a-single-bookmark.api.mdx │ │ │ ├── get-a-single-highlight.api.mdx │ │ │ ├── get-a-single-list.api.mdx │ │ │ ├── get-a-single-tag.api.mdx │ │ │ ├── get-all-bookmarks.api.mdx │ │ │ ├── get-all-highlights.api.mdx │ │ │ ├── get-all-lists.api.mdx │ │ │ ├── get-all-tags.api.mdx │ │ │ ├── get-bookmarks-in-the-list.api.mdx │ │ │ ├── get-bookmarks-with-the-tag.api.mdx │ │ │ ├── get-current-user-info.api.mdx │ │ │ ├── get-current-user-stats.api.mdx │ │ │ ├── get-highlights-of-a-bookmark.api.mdx │ │ │ ├── get-lists-of-a-bookmark.api.mdx │ │ │ ├── karakeep-api.info.mdx │ │ │ ├── remove-a-bookmark-from-a-list.api.mdx │ │ │ ├── replace-asset.api.mdx │ │ │ ├── search-bookmarks.api.mdx │ │ │ ├── sidebar.ts │ │ │ ├── summarize-a-bookmark.api.mdx │ │ │ ├── update-a-bookmark.api.mdx │ │ │ ├── update-a-highlight.api.mdx │ │ │ ├── update-a-list.api.mdx │ │ │ ├── update-a-tag.api.mdx │ │ │ ├── update-user.api.mdx │ │ │ └── upload-a-new-asset.api.mdx │ │ ├── version-v0.29.0/ │ │ │ ├── 01-intro.md │ │ │ ├── 02-installation/ │ │ │ │ ├── 01-docker.md │ │ │ │ ├── 02-unraid.md │ │ │ │ ├── 03-archlinux.md │ │ │ │ ├── 04-kubernetes.md │ │ │ │ ├── 05-pikapods.md │ │ │ │ ├── 06-debuntu.md │ │ │ │ ├── 07-minimal-install.md │ │ │ │ ├── 08-truenas.md │ │ │ │ └── _category_.json │ │ │ ├── 03-configuration.md │ │ │ ├── 04-screenshots.md │ │ │ ├── 05-quick-sharing.md │ │ │ ├── 06-openai.md │ │ │ ├── 07-development/ │ │ │ │ ├── 01-setup.md │ │ │ │ ├── 02-directories.md │ │ │ │ ├── 03-database.md │ │ │ │ ├── 04-architecture.md │ │ │ │ └── _category_.json │ │ │ ├── 08-security-considerations.md │ │ │ ├── 09-command-line.md │ │ │ ├── 09-mcp.md │ │ │ ├── 10-import.md │ │ │ ├── 11-FAQ.md │ │ │ ├── 12-troubleshooting.md │ │ │ ├── 13-community-projects.md │ │ │ ├── 14-guides/ │ │ │ │ ├── 01-legacy-container-upgrade.md │ │ │ │ ├── 02-search-query-language.md │ │ │ │ ├── 03-singlefile.md │ │ │ │ ├── 04-hoarder-to-karakeep-migration.md │ │ │ │ ├── 05-different-ai-providers.md │ │ │ │ ├── 06-server-migration.md │ │ │ │ └── _category_.json │ │ │ └── api/ │ │ │ ├── _category_.json │ │ │ ├── add-a-bookmark-to-a-list.api.mdx │ │ │ ├── attach-asset.api.mdx │ │ │ ├── attach-tags-to-a-bookmark.api.mdx │ │ │ ├── create-a-new-bookmark.api.mdx │ │ │ ├── create-a-new-highlight.api.mdx │ │ │ ├── create-a-new-list.api.mdx │ │ │ ├── create-a-new-tag.api.mdx │ │ │ ├── delete-a-backup.api.mdx │ │ │ ├── delete-a-bookmark.api.mdx │ │ │ ├── delete-a-highlight.api.mdx │ │ │ ├── delete-a-list.api.mdx │ │ │ ├── delete-a-tag.api.mdx │ │ │ ├── detach-asset.api.mdx │ │ │ ├── detach-tags-from-a-bookmark.api.mdx │ │ │ ├── download-a-backup.api.mdx │ │ │ ├── get-a-single-asset.api.mdx │ │ │ ├── get-a-single-backup.api.mdx │ │ │ ├── get-a-single-bookmark.api.mdx │ │ │ ├── get-a-single-highlight.api.mdx │ │ │ ├── get-a-single-list.api.mdx │ │ │ ├── get-a-single-tag.api.mdx │ │ │ ├── get-all-backups.api.mdx │ │ │ ├── get-all-bookmarks.api.mdx │ │ │ ├── get-all-highlights.api.mdx │ │ │ ├── get-all-lists.api.mdx │ │ │ ├── get-all-tags.api.mdx │ │ │ ├── get-bookmarks-in-the-list.api.mdx │ │ │ ├── get-bookmarks-with-the-tag.api.mdx │ │ │ ├── get-current-user-info.api.mdx │ │ │ ├── get-current-user-stats.api.mdx │ │ │ ├── get-highlights-of-a-bookmark.api.mdx │ │ │ ├── get-lists-of-a-bookmark.api.mdx │ │ │ ├── karakeep-api.info.mdx │ │ │ ├── remove-a-bookmark-from-a-list.api.mdx │ │ │ ├── replace-asset.api.mdx │ │ │ ├── search-bookmarks.api.mdx │ │ │ ├── sidebar.ts │ │ │ ├── summarize-a-bookmark.api.mdx │ │ │ ├── trigger-a-new-backup.api.mdx │ │ │ ├── update-a-bookmark.api.mdx │ │ │ ├── update-a-highlight.api.mdx │ │ │ ├── update-a-list.api.mdx │ │ │ ├── update-a-tag.api.mdx │ │ │ ├── update-user.api.mdx │ │ │ └── upload-a-new-asset.api.mdx │ │ ├── version-v0.30.0/ │ │ │ ├── 01-getting-started/ │ │ │ │ ├── 01-intro.md │ │ │ │ ├── 02-screenshots.md │ │ │ │ └── _category_.json │ │ │ ├── 02-installation/ │ │ │ │ ├── 01-docker.md │ │ │ │ ├── 02-unraid.md │ │ │ │ ├── 03-archlinux.md │ │ │ │ ├── 04-kubernetes.md │ │ │ │ ├── 06-debuntu.md │ │ │ │ ├── 07-minimal-install.md │ │ │ │ ├── 08-truenas.md │ │ │ │ ├── 09-cloud-hosting.md │ │ │ │ ├── 10-pikapods.md │ │ │ │ └── _category_.json │ │ │ ├── 03-configuration/ │ │ │ │ ├── 01-environment-variables.md │ │ │ │ ├── 02-different-ai-providers.md │ │ │ │ └── _category_.json │ │ │ ├── 04-using-karakeep/ │ │ │ │ ├── _category_.json │ │ │ │ ├── advanced-workflows.md │ │ │ │ ├── bookmarking.md │ │ │ │ ├── import.md │ │ │ │ ├── lists.md │ │ │ │ ├── quick-sharing.md │ │ │ │ ├── search-query-language.md │ │ │ │ └── tags.md │ │ │ ├── 05-integrations/ │ │ │ │ ├── 02-command-line.md │ │ │ │ ├── 03-mcp.md │ │ │ │ ├── 05-singlefile.md │ │ │ │ ├── 06-rss-feeds.md │ │ │ │ └── _category_.json │ │ │ ├── 06-administration/ │ │ │ │ ├── 01-security-considerations.md │ │ │ │ ├── 02-FAQ.md │ │ │ │ ├── 03-openai.md │ │ │ │ ├── 05-troubleshooting.md │ │ │ │ ├── 06-server-migration.md │ │ │ │ ├── 07-legacy-container-upgrade.md │ │ │ │ ├── 08-hoarder-to-karakeep-migration.md │ │ │ │ └── _category_.json │ │ │ ├── 07-community/ │ │ │ │ ├── 01-community-projects.md │ │ │ │ ├── 02-community-channels.md │ │ │ │ └── _category_.json │ │ │ ├── 08-development/ │ │ │ │ ├── 01-setup.md │ │ │ │ ├── 02-directories.md │ │ │ │ ├── 03-database.md │ │ │ │ ├── 04-architecture.md │ │ │ │ └── _category_.json │ │ │ └── api/ │ │ │ ├── _category_.json │ │ │ ├── add-a-bookmark-to-a-list.api.mdx │ │ │ ├── attach-asset.api.mdx │ │ │ ├── attach-tags-to-a-bookmark.api.mdx │ │ │ ├── create-a-new-bookmark.api.mdx │ │ │ ├── create-a-new-highlight.api.mdx │ │ │ ├── create-a-new-list.api.mdx │ │ │ ├── create-a-new-tag.api.mdx │ │ │ ├── delete-a-backup.api.mdx │ │ │ ├── delete-a-bookmark.api.mdx │ │ │ ├── delete-a-highlight.api.mdx │ │ │ ├── delete-a-list.api.mdx │ │ │ ├── delete-a-tag.api.mdx │ │ │ ├── detach-asset.api.mdx │ │ │ ├── detach-tags-from-a-bookmark.api.mdx │ │ │ ├── download-a-backup.api.mdx │ │ │ ├── get-a-single-asset.api.mdx │ │ │ ├── get-a-single-backup.api.mdx │ │ │ ├── get-a-single-bookmark.api.mdx │ │ │ ├── get-a-single-highlight.api.mdx │ │ │ ├── get-a-single-list.api.mdx │ │ │ ├── get-a-single-tag.api.mdx │ │ │ ├── get-all-backups.api.mdx │ │ │ ├── get-all-bookmarks.api.mdx │ │ │ ├── get-all-highlights.api.mdx │ │ │ ├── get-all-lists.api.mdx │ │ │ ├── get-all-tags.api.mdx │ │ │ ├── get-bookmarks-in-the-list.api.mdx │ │ │ ├── get-bookmarks-with-the-tag.api.mdx │ │ │ ├── get-current-user-info.api.mdx │ │ │ ├── get-current-user-stats.api.mdx │ │ │ ├── get-highlights-of-a-bookmark.api.mdx │ │ │ ├── get-lists-of-a-bookmark.api.mdx │ │ │ ├── karakeep-api.info.mdx │ │ │ ├── remove-a-bookmark-from-a-list.api.mdx │ │ │ ├── replace-asset.api.mdx │ │ │ ├── search-bookmarks.api.mdx │ │ │ ├── sidebar.ts │ │ │ ├── summarize-a-bookmark.api.mdx │ │ │ ├── trigger-a-new-backup.api.mdx │ │ │ ├── update-a-bookmark.api.mdx │ │ │ ├── update-a-highlight.api.mdx │ │ │ ├── update-a-list.api.mdx │ │ │ ├── update-a-tag.api.mdx │ │ │ ├── update-user.api.mdx │ │ │ └── upload-a-new-asset.api.mdx │ │ └── version-v0.31.0/ │ │ ├── 01-getting-started/ │ │ │ ├── 01-intro.md │ │ │ ├── 02-screenshots.md │ │ │ └── _category_.json │ │ ├── 02-installation/ │ │ │ ├── 01-docker.md │ │ │ ├── 02-unraid.md │ │ │ ├── 03-archlinux.md │ │ │ ├── 04-kubernetes.md │ │ │ ├── 06-debuntu.md │ │ │ ├── 07-minimal-install.md │ │ │ ├── 08-truenas.md │ │ │ ├── 09-cloud-hosting.md │ │ │ ├── 10-pikapods.md │ │ │ └── _category_.json │ │ ├── 03-configuration/ │ │ │ ├── 01-environment-variables.md │ │ │ ├── 02-different-ai-providers.md │ │ │ └── _category_.json │ │ ├── 04-using-karakeep/ │ │ │ ├── _category_.json │ │ │ ├── advanced-workflows.md │ │ │ ├── bookmarking.md │ │ │ ├── import.md │ │ │ ├── lists.md │ │ │ ├── quick-sharing.md │ │ │ ├── search-query-language.md │ │ │ └── tags.md │ │ ├── 05-integrations/ │ │ │ ├── 02-command-line.md │ │ │ ├── 03-mcp.md │ │ │ ├── 05-singlefile.md │ │ │ ├── 06-rss-feeds.md │ │ │ └── _category_.json │ │ ├── 06-administration/ │ │ │ ├── 01-security-considerations.md │ │ │ ├── 02-FAQ.md │ │ │ ├── 03-openai.md │ │ │ ├── 05-troubleshooting.md │ │ │ ├── 06-server-migration.md │ │ │ ├── 07-legacy-container-upgrade.md │ │ │ ├── 08-hoarder-to-karakeep-migration.md │ │ │ └── _category_.json │ │ ├── 07-community/ │ │ │ ├── 01-community-projects.md │ │ │ ├── 02-community-channels.md │ │ │ └── _category_.json │ │ ├── 08-development/ │ │ │ ├── 01-setup.md │ │ │ ├── 02-directories.md │ │ │ ├── 03-database.md │ │ │ ├── 04-architecture.md │ │ │ └── _category_.json │ │ └── api/ │ │ ├── _category_.json │ │ ├── add-bookmark-to-list.api.mdx │ │ ├── admin-update-user.api.mdx │ │ ├── attach-asset-to-bookmark.api.mdx │ │ ├── attach-tags-to-bookmark.api.mdx │ │ ├── check-bookmark-url.api.mdx │ │ ├── create-backup.api.mdx │ │ ├── create-bookmark.api.mdx │ │ ├── create-highlight.api.mdx │ │ ├── create-list.api.mdx │ │ ├── create-tag.api.mdx │ │ ├── delete-backup.api.mdx │ │ ├── delete-bookmark.api.mdx │ │ ├── delete-highlight.api.mdx │ │ ├── delete-list.api.mdx │ │ ├── delete-tag.api.mdx │ │ ├── detach-asset-from-bookmark.api.mdx │ │ ├── detach-tags-from-bookmark.api.mdx │ │ ├── download-backup.api.mdx │ │ ├── get-asset.api.mdx │ │ ├── get-backup.api.mdx │ │ ├── get-bookmark-highlights.api.mdx │ │ ├── get-bookmark-lists.api.mdx │ │ ├── get-bookmark.api.mdx │ │ ├── get-current-user-stats.api.mdx │ │ ├── get-current-user.api.mdx │ │ ├── get-highlight.api.mdx │ │ ├── get-list-bookmarks.api.mdx │ │ ├── get-list.api.mdx │ │ ├── get-tag-bookmarks.api.mdx │ │ ├── get-tag.api.mdx │ │ ├── karakeep-api.info.mdx │ │ ├── list-backups.api.mdx │ │ ├── list-bookmarks.api.mdx │ │ ├── list-highlights.api.mdx │ │ ├── list-lists.api.mdx │ │ ├── list-tags.api.mdx │ │ ├── remove-bookmark-from-list.api.mdx │ │ ├── replace-asset-on-bookmark.api.mdx │ │ ├── search-bookmarks.api.mdx │ │ ├── sidebar.ts │ │ ├── summarize-bookmark.api.mdx │ │ ├── update-bookmark.api.mdx │ │ ├── update-highlight.api.mdx │ │ ├── update-list.api.mdx │ │ ├── update-tag.api.mdx │ │ └── upload-asset.api.mdx │ ├── versioned_sidebars/ │ │ ├── version-v0.28.0-sidebars.json │ │ ├── version-v0.29.0-sidebars.json │ │ ├── version-v0.30.0-sidebars.json │ │ └── version-v0.31.0-sidebars.json │ └── versions.json ├── karakeep-linux.sh ├── kubernetes/ │ ├── .env_sample │ ├── .gitignore │ ├── .secrets_sample │ ├── Makefile │ ├── README.md │ ├── chrome-deployment.yaml │ ├── chrome-service.yaml │ ├── data-pvc.yaml │ ├── ingress_sample.yaml │ ├── kustomization.yaml │ ├── meilisearch-deployment.yaml │ ├── meilisearch-pvc.yaml │ ├── meilisearch-service.yaml │ ├── namespace.yaml │ ├── web-deployment.yaml │ └── web-service.yaml ├── package.json ├── packages/ │ ├── api/ │ │ ├── .oxlintrc.json │ │ ├── index.ts │ │ ├── middlewares/ │ │ │ ├── auth.ts │ │ │ └── trpcAdapter.ts │ │ ├── package.json │ │ ├── routes/ │ │ │ ├── admin.ts │ │ │ ├── assets.ts │ │ │ ├── backups.ts │ │ │ ├── bookmarks.ts │ │ │ ├── health.ts │ │ │ ├── highlights.ts │ │ │ ├── lists.ts │ │ │ ├── metrics.ts │ │ │ ├── public/ │ │ │ │ └── assets.ts │ │ │ ├── public.ts │ │ │ ├── rss.ts │ │ │ ├── tags.ts │ │ │ ├── trpc.ts │ │ │ ├── users.ts │ │ │ ├── version.ts │ │ │ └── webhooks.ts │ │ ├── tsconfig.json │ │ └── utils/ │ │ ├── assets.ts │ │ ├── pagination.ts │ │ ├── rss.ts │ │ ├── types.ts │ │ └── upload.ts │ ├── benchmarks/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── docker-compose.yml │ │ ├── package.json │ │ ├── setup/ │ │ │ └── html/ │ │ │ └── hello.html │ │ ├── src/ │ │ │ ├── benchmarks.ts │ │ │ ├── index.ts │ │ │ ├── log.ts │ │ │ ├── seed.ts │ │ │ ├── startContainers.ts │ │ │ ├── trpc.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── db/ │ │ ├── .oxlintrc.json │ │ ├── drizzle/ │ │ │ ├── 0000_luxuriant_johnny_blaze.sql │ │ │ ├── 0001_dapper_trauma.sql │ │ │ ├── 0002_worried_beyonder.sql │ │ │ ├── 0003_parallel_supernaut.sql │ │ │ ├── 0004_skinny_vengeance.sql │ │ │ ├── 0005_quiet_gunslinger.sql │ │ │ ├── 0006_funny_mac_gargan.sql │ │ │ ├── 0007_messy_raza.sql │ │ │ ├── 0008_cloudy_skin.sql │ │ │ ├── 0009_cuddly_cammi.sql │ │ │ ├── 0010_curved_sharon_ventura.sql │ │ │ ├── 0011_ordinary_phalanx.sql │ │ │ ├── 0012_noisy_grim_reaper.sql │ │ │ ├── 0013_square_lady_ursula.sql │ │ │ ├── 0014_lonely_thaddeus_ross.sql │ │ │ ├── 0015_first_reavers.sql │ │ │ ├── 0016_shallow_rawhide_kid.sql │ │ │ ├── 0017_slippery_senator_kelly.sql │ │ │ ├── 0018_bright_infant_terrible.sql │ │ │ ├── 0019_many_vertigo.sql │ │ │ ├── 0020_sudden_dagger.sql │ │ │ ├── 0021_magical_firebrand.sql │ │ │ ├── 0022_tough_nextwave.sql │ │ │ ├── 0023_late_night_nurse.sql │ │ │ ├── 0024_premium_hammerhead.sql │ │ │ ├── 0025_aspiring_skaar.sql │ │ │ ├── 0026_silky_imperial_guard.sql │ │ │ ├── 0027_cute_talon.sql │ │ │ ├── 0028_melodic_norrin_radd.sql │ │ │ ├── 0029_short_gunslinger.sql │ │ │ ├── 0030_blue_synch.sql │ │ │ ├── 0031_yummy_famine.sql │ │ │ ├── 0032_futuristic_shiva.sql │ │ │ ├── 0033_nappy_molten_man.sql │ │ │ ├── 0034_wet_the_stranger.sql │ │ │ ├── 0035_gorgeous_may_parker.sql │ │ │ ├── 0036_luxuriant_white_queen.sql │ │ │ ├── 0037_daily_smiling_tiger.sql │ │ │ ├── 0038_calm_clint_barton.sql │ │ │ ├── 0039_purple_albert_cleary.sql │ │ │ ├── 0040_long_mindworm.sql │ │ │ ├── 0041_fat_bloodstrike.sql │ │ │ ├── 0042_square_gamma_corps.sql │ │ │ ├── 0043_puzzling_blonde_phantom.sql │ │ │ ├── 0044_add_password_salt.sql │ │ │ ├── 0045_add_rule_engine.sql │ │ │ ├── 0046_add_rss_feed_enabled_col.sql │ │ │ ├── 0047_add_summarization_status.sql │ │ │ ├── 0048_add_user_settings.sql │ │ │ ├── 0049_add_rss_token.sql │ │ │ ├── 0050_add_user_settings_archive_display_behaviour.sql │ │ │ ├── 0051_public_lists.sql │ │ │ ├── 0052_add_bookmark_quota.sql │ │ │ ├── 0053_storage_quota.sql │ │ │ ├── 0054_add_timezone.sql │ │ │ ├── 0055_content_asset_id.sql │ │ │ ├── 0056_user_invites.sql │ │ │ ├── 0057_salty_carmella_unuscione.sql │ │ │ ├── 0058_add_subscription.sql │ │ │ ├── 0059_browserless_user_setting.sql │ │ │ ├── 0060_drop_invite_expire_at.sql │ │ │ ├── 0061_merge_user_settings.sql │ │ │ ├── 0062_add_import_session.sql │ │ │ ├── 0063_add_bookmark_source.sql │ │ │ ├── 0064_add_import_tags_to_feeds.sql │ │ │ ├── 0065_collaborative_lists.sql │ │ │ ├── 0066_collaborative_lists_invites.sql │ │ │ ├── 0067_add_backups_table.sql │ │ │ ├── 0068_optimize_bookmark_indicies.sql │ │ │ ├── 0069_fix_pending_summarization.sql │ │ │ ├── 0070_add_reader_settings.sql │ │ │ ├── 0071_add_normalized_tag_name.sql │ │ │ ├── 0072_add_user_ai_preferences.sql │ │ │ ├── 0073_ai_tag_style.sql │ │ │ ├── 0074_reset_tagging_summarization.sql │ │ │ ├── 0075_change_default_tag_style.sql │ │ │ ├── 0076_add_api_key_last_used_tracking.sql │ │ │ ├── 0077_import_listpaths_to_listids.sql │ │ │ ├── 0078_add_import_session_indexes.sql │ │ │ ├── 0079_add_tag_granularity_settings.sql │ │ │ ├── 0080_user_reading_progress.sql │ │ │ └── meta/ │ │ │ ├── 0000_snapshot.json │ │ │ ├── 0001_snapshot.json │ │ │ ├── 0002_snapshot.json │ │ │ ├── 0003_snapshot.json │ │ │ ├── 0004_snapshot.json │ │ │ ├── 0005_snapshot.json │ │ │ ├── 0006_snapshot.json │ │ │ ├── 0007_snapshot.json │ │ │ ├── 0008_snapshot.json │ │ │ ├── 0009_snapshot.json │ │ │ ├── 0010_snapshot.json │ │ │ ├── 0011_snapshot.json │ │ │ ├── 0012_snapshot.json │ │ │ ├── 0013_snapshot.json │ │ │ ├── 0014_snapshot.json │ │ │ ├── 0015_snapshot.json │ │ │ ├── 0016_snapshot.json │ │ │ ├── 0017_snapshot.json │ │ │ ├── 0018_snapshot.json │ │ │ ├── 0019_snapshot.json │ │ │ ├── 0020_snapshot.json │ │ │ ├── 0021_snapshot.json │ │ │ ├── 0022_snapshot.json │ │ │ ├── 0023_snapshot.json │ │ │ ├── 0024_snapshot.json │ │ │ ├── 0025_snapshot.json │ │ │ ├── 0026_snapshot.json │ │ │ ├── 0027_snapshot.json │ │ │ ├── 0028_snapshot.json │ │ │ ├── 0029_snapshot.json │ │ │ ├── 0030_snapshot.json │ │ │ ├── 0031_snapshot.json │ │ │ ├── 0032_snapshot.json │ │ │ ├── 0033_snapshot.json │ │ │ ├── 0034_snapshot.json │ │ │ ├── 0035_snapshot.json │ │ │ ├── 0036_snapshot.json │ │ │ ├── 0037_snapshot.json │ │ │ ├── 0038_snapshot.json │ │ │ ├── 0039_snapshot.json │ │ │ ├── 0040_snapshot.json │ │ │ ├── 0041_snapshot.json │ │ │ ├── 0042_snapshot.json │ │ │ ├── 0043_snapshot.json │ │ │ ├── 0044_snapshot.json │ │ │ ├── 0045_snapshot.json │ │ │ ├── 0046_snapshot.json │ │ │ ├── 0047_snapshot.json │ │ │ ├── 0048_snapshot.json │ │ │ ├── 0049_snapshot.json │ │ │ ├── 0050_snapshot.json │ │ │ ├── 0051_snapshot.json │ │ │ ├── 0052_snapshot.json │ │ │ ├── 0053_snapshot.json │ │ │ ├── 0054_snapshot.json │ │ │ ├── 0055_snapshot.json │ │ │ ├── 0056_snapshot.json │ │ │ ├── 0057_snapshot.json │ │ │ ├── 0058_snapshot.json │ │ │ ├── 0059_snapshot.json │ │ │ ├── 0060_snapshot.json │ │ │ ├── 0061_snapshot.json │ │ │ ├── 0062_snapshot.json │ │ │ ├── 0063_snapshot.json │ │ │ ├── 0064_snapshot.json │ │ │ ├── 0065_snapshot.json │ │ │ ├── 0066_snapshot.json │ │ │ ├── 0067_snapshot.json │ │ │ ├── 0068_snapshot.json │ │ │ ├── 0069_snapshot.json │ │ │ ├── 0070_snapshot.json │ │ │ ├── 0071_snapshot.json │ │ │ ├── 0072_snapshot.json │ │ │ ├── 0073_snapshot.json │ │ │ ├── 0074_snapshot.json │ │ │ ├── 0075_snapshot.json │ │ │ ├── 0076_snapshot.json │ │ │ ├── 0077_snapshot.json │ │ │ ├── 0078_snapshot.json │ │ │ ├── 0079_snapshot.json │ │ │ ├── 0080_snapshot.json │ │ │ └── _journal.json │ │ ├── drizzle.config.ts │ │ ├── drizzle.ts │ │ ├── index.ts │ │ ├── instrumentation.ts │ │ ├── migrate.ts │ │ ├── package.json │ │ ├── schema.ts │ │ └── tsconfig.json │ ├── e2e_tests/ │ │ ├── .gitignore │ │ ├── .oxlintrc.json │ │ ├── docker-compose.yml │ │ ├── package.json │ │ ├── setup/ │ │ │ ├── html/ │ │ │ │ ├── feed.xml │ │ │ │ └── hello.html │ │ │ ├── seed.ts │ │ │ └── startContainers.ts │ │ ├── tests/ │ │ │ ├── api/ │ │ │ │ ├── assets.test.ts │ │ │ │ ├── backups.test.ts │ │ │ │ ├── bookmarks.test.ts │ │ │ │ ├── highlights.test.ts │ │ │ │ ├── lists.test.ts │ │ │ │ ├── public.test.ts │ │ │ │ ├── rss.test.ts │ │ │ │ ├── tags.test.ts │ │ │ │ └── users.test.ts │ │ │ ├── assetdb/ │ │ │ │ ├── assetdb-utils.ts │ │ │ │ ├── interface-compliance.test.ts │ │ │ │ ├── local-filesystem-store.test.ts │ │ │ │ └── s3-store.test.ts │ │ │ └── workers/ │ │ │ ├── crawler.test.ts │ │ │ ├── feed.test.ts │ │ │ └── import.test.ts │ │ ├── tsconfig.json │ │ ├── utils/ │ │ │ ├── api.ts │ │ │ ├── assets.ts │ │ │ ├── general.ts │ │ │ └── trpc.ts │ │ └── vitest.config.ts │ ├── open-api/ │ │ ├── .oxlintrc.json │ │ ├── index.ts │ │ ├── karakeep-openapi-spec.json │ │ ├── lib/ │ │ │ ├── admin.ts │ │ │ ├── assets.ts │ │ │ ├── backups.ts │ │ │ ├── bookmarks.ts │ │ │ ├── common.ts │ │ │ ├── errors.ts │ │ │ ├── highlights.ts │ │ │ ├── lists.ts │ │ │ ├── pagination.ts │ │ │ ├── tags.ts │ │ │ ├── types.ts │ │ │ └── users.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── plugins/ │ │ ├── .oxlintrc.json │ │ ├── package.json │ │ ├── queue-liteque/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── index.ts │ │ ├── queue-restate/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── admin.ts │ │ │ ├── dispatcher.ts │ │ │ ├── env.ts │ │ │ ├── idProvider.ts │ │ │ ├── index.ts │ │ │ ├── runner.ts │ │ │ ├── semaphore.ts │ │ │ ├── service.ts │ │ │ ├── tests/ │ │ │ │ ├── docker-compose.yml │ │ │ │ ├── queue.test.ts │ │ │ │ ├── setup/ │ │ │ │ │ └── startContainers.ts │ │ │ │ └── utils.ts │ │ │ └── types.ts │ │ ├── ratelimit-memory/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── index.test.ts │ │ │ └── index.ts │ │ ├── ratelimit-redis/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── index.ts │ │ │ └── tests/ │ │ │ ├── docker-compose.yml │ │ │ ├── ratelimit-redis.test.ts │ │ │ ├── setup/ │ │ │ │ └── startContainers.ts │ │ │ └── utils.ts │ │ ├── search-meilisearch/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── env.ts │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── sdk/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .oxlintrc.json │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── karakeep-api.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── shared/ │ │ ├── .oxlintrc.json │ │ ├── assetdb.ts │ │ ├── concurrency.test.ts │ │ ├── concurrency.ts │ │ ├── config.ts │ │ ├── customFetch.ts │ │ ├── debug.ts │ │ ├── import-export/ │ │ │ ├── exporters.ts │ │ │ ├── fixtures/ │ │ │ │ └── linkwarden-export.json │ │ │ ├── importer.test.ts │ │ │ ├── importer.ts │ │ │ ├── index.ts │ │ │ ├── parsers.test.ts │ │ │ └── parsers.ts │ │ ├── index.ts │ │ ├── inference.ts │ │ ├── langs.ts │ │ ├── logger.ts │ │ ├── package.json │ │ ├── plugins.ts │ │ ├── prompts.server.ts │ │ ├── prompts.ts │ │ ├── queueing.ts │ │ ├── ratelimiting.ts │ │ ├── search.ts │ │ ├── searchQueryParser.test.ts │ │ ├── searchQueryParser.ts │ │ ├── signedTokens.test.ts │ │ ├── signedTokens.ts │ │ ├── storageQuota.ts │ │ ├── trpc.ts │ │ ├── tryCatch.ts │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ ├── admin.ts │ │ │ ├── assets.ts │ │ │ ├── backups.ts │ │ │ ├── bookmarks.ts │ │ │ ├── config.ts │ │ │ ├── feeds.ts │ │ │ ├── highlights.ts │ │ │ ├── importSessions.ts │ │ │ ├── lists.ts │ │ │ ├── pagination.ts │ │ │ ├── prompts.ts │ │ │ ├── readers.ts │ │ │ ├── rules.ts │ │ │ ├── search.ts │ │ │ ├── tags.ts │ │ │ ├── uploads.ts │ │ │ ├── users.ts │ │ │ └── webhooks.ts │ │ ├── utils/ │ │ │ ├── assetUtils.ts │ │ │ ├── bookmarkUtils.ts │ │ │ ├── htmlUtils.ts │ │ │ ├── listUtils.ts │ │ │ ├── reading-progress-dom.test.ts │ │ │ ├── reading-progress-dom.ts │ │ │ ├── redirectUrl.test.ts │ │ │ ├── redirectUrl.ts │ │ │ ├── relativeDateUtils.ts │ │ │ ├── switch.ts │ │ │ └── tag.ts │ │ └── vitest.config.ts │ ├── shared-react/ │ │ ├── .oxlintrc.json │ │ ├── components/ │ │ │ ├── BookmarkHtmlHighlighter.tsx │ │ │ ├── ScrollProgressTracker.tsx │ │ │ ├── highlights.ts │ │ │ └── ui/ │ │ │ ├── button.tsx │ │ │ ├── popover.tsx │ │ │ └── textarea.tsx │ │ ├── hooks/ │ │ │ ├── assets.ts │ │ │ ├── bookmark-grid-context.tsx │ │ │ ├── bookmark-list-context.tsx │ │ │ ├── bookmarks.ts │ │ │ ├── highlights.ts │ │ │ ├── lists.ts │ │ │ ├── reader-settings.tsx │ │ │ ├── reading-progress.ts │ │ │ ├── rules.ts │ │ │ ├── search-history.ts │ │ │ ├── tags.ts │ │ │ ├── use-debounce.ts │ │ │ └── users.ts │ │ ├── lib/ │ │ │ └── utils.ts │ │ ├── package.json │ │ ├── providers/ │ │ │ └── trpc-provider.tsx │ │ ├── trpc.ts │ │ └── tsconfig.json │ ├── shared-server/ │ │ ├── .oxlintrc.json │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── plugins.ts │ │ │ ├── queues.ts │ │ │ ├── services/ │ │ │ │ └── quotaService.ts │ │ │ ├── tracing.ts │ │ │ └── tracingTypes.ts │ │ └── tsconfig.json │ └── trpc/ │ ├── .oxlintrc.json │ ├── auth.ts │ ├── email.ts │ ├── index.ts │ ├── lib/ │ │ ├── __tests__/ │ │ │ ├── ruleEngine.test.ts │ │ │ └── search.test.ts │ │ ├── attachments.ts │ │ ├── impersonate.ts │ │ ├── rateLimit.ts │ │ ├── ruleEngine.ts │ │ ├── search.ts │ │ ├── tracing.ts │ │ └── turnstile.ts │ ├── models/ │ │ ├── assets.ts │ │ ├── backups.ts │ │ ├── bookmarks.ts │ │ ├── feeds.ts │ │ ├── highlights.ts │ │ ├── importSessions.ts │ │ ├── listInvitations.ts │ │ ├── lists.ts │ │ ├── rules.ts │ │ ├── tags.ts │ │ ├── users.ts │ │ └── webhooks.ts │ ├── package.json │ ├── routers/ │ │ ├── _app.ts │ │ ├── admin.test.ts │ │ ├── admin.ts │ │ ├── apiKeys.test.ts │ │ ├── apiKeys.ts │ │ ├── assets.test.ts │ │ ├── assets.ts │ │ ├── backups.ts │ │ ├── bookmarks.test.ts │ │ ├── bookmarks.ts │ │ ├── config.ts │ │ ├── feeds.test.ts │ │ ├── feeds.ts │ │ ├── highlights.test.ts │ │ ├── highlights.ts │ │ ├── importSessions.test.ts │ │ ├── importSessions.ts │ │ ├── invites.test.ts │ │ ├── invites.ts │ │ ├── lists.test.ts │ │ ├── lists.ts │ │ ├── prompts.test.ts │ │ ├── prompts.ts │ │ ├── publicBookmarks.ts │ │ ├── rules.test.ts │ │ ├── rules.ts │ │ ├── sharedLists.test.ts │ │ ├── subscriptions.test.ts │ │ ├── subscriptions.ts │ │ ├── tags.test.ts │ │ ├── tags.ts │ │ ├── users.test.ts │ │ ├── users.ts │ │ ├── webhooks.test.ts │ │ └── webhooks.ts │ ├── stats.ts │ ├── testUtils.ts │ ├── tsconfig.json │ └── vitest.config.ts ├── patches/ │ ├── playwright-extra@4.3.6.patch │ └── xcode@3.0.1.patch ├── pnpm-workspace.yaml ├── start-dev.sh ├── tooling/ │ ├── github/ │ │ ├── package.json │ │ └── setup/ │ │ └── action.yml │ ├── oxlint/ │ │ ├── oxlint-base.json │ │ ├── oxlint-nextjs.json │ │ ├── oxlint-react.json │ │ └── package.json │ ├── prettier/ │ │ ├── index.js │ │ ├── package.json │ │ └── tsconfig.json │ ├── tailwind/ │ │ ├── .oxlintrc.json │ │ ├── base.ts │ │ ├── globals.css │ │ ├── native.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── web.ts │ └── typescript/ │ ├── base.json │ ├── node.json │ └── package.json ├── tools/ │ └── compare-models/ │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── apiClient.ts │ │ ├── bookmarkProcessor.ts │ │ ├── config.ts │ │ ├── index.ts │ │ ├── inferenceClient.ts │ │ ├── interactive.ts │ │ └── types.ts │ └── tsconfig.json └── turbo.json