Skip to main content

Get Started in 3 Minutes

This guide will walk you through creating an account, saving your first bookmark, and organizing it with AI-powered tags.
1

Create Your Account

Navigate to the application homepage and click the sign-in button. You’ll see two authentication options:
  1. Enter your email address in the input field
  2. Click Continue with email
  3. Check your inbox for the magic link
  4. Click the link to instantly sign in

Sign In with GitHub

Click Continue with GitHub to authenticate using your GitHub account. You’ll be redirected to GitHub for authorization.
Login.tsx:31-38
const handleLogin = async (e: FormEvent<HTMLFormElement>) => {
  e.preventDefault()
  if (!emailRegex.test(email)) return showErrorToast("Please add a valid email address!")
  loginWithOtp(email)
  showSuccessToast(`Please check your email! We've sent the login link to ${email}.`)
  setEmail("")
  closeModal()
}
The magic link is valid for 1 hour and can only be used once for security reasons.
2

Save Your First Bookmark

Once authenticated, you’ll see the bookmark input at the bottom of the screen.

Add a Bookmark

  1. Paste a URL: Click the paste icon or use Ctrl+V to paste from clipboard
  2. Type manually: Enter any valid URL starting with https://
  3. Submit: Click the arrow icon or press Enter
The application will automatically:
  • Validate the URL format
  • Fetch website metadata (title, description, favicon)
  • Extract the domain and preview image
  • Save to your collection
AddBookmark.tsx:18-24
const checkBookmarkExists = async (e: FormEvent<HTMLFormElement>) => {
  e.preventDefault()
  if (inputRef.current) inputRef.current.blur()
  const isBookmarkExist = bookmarks.some(bookmark => bookmark.url === url)
  if (isBookmarkExist) return showInfoToast("This website is already in your collection.", { action: {label: "Save", onClick: () => handleCreate()}, description: "Are you sure you want to save it again?", duration: 10000, icon: null })
  handleCreate()
}
You can paste clipboard content directly by clicking the clipboard icon - no need to manually paste!

What Happens Behind the Scenes

When you save a bookmark, the system:
BookmarkStore.ts:47-66
add: async (url, userId) => {
  if (!url) return { data: "Please enter a valid URL.", success: false }
  if (!isValidUrl(url)) return { data: "Invalid URL format. Make sure the URL starts with https://.", success: false }
  try {
    set({ loading: true })
    const metadata = await getMetadata(url)
    if (!metadata) return { data: "Could not retrieve metadata. Please check if the URL is correct.", success: false }
    const { data, error } = await supabase
      .from("bookmarks")
      .insert({ title: metadata.title || metadata.domain, domain: metadata.domain, url: metadata.url, description: metadata.description, image: metadata.images[0], saved_by: userId, tags: [] })
      .select()
      .returns<Bookmark[]>()
    if (error) throw new Error(`Error saving bookmark: ${error.message}`)
    return { data, success: true }
  } catch (error) {
    return { data: "Failed to retrieve data for the entered URL.", success: false }
  } finally {
    set({ loading: false })
  }
},
3

Organize with Tags

Tags help you categorize and quickly find your bookmarks later.

Add Tags Manually

  1. Click on the “add tags…” text below any bookmark
  2. Type a tag name and press , (comma) or Enter
  3. Add multiple tags by repeating step 2
  4. Click the checkmark icon to save

Tag Editing Features

The tag editor supports:
  • Multiple tags: Separate with comma or Enter key
  • Remove tags: Click the X icon when editing
  • Backspace editing: Press backspace to edit the last tag
  • Auto-save: Tags are saved to Supabase when you confirm
BookmarkTags.tsx:33-40
if ((e.key === "," || e.key === "Enter") && trimmedInput.length && !newTags.includes(trimmedInput)) {
  e.preventDefault()
  setNewTags(prev => [ ...prev, trimmedInput ])
  setInputValue("")
}

if (e.key === "Backspace" && !inputValue.length && newTags.length && isKeyReleased) {
  e.preventDefault()
Tags are case-insensitive and automatically converted to lowercase. Duplicate tags are prevented.

Generate AI Tags

While manual tagging is available, the application is designed to support AI-assisted tag generation based on bookmark content and metadata.
4

Find Bookmarks Fast

Use the powerful search capabilities to find any bookmark instantly.Press ⌘K (Mac) or Ctrl+K (Windows/Linux) to open the command menu:
CommandMenu.tsx:14-23
useEffect(() => {
  const down = (e: KeyboardEvent) => {
    if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
      e.preventDefault()
      setOpen((open) => !open)
    }
  }
  document.addEventListener("keydown", down)
  return () => document.removeEventListener("keydown", down)
}, [])
The search indexes:
  • Bookmark titles
  • Full URLs
  • All associated tags

Filter by Tags

Click any tag to filter your bookmarks by that category. Only bookmarks with the selected tag will be displayed.

Time-Based Filtering

Click the calendar icon in the bottom input to cycle through:
  • All time: Show all bookmarks
  • Last month: Bookmarks from the past 30 days
  • Last week: Bookmarks from the past 7 days

Sort Order

Toggle between newest first and oldest first by clicking the sort icon:
AddBookmark.tsx:72-80
<button onClick={() => setOrder(order === "asc" ? "desc" : "asc")} className={filterButtonStyle} disabled={loading}>
  { order === "asc" ? <DataTransferDown className="w-3 h-3" /> : <DataTransferUp className="w-3 h-3" /> }
  { order === "asc" ? "Oldest first" : "Newest first" }
</button>
<span className="text-xs text-zinc-700">|</span>
<button onClick={changeTimePeriod} className={filterButtonStyle} disabled={loading}>
  <CalendarRotate className="w-3 h-3" />
  { timePeriod === "all" ? "All time" : timePeriod === "month" ? "Last month" : "Last week" }
</button>

Common Operations

Edit a Bookmark

  1. Click the three-dot menu on any bookmark card
  2. Select Edit
  3. Modify the title, description, or URL
  4. Click Save to update

Delete a Bookmark

  1. Click the three-dot menu on any bookmark card
  2. Select Delete
  3. Confirm the deletion in the modal
Deleting a bookmark is permanent and cannot be undone. Make sure you really want to remove it.

Pin Important Bookmarks

Pinned bookmarks always appear at the top of your list, regardless of the sort order. Use this feature for frequently accessed websites.

Keyboard Shortcuts

Master these shortcuts for maximum productivity:
ShortcutAction
⌘K / Ctrl+KOpen command menu
/ Navigate search results
EnterOpen selected bookmark
EscClose command menu
, or EnterAdd tag (when editing)
BackspaceEdit last tag (when editing)

Next Steps

Installation Guide

Learn how to self-host the application with your own Supabase instance

API Reference

Explore the stores, utilities, and components API
Join our community on GitHub to request features, report bugs, or contribute to the project!

Build docs developers (and LLMs) love