Skip to content

Simple bookmark manager with nested categories and fuzzy word search across the data.

License

Notifications You must be signed in to change notification settings

Tanq16/linksnapper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LinkSnapper Logo

LinkSnapper


Release Build Go Report Card
GitHub Release Docker Pulls

LinkSnapper is a sleek and minimalist bookmark manager designed for homelab use. It supports a hierarchical category system with a simple and intuitive web interface. It's available for all operating systems and architectures as a binary as well as a multi-architecture container image.


Why Create This?

There are numerous bookmark managers available, and they're great. My personal favorites are Hoarder and Linkwarden. But I wanted an even simpler solution that I could integrate my AI-Context project with, mainly to get text-based backups of my links and repositories. I also wanted a significantly simpler format of links to create a shareable repository from my bookmarks. LinkSnapper was created to be that lightweight, no-nonsense bookmark manager that just works. (Integration of AI-Context is a WIP)

Features

Core Functionality

  • Simple bookmark management with essential details (URL, name, description, and categories)
  • Multi-level path-based category support, with fuzzy match for new links
  • UUID-based link identification in the backend
  • REST API for bookmark management
  • Intuitive search and navigation for links
  • Clean and responsive web interface with light and dark mode support
  • Flat file storage system (data/links.json)

Organization

  1. Hierarchical Category System
    • Create unlimited nested categories
    • Organize links in a tree-like structure
    • Easy navigation with breadcrumb trails
  2. Smart (fuzzy) Category Suggestions
    • Auto-suggests existing categories while adding new links
    • Prevents category fragmentation
  3. Quick Access Interface
    • Fast link addition with minimal clicks
    • Efficient search through browser's built-in search

Screenshots

Desktop View Mobile View
Light Light Mobile Light
Dark Dark Mobile Dark

Tip

The interface automatically adapts to system preferences for themes. The views are optimized for both desktop and mobile use.

Installation

Go Install

go install github.com/tanq16/linksnapper/cmd@latest

Docker Installation

docker pull tanq16/linksnapper:main
docker run -d \
--name linksnapper \
-p 8080:8080 \
-v linksnapper_data:/app/data \
tanq16/linksnapper:main

To use it with Docker compose or a container-management system like Portainer or Dockge, use this YAML definition:

version: "3.8"
services:
  linksnapper:
    image: tanq16/linksnapper:main
    restart: unless-stopped
    ports:
      - 8080:8080
    volumes:
      - /home/user/linksnapper:/app/data # CHANGE DIR

Building from Source

git clone https://github.com/tanq16/linksnapper.git && \
cd linksnapper && \
go build ./cmd/linksnapper

Usage

Access the web interface through your browser at http://localhost:8080/

Note

This app has no authentication, so deploy carefully. It works well with a reverse proxy like Nginx Proxy Manager and is mainly intended for homelab use.

REST API

Add Link:

curl -X POST http://localhost:8080/api/links \
-H "Content-Type: application/json" \
-d '{
    "url": "https://example.com",
    "name": "Example Site",
    "description": "An example website",
    "path": ["Tech", "Resources"]
}'

Get All Links:

curl http://localhost:8080/api/links

Delete Link:

curl -X DELETE http://localhost:8080/api/links/{id}

Update Link:

curl -X PUT http://localhost:8080/api/links/{id} \
-H "Content-Type: application/json" \
-d '{
    "url": "https://example.com",
    "name": "Updated Name",
    "description": "Updated description",
    "path": ["New", "Category", "Path"]
}'

Technology Stack

  • Build using Go for the backend
  • Flat JSON file for storage
  • Vanilla JavaScript, HTML, and CSS for the frontend
  • REST API and Web UI for interaction