An open API service indexing awesome lists of open source software.

https://github.com/tanq16/linksnapper

Simple bookmark manager with nested categories and fuzzy word search across the data.
https://github.com/tanq16/linksnapper

bookmark-manager bookmarker bookmarks go golang homelab link-manager links self-hosted self-hosting

Last synced: 8 months ago
JSON representation

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

Awesome Lists containing this project

README

          


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](#why-create-this)
- [Features](#features)
- [Screenshots](#screenshots)
- [Installation](#installation)
- [Usage](#usage)
- [Tech Stack](#technology-stack)

# 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

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

### Docker Installation

```bash
docker pull tanq16/linksnapper:main
```

```bash
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:

```yaml
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

```bash
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:

```bash
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:

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

Delete Link:

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

Update Link:

```bash
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