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.
- Host: GitHub
- URL: https://github.com/tanq16/linksnapper
- Owner: Tanq16
- License: mit
- Created: 2025-02-03T22:57:54.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-02-13T17:45:18.000Z (8 months ago)
- Last Synced: 2025-02-13T18:37:36.550Z (8 months ago)
- Topics: bookmark-manager, bookmarker, bookmarks, go, golang, homelab, link-manager, links, self-hosted, self-hosting
- Language: JavaScript
- Homepage:
- Size: 3.07 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
LinkSnapper
`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 ||
|
| 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