Self-hosted team link & contact directory. Node + SQLite + Helm + Chrome extension. EN/RU UI.
1.7K
A self-hosted team link & contact directory. One Docker container, SQLite for shared state, WebSocket for live sync. Browser extension included.
🚀 Live demo → — each visitor gets their own session in localStorage.
A fast, keyboard-friendly grid of links (dashboards, dev/test/prod stands, docs, contacts) that everyone on the team can edit and everyone sees in real time. No accounts, no SaaS, no third-party dependencies — one shared password, one SQLite file, one Docker image.
Internal codename:
portal. Distributed here asbeztebya666/notes-ui. The Helm chart and source tree useportal(charts/portal,package.json:name=portal) — the image name is independent.

docker run -d --name notes-ui \
-p 8080:8080 \
-v notes-ui-data:/app/data \
-e EDIT_PASSWORD=please-change-me \
-e PORTAL_LANG=en \
beztebya666/notes-ui:1.1.1
Open http://localhost:8080. Click Sign in, paste the edit password, start editing. Switch to Russian with -e PORTAL_LANG=ru. Also on GHCR: ghcr.io/beztebya666/notes-ui:1.1.1.
| Live editing | Command palette | Theme switch |
|---|---|---|
![]() | ![]() | ![]() |
Per-environment Stands (DEV / INT / LT / PROD) | Contacts grouped by role |
Command palette (Ctrl/⌘ K) | Inline search across names, tags, URLs, notes |
Sign-in with shared password + editor name | Add/edit a link with tags and icon picker |
Diagnostics — duplicates, empty URLs, untagged | Russian UI (PORTAL_LANG=ru) — bilingual |
| Tag | What it is |
|---|---|
latest | Always the newest stable release (currently 1.1.1). |
1.1.1 | Pinned semver — recommended for production. |
1.1.0 | i18n + GitHub Pages demo, before banner/red fix. |
1.0.0 | Initial public release. |
DEV / INT / LT / PROD), Useful third-party links, and a Contacts directory. Create your own sections (flat list / multi-env grid / grouped) at runtime.EDIT_PASSWORD); separate read password (READ_PASSWORD) — leave empty to keep the portal public-read.localStorage, never overwritten by team edits.BACKUP_DIR on a schedule.PORTAL_LANG=ru.PORTAL_DEMO=true): drop-in client-side shim that runs the same UI with localStorage-only state — powers the GitHub Pages demo..deb / .rpm, standalone pkg binary, and a Chrome MV3 extension.| Variable | Default | What it does |
|---|---|---|
PORT | 8080 | HTTP listen port |
DB_PATH | /app/data/portal.db | SQLite database file |
BACKUP_DIR | /app/data/backups | Where backups are written |
BACKUP_INTERVAL_MS | 21600000 (6h) | Backup cadence |
BACKUP_RETENTION | 20 | How many backups to keep |
EDIT_PASSWORD | changeme | Change this. Edit mode auth. |
READ_PASSWORD | falls back to EDIT_PASSWORD | View-only auth, or "" for anonymous read |
READ_SESSION_MS | 43200000 (12h) | Read cookie lifetime |
CORS_ORIGINS | (empty) | Comma-separated cross-origin allowlist |
PORTAL_LANG | en | UI language: en or ru |
docker volume create notes-ui-data
docker run -d --name notes-ui -p 8080:8080 \
-v notes-ui-data:/app/data \
-e EDIT_PASSWORD=change-me \
beztebya666/notes-ui:latest
The image runs as a non-root user (uid 1000). For host-path mounts, ensure uid 1000 has write access.
git clone https://github.com/beztebya666/notes-ui.git
cd notes-ui
helm install portal charts/portal \
--namespace portal --create-namespace \
--set secrets.editPassword=change-me \
--set ingress.enabled=true \
--set ingress.hosts[0].host=portal.example.com
image.repository defaults to beztebya666/notes-ui. Chart features: HPA, PDB, NetworkPolicy, ServiceMonitor, custom CA, configurable PVC.
Content type
Image
Digest
sha256:b40a0e1de…
Size
81.4 MB
Last updated
4 months ago
docker pull beztebya666/notes-ui