Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Relatr

A decentralized web of trust metric service for Nostr that computes personalized trust scores by combining social graph distances with profile validation metrics.

Overview

Relatr measures relative trust between Nostr public keys by analyzing social graph proximity and validating profile characteristics. It uses a weighted scoring system to produce a comprehensive trust metric that can be personalized from any source pubkey's perspective.

Features

  • Web-Based Configuration UI: Manage environment variables through a browser interface (default on port 3000)
  • Social Graph Analysis: Calculates trust distances using nostr-social-duck
  • Profile Validation: Validates NIP-05, Lightning addresses, and event publications
  • Reciprocity Checking: Verifies mutual follow relationships
  • Configurable Scoring: Flexible weighting schemes for different trust factors
  • Unified Data Store: High-performance DuckDB database for both social graph and metadata
  • MCP Server Interface: Model Context Protocol API for integration
  • Trusted Assertions (TA): Optional NIP-85 Trusted Assertion Provider for publishing trust ranks (see TA.md)

Getting Started

Relatr includes a web-based configuration UI powered by process-pastry. The config UI is the default way to run Relatr and provides an easy interface for managing environment variables.

Quick Start with Config UI

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Install dependencies
bun install
# Generate a server secret key
openssl rand -hex 32
# Start the service with config UI
bun start
# Access the config UI at http://localhost:3000# Configure your SERVER_SECRET_KEY and other settings through the web interface

The config UI allows you to:

  • View and edit all environment variables
  • See descriptions and default values for each setting
  • Save changes and automatically restart the service
  • Monitor process status and errors

Docker Compose

The easiest way to run Relatr in production is using Docker Compose. A complete docker-compose.yml is included in the repository.

Quick Start

# Clone the repository
git clone https://github.com/contextvm/relatr.git
cd relatr
# Copy the example environment file
cp .env.example .env
# Generate a server secret key
openssl rand -hex 32
# Edit .env and set your SERVER_SECRET_KEY
nano .env
# Start the service
docker compose up -d
# Access the config UI at http://localhost:3000# View logs
docker compose logs -f

Environment Configuration

Create a .env file with at minimum:

SERVER_SECRET_KEY=your_generated_hex_key_here

Required Variables:

  • SERVER_SECRET_KEY - Server's Nostr private key (hex format)

Optional Variables:

  • DEFAULT_SOURCE_PUBKEY - Default perspective pubkey for trust calculations (hex format) (defaults to Gigi's pubkey)
  • NOSTR_RELAYS - Comma-separated relay URLs for social graph data
  • SERVER_RELAYS - Comma-separated relay URLs for server operations
  • DATABASE_PATH - DuckDB database path (default: ./data/relatr.db)
  • DECAY_FACTOR - Alpha parameter in distance formula (default: 0.1)
  • NUMBER_OF_HOPS - Social graph traversal depth (default: 1)
  • CACHE_TTL_HOURS - Cache time-to-live in hours (default: 72 = 3 days)
  • TA_ENABLED - Enable Trusted Assertions provider (default: false)

MCP Server Configuration:

See .env.example for a complete configuration template with all available options.

Managing the Service

# Start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Restart the service
docker compose restart
# Update to latest version
docker compose pull
docker compose up -d

Architecture Overview

Relatr uses a modular architecture with clear separation of concerns, powered by a unified DuckDB database:

Core Components

  • RelatrService: Main service orchestrating all components
  • SocialGraph: Manages Nostr social graph data and distance calculations using nostr-social-duck
  • TrustCalculator: Computes final trust scores from metrics
  • MetricsValidator: Validates profile characteristics using plugin system
  • DataStore: Unified persistence layer using DuckDB for caching metrics, metadata, and social graph data

System Requirements

Relatr is designed to be resource-efficient with minimal hardware requirements:

Minimum Requirements

  • CPU: 1 core (x86-64 or ARM64)
  • RAM: 256MB (50MB app + headroom)
  • Storage: 256MB

Recommended for Production

  • CPU: 2 cores
  • RAM: 1GB
  • Storage: 1GB SSD

Memory is the primary bottleneck - the social graph analysis benefits from having data in memory for fast distance calculations.

Development

For development and contributing to Relatr, see the development documentation in the repository.

About

Comprehensive service that computes trust scores for Nostr

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages