Sign inSign up

mooloco/navi

By mooloco

•Updated about 14 hours ago

Personal service navigation: collect all your IP:port services into one page

Image
0

428

mooloco/navi repository overview

⁠🧭 Navi

Personal service navigation — collect all your home services (IP:port) into one clean page. Click once, jump anywhere. Admin login at /admin for adding/editing services.

šŸ”— GitHub: https://github.com/Mooloco/Navi⁠

⁠Features

  • Category-grouped service cards, sortable with ↑↓ buttons (persisted)
  • Sort value mechanism: each card gets a 100~500 sort value (independent per category); new services append to the end (+5 increments), moving picks the mid-value of the target gap, re-balances the category only when no space remains
  • Category rename with a āœŽ button in edit mode (services follow automatically)
  • Auto favicon fetching (browser-based in main mode) with icon cache management: refresh a single icon / clear all caches
  • Admin auth at /admin (default password admin123 — change it after first login)
  • Web-based CRUD, custom categories, JSON import/export
  • URL scheme auto-completion (192.168.1.1:8080 → http://192.168.1.1:8080)
  • SQLite persistence, survives restarts

⁠Tags

TagDescriptionSize
mainFull features: browser-based favicon fetching via a separate browserless/chrome container (CDP)~442MB
liteLightweight: no browser, regex-based favicon fetching only~246MB

The app image never bundles a browser kernel — in main mode it talks to the browserless/chrome container over CDP. Pick lite for low-resource machines.

⁠Quick Start (Docker Compose)

Clone the project (compose file included) or create your own:

git clone https://github.com/Mooloco/Navi.git && cd Navi
cp .env.example .env    # set NAVI_BRANCH / NAVI_PORT

docker-compose.yml:

services:
  app:
    image: mooloco/navi:${NAVI_BRANCH:-main}
    container_name: navi-app
    ports:
      - "${NAVI_PORT:-8000}:8000"
    environment:
      - MOOLO_NAV_DB=/data/nav.db
      - MOOLO_NAV_CACHE=/data/favicons
      - NAVI_BROWSER_CDP=ws://browser:3000
    volumes:
      - ${NAVI_DATA:-./data}:/data    # bind mount: host folder -> /data
    restart: unless-stopped

  browser:
    image: browserless/chrome:latest
    container_name: navi-browser
    restart: unless-stopped
    profiles: ["main"]      # deployed only in main mode

.env:

NAVI_BRANCH=main   # main (full) | lite (lightweight, no browser)
NAVI_PORT=8000
NAVI_DATA=./data   # host folder for data (SQLite + icon cache)

Start:

# main mode: app + browser containers, full icon fetching
docker compose --profile main up -d

# lite mode: app only, no browser container deployed
docker compose --profile lite up -d

Access http://<host>:8000 — admin page at /admin (default password admin123, change it after first login).

⁠Single Container (docker run)

# main (for full icon fetching, point NAVI_BROWSER_CDP at your own Chromium service)
docker run -d --name navi-app -p 8000:8000 \
  -e NAVI_BROWSER_CDP=ws://browser:3000 \
  -v navi-data:/data mooloco/navi:main

# lite (standalone, no browser needed)
docker run -d --name navi-app -p 8000:8000 \
  -v navi-data:/data mooloco/navi:lite

⁠Environment Variables

VariableDefaultDescription
NAVI_BRANCHmainCompose deployment mode (main/lite)
NAVI_PORT8000Host port mapping
MOOLO_NAV_DB/data/nav.dbSQLite database path
MOOLO_NAV_CACHE/data/faviconsFavicon cache directory
NAVI_BROWSER_CDPws://browser:3000Remote Chromium CDP endpoint (main mode only)

⁠Data Persistence

All data (service list + icon cache) lives in the navi-data volume at /data. Removing the container keeps your data — recreate with the same volume name.

⁠Upgrading

docker compose --profile ${NAVI_BRANCH:-main} up -d --pull always

⁠Security Note

  • Default admin password is admin123 — change it immediately via the šŸ”‘ button on the admin page.
  • Designed for LAN use over HTTP; put it behind HTTPS if exposed to the public internet.

Tag summary

Content type

Image

Digest

sha256:e39f51ed1…

Size

105.3 MB

Last updated

about 14 hours ago

docker pull mooloco/navi