v0.2.1 — latest release

Issue tracking that stays yours.

Source-available ticket and project tracker — none of the Jira bloat, all of the workflow you actually need. Self-host on a $5 VPS, or let us run it for you. Same code either way.

# 60-second install
git clone https://github.com/joshhearne/resolvd.git
cd resolvd
cp .env.example .env  # edit secrets
docker compose up -d --build

Everything you'd expect. Nothing you wouldn't.

Built for engineering, support, and ops teams who've outgrown a spreadsheet but don't want to onboard a sales rep.

🎯

Projects & Tickets

Scoped projects with custom prefixes (WEB-0042). Priority P1–P5, semantic status workflow with auto-close grace, move tickets between projects, inline title edit.

🔐

Flexible Auth

Microsoft Entra ID, Google OAuth, or local accounts with Argon2. Mix and match. TOTP MFA enforceable per role.

✉️

Email-native

M365 Graph, Gmail API, or SMTP. Create tickets by emailing #PREFIX — dedup, signature stripping, CC auto-attach. Followers paged on changes.

💬

Real Collaboration

Comments, @mentions with auto-follow, Ctrl+Enter posts. Attachments up to 50 MB. Bulk PDF/CSV export, audit trail.

🤝

Vendor Coordination

Built-in CRM: companies + contacts per project. Notify Vendor button gates outbound. Vendor-visible comments, mute toggle, daily digest of muted replies.

🛡️

JIT Support Access

Support principals blocked until an admin approves a time-bounded grant (1–14 days). Read-only by default. Every fine-grained access logged.

🔒

Encryption at Rest

AES-256-GCM envelope encryption with per-row data keys. HMAC blind index keeps title search working under encryption. Off / Standard / Vault modes.

📦

Source-available

FSL-1.1 — free to self-host, free for internal commercial use. Auto-converts to Apache 2.0 after 2 years.

Boring stack. On purpose.

No bespoke runtimes, no exotic databases, no proprietary protocols. Components you already know how to operate, monitor, and back up.

  • Postgres 16 for everything: tickets, sessions, branding config. pg_dump is your full backup.
  • Node + Express backend. Argon2 hashing, express-session, Multer uploads.
  • React + Vite + Tailwind frontend, served by nginx in a 30 MB Alpine image.
  • Bring your own TLS — Caddy, nginx, Cloudflare Tunnel, whatever you already run.
┌─ docker-compose.yml ──────────────┐
services:
  postgres: postgres:16-alpine
  backend:  node 22 + express
  frontend: nginx alpine
  nginx:    internal router
└────────────────────────────────────┘
binds 127.0.0.1:8090
volumes: pg-data, uploads
total RAM: ~400 MB idle