Hoarder - All-in-one Bookmarking & Note-taking App

Hoarder - All-in-one Bookmarking & Note-taking App

Hoarder is a self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search.

Before we continue, the developer of Hoarder leaves a note on its GitHub repo just to clear some confusion (if any): 

Hoarder is an independent, non-commercial project. It is not affiliated with, endorsed by, or connected to Hordr.app or its owners.

When this post is written, the project has already starred over than 15K on GitHub and it is still under heavy development, so you should expect this app is far from stable. But hey, at least it is already usable, right? 

hoarder-homepage.png 339.57 KB

Hoarder Main Features

  • Bookmark links, take simple notes and store images.
  • Automatic fetching for link titles, descriptions and images.
  • Sort your bookmarks into lists.
  • Full text search of all the content stored.
  • AI-based (aka chatgpt) automatic tagging. With supports for local models using ollama!
  • Chrome plugin and Firefox addon for quick bookmarking.
  • An iOS app, and an Android app.
  • Dark mode support (web only so far).
  • Self-hosting first.
  • [Planned] Downloading the content for offline reading.

If you would like to have a quick try, you can access the demo at https://try.hoarder.app. Login with the following credential: 

email: demo@hoarder.app
password: demodemo

Please note that the demo is seeded with some content, but it's in read-only mode to prevent abuse.

How to install using Docker?

First you need to make a directory in user home directory:

$ cd ~
$ mkdir hoarder-app 

Inside the newly created directory, you need to create .env file contains the following: 

HOARDER_VERSION=latest
NEXTAUTH_SECRET=qxo0NvLCphGhkAu5fBcS1B0MxCeoig8G
MEILI_MASTER_KEY=aqxYm5UWCphGhkAu5fBcSJAPbSzeoiC2X
NEXTAUTH_URL=http://localhost:3000

You should change the random strings. You can use openssl rand -base64 36 in a seperate terminal window to generate the random strings. You should also change the NEXTAUTH_URL variable to point to your server address.

Then create a docker-compose.yml file with the following configuration:

services:
  web:
    image: ghcr.io/hoarder-app/hoarder:latest
    restart: unless-stopped
    volumes:
      - /docker/hoarder/data:/data
    ports:
      - 3333:3000
    env_file:
      - .env
    environment:
      REDIS_HOST: redis
      MEILI_ADDR: http://meilisearch:7700
      DATA_DIR: /data
  redis:
    image: redis:7.2-alpine
    restart: unless-stopped
    volumes:
      - /docker/hoarder/redis:/data
  chrome:
    image: gcr.io/zenika-hub/alpine-chrome:123
    restart: unless-stopped
    command:
      - --no-sandbox
      - --disable-gpu
      - --disable-dev-shm-usage
      - --remote-debugging-address=0.0.0.0
      - --remote-debugging-port=9222
      - --hide-scrollbars
  meilisearch:
    image: getmeili/meilisearch:v1.6
    restart: unless-stopped
    env_file:
      - .env
    environment:
      MEILI_NO_ANALYTICS: "true"
    volumes:
      - /docker/hoarder/meilisearch:/meili_data
  workers:
    image: ghcr.io/hoarder-app/hoarder-workers:latest
    restart: unless-stopped
    volumes:
      - /docker/hoarder/data:/data
    env_file:
      - .env
    environment:
      REDIS_HOST: redis
      MEILI_ADDR: http://meilisearch:7700
      BROWSER_WEB_URL: http://chrome:9222
      DATA_DIR: /data
      # OPENAI_API_KEY: ...
    depends_on:
      web:
        condition: service_started

volumes:
  redis:
  meilisearch:
  data:

To enable automatic tagging, you'll need to configure OpenAI. This is optional though but highly recommended.

  • Follow OpenAI's help to get an API key.
  • Add the OpenAI API key to the env file:
OPENAI_API_KEY=<key>

Now let's build the docker-compose by running

$ docker compose up -d 

If everything done right, you can access Hoarder at localhost:3000. 

Technology stacks

If you're wondering what are the tech stacks that is powering Hoarder, they are: 

  • NextJS for the web app. Using app router.
  • Drizzle for the database and its migrations.
  • NextAuth for authentication.
  • tRPC for client->server communication.
  • Puppeteer for crawling the bookmarks.
  • OpenAI because AI is so hot right now.
  • Meilisearch for the full content search.

You can find more about Hoarder at its Github repository: https://github.com/hoarder-app/hoarder?ref=reditor.co

User Diskusi
0 Diskusi

Latest Discussions