Skip to content

Repository files navigation

Deltos

English | Español

Website Release CI License Support on Ko-fi

Deltos kanban board with three columns (New, In progress, Done), project and label filters, and task cards with priority and due dates

Deltos is a task-management PWA for everyday life: a shared kanban board with live sync, comments, attachments and push notifications, served by a single small Node + SQLite service. It works for a couple, a family, a group of friends planning a trip, or a small team, without the complexity of the big tools and without your data on somebody else's cloud.

Why does this exist?

Deltos started as the board for a friends' trip: six people, a spreadsheet nobody updated, and a chat where every decision got buried. Then we kept using it at home for the day-to-day stuff, and again through a renovation and the move that came with it. Everything we had tried before wanted an account and a subscription, kept our lists on someone else's server, or brought more process than a family needs. So I built the small thing: one service, one file of database, a board that syncs live. It does less than Trello or Jira, and for us that was the point.

Why this stack?

  • Node 22 + Hono + better-sqlite3: the app is mostly I/O: SSE live sync, uploads, a handful of concurrent users. Node's event loop fits that shape and Hono adds routing without framework tax.
  • SQLite, no external database: one file under /var/lib/deltos, WAL mode; a backup is a file copy. Nothing to administer for a few users.
  • systemd behind Nginx Proxy Manager, no Docker: it runs in a small LXC at home; fewer layers, logs in journald, an upgrade is a symlink swap (Docker is still available as an alternative, see Installation).
  • React 19 + Vite + Tailwind: the UI shell (sidebar, themes, i18n, settings) is shared with my other apps, so a fix lands everywhere at once.

Features

  • Shared kanban: New / In progress / Done columns with drag & drop, live between sessions over SSE (no refresh, no polling).
  • Push notifications: Web Push (VAPID) when someone creates, moves, comments on or assigns you a card, even with the app closed. Dormant on plain HTTP; turns itself on once the app is served over HTTPS.
  • Cards with everything: comments, attachments with an in-app image viewer, labels, priority, due dates and a per-card activity feed.
  • Multiuser: admin/user roles, per-user language (ES/EN), bcrypt passwords, rate-limited login, audit trail.
  • Installable PWA: light/dark theme following the system, offline service worker, "check for updates" against GitHub releases from Settings.
  • One-click demo mode: separate seeded database, no password; can be disabled in Settings.
  • SQLite storage: WAL mode, single file under /var/lib/deltos.

Screenshots

Card detail: tabs for details, attachments, comments and activity**

Task modal showing title, project, assignee, priority, due date, labels, description and move-to column actions

Settings: appearance with accent color, profile, labels, language**

Settings page showing theme previews, accent color swatches, density options, profile card, label manager and language selector

Installation

Requirements: Linux (x86_64 or arm64) with systemd, root or sudo access.

curl -fsSL https://raw.githubusercontent.com/gnacho/deltos/main/install.sh | sudo sh   # (recommended)

The installer is a readable, dependency-free POSIX shell script. Inspect it before running: that's the point of keeping it plain. It detects your distro/arch, downloads the latest release and verifies its SHA-256 checksum, installs a versioned Node runtime and the app under /opt/deltos, creates a sandboxed deltos systemd service and prints the initial admin password once.

Running the same command again later upgrades to the latest release. To uninstall: curl -fsSL https://raw.githubusercontent.com/gnacho/deltos/main/install.sh | sudo sh -s -- --uninstall.

Docker
docker build -t deltos .
docker run -d --name deltos -p 3000:3000 \
  -e AUTH_USER=admin -e AUTH_PASS='use-a-strong-password' \
  -v deltos-data:/app/data \
  deltos

Multi-stage node:24-slim image: npm ci --omit=dev for the server + server/ + app/dist/. Mount a volume at /app/data (SQLite + uploads). The .env file is not copied into the image: everything comes from defaults + container environment.

Manual installation (from a release tarball)

Download the artifact for your architecture from Releases and verify it against checksums.txt (sha256sum -c checksums.txt --ignore-missing). Releases are published per v* tag with node_modules pre-built per arch (.github/workflows/release.yml); no compiler needed on the server.

Configuration

The service reads its environment (installer: /etc/deltos/env):

Variable Default Description
PORT 3000 Listen port (behind Nginx Proxy Manager).
DATA_DIR /var/lib/deltos SQLite files + uploads.
STATIC_DIR app/dist Built frontend to serve.
AUTH_USER/AUTH_PASS - Bootstrap admin on first boot (idempotent).
COOKIE_SECURE false true only behind HTTPS.
SESSION_SECRET auto-generated HMAC secret; persisted in the DB if unset.
MAX_SSE_CLIENTS 20 Concurrent live-sync clients.
MAX_UPLOAD_MB 10 Attachment size limit.
VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY / VAPID_SUBJECT - Web Push keys (all three or none). Generate with npx web-push generate-vapid-keys --json; subject must be a mailto:. Without them, push stays off and the app runs fine.

Restart after changes: sudo systemctl restart deltos.

Credentials

  • Production: first boot creates the admin from AUTH_USER / AUTH_PASS (if AUTH_PASS is missing, no admin is created and a warning is logged).
  • Demo: "Sign in as demo" button on the login screen (no password). Separate demo database (app_demo.db), seeded with 3 users, 4 projects, 6 labels and 15 tasks. Can be disabled in Settings (admin only).

Development

Stack: Node 24 + Hono + better-sqlite3 (backend) · React 19 + Vite + Tailwind (frontend).

# Backend (port 3000 by default; see server/.env.example)
cd server
npm ci
cp .env.example .env   # adjust AUTH_USER / AUTH_PASS
npm run dev

# Frontend (another terminal, proxied to the backend in dev)
cd app
npm ci
npm run dev

# Production frontend build (served by the backend itself)
npm run build

With npm run build done, the backend alone is enough: it serves the SPA from app/dist with SPA fallback.

Tests

cd server && npm test          # vitest: 76 API/auth/push/label tests

License

AGPL-3.0

About

PWA kanban de tareas en pareja: SSE en vivo, comentarios, adjuntos con visor de imágenes, i18n es/en. Node 22 + Hono + SQLite + React 19.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages