This guide explains how to set up a registry to track multiple Redd Archiver instances.
The registry system allows you to:
- Track multiple archive instances across teams
- Aggregate statistics (posts, comments, users)
- Generate public leaderboards
- Monitor instance health and uptime
Create a separate repository for your registry:
reddit-archive-registry/
├── instances/
│ ├── privacy-main.json
│ ├── privacy-archive.json
│ └── ... (one file per instance)
├── teams/
│ ├── privacy-advocates.json
│ └── ... (one file per team)
├── scripts/
│ └── update_leaderboard.py
├── leaderboard/
│ ├── index.html (generated)
│ └── stats.json (generated)
├── instances.json (master registry file)
└── README.md
Create instances.json:
{
"version": "1.0",
"last_updated": "2025-01-23T12:00:00Z",
"teams": [
{
"team_id": "privacy-advocates",
"name": "Privacy Advocates Network",
"description": "Preserving privacy-focused communities",
"contact": {
"website": "https://example.com",
"matrix": "@privacy:matrix.org"
}
}
],
"instances": [
{
"instance_id": "privacy-main",
"name": "Privacy Archive",
"team_id": "privacy-advocates",
"maintainer": "github_username",
"registered": "2024-01-15",
"endpoints": {
"clearnet": "https://archive.example.com",
"tor": "http://abc123xyz.onion",
"api": "https://archive.example.com/api/v1/stats"
},
"static_metadata": {
"subreddits": [
{"name": "privacy", "url": "/r/privacy/"}
],
"hosting": "self-hosted"
}
}
]
}The leaderboard generator (scripts/update_leaderboard.py) has been enhanced with multi-platform support and accurate coverage calculation:
- Platform-Aware Deduplication: Communities tracked as
(platform, name)tuples to avoid double-counting - Coverage Calculation: Uses
platform_metrics.jsonto calculate accurate coverage percentages per platform - Multi-Platform Display: Shows Reddit subreddits, Voat subverses, and Ruqqus guilds separately
| Platform | Total Communities | Total Posts |
|---|---|---|
| 40,029 subreddits | 2.38B posts | |
| Voat | 22,585 subverses | 3.81M posts |
| Ruqqus | 6,217 guilds | 500K posts |
| TOTAL | 68,831 communities | 2.384B posts |
# Install dependencies
pip install -r scripts/requirements-leaderboard.txt
# Generate leaderboard (uses tools/platform_metrics.json by default)
python scripts/update_leaderboard.py
# With custom paths
python scripts/update_leaderboard.py \
--registry .github/instances.json \
--output leaderboard/ \
--platform-metrics tools/platform_metrics.jsonThe script generates three files in the output directory:
- LEADERBOARD.md - Team rankings with scores and platform breakdown
- COVERAGE.md - Global community coverage index (multi-platform)
- registry.json - Updated registry with uptime tracking
- Platform Coverage Table: Shows archived vs available communities per platform (Reddit/Voat/Ruqqus)
- Deduplication: Communities tracked as (platform, name) tuples - no double-counting
- Coverage Percentages: Accurate % based on platform_metrics.json totals
- Team Breakdown: Platform-specific statistics for each team
- At-Risk Tracking: Identifies banned communities with low coverage
LEADERBOARD.md includes:
## Platform Coverage (All Teams Combined)
| Platform | Archived Communities | Total Available | Coverage % |
|----------|---------------------|-----------------|------------|
| Reddit | 50 | 40,029 | 0.12% |
| Voat | 12 | 22,585 | 0.05% |
| Ruqqus | 5 | 6,217 | 0.08% |
| **TOTAL**| **67** | **68,831** | **0.10%** |
## Top Teams
| Rank | Team | Score | Instances | Communities | Posts | Comments | Users |
|------|------|-------|-----------|-------------|-------|----------|-------|
| 🥇 | Privacy Advocates | 5,234.5 | 2/2 | 45 (0.07%) | 1.2M | 15M | 125K |COVERAGE.md includes platform-specific sections:
## Reddit Communities
| Subreddit | Status | Best Coverage | Instances | Archive Links |
|-----------|--------|---------------|-----------|---------------|
| r/privacy | Active | 95.2% | 2 | [Instance 1](...), [Instance 2](...) |
## Voat Communities
| Subverse | Status | Best Coverage | Instances | Archive Links |
|----------|--------|---------------|-----------|---------------|
| v/news | Active | 100.0% | 1 | [Instance A](...) |
## 🔴 Priority: At-Risk Content (Low Coverage)
| Community | Platform | Coverage | Instances | Urgency |
|-----------|----------|----------|-----------|---------|
| r/banned | reddit | 25.0% | 1 | 🟠 High |# Install dependencies
pip install -r scripts/requirements-leaderboard.txt
# Run update (uses platform_metrics.json by default)
python scripts/update_leaderboard.py
# With custom platform metrics
python scripts/update_leaderboard.py --platform-metrics /path/to/platform_metrics.json# Edit crontab
crontab -e
# Add line (update every 6 hours):
0 */6 * * * cd /path/to/registry && python scripts/update_leaderboard.pyFROM python:3.12-slim
WORKDIR /app
RUN pip install aiohttp
COPY scripts/ ./scripts/
COPY instances.json .
CMD ["python", "scripts/update_leaderboard.py"]docker build -t registry-updater .
docker run -v $(pwd)/leaderboard:/app/leaderboard registry-updater# Update leaderboard
python scripts/update_leaderboard.py
# Commit and push
git add leaderboard/
git commit -m "chore: update leaderboard $(date -u +%Y-%m-%dT%H:%M:%SZ)"
git push origin main
# Enable GitHub Pages in repo settings (source: main branch, /leaderboard directory)# Copy to your server
rsync -av leaderboard/ user@server:/var/www/archive-network/
# Or use any static hosting:
# - Netlify: netlify deploy --dir=leaderboard
# - Cloudflare Pages: wrangler pages publish leaderboard
# - IPFS: ipfs add -r leaderboardThe team score aggregates metrics across all team instances:
score = (
total_posts * 0.0001 + # Content volume
total_comments * 0.00001 + # Engagement depth
total_users * 0.001 + # User coverage (NEW!)
subreddit_count * 50 + # Diversity
online_instances * 500 # Infrastructure reliability
)Key Changes from Geographic Model:
- ✅ ADDED:
total_usersmetric (0.001x weight) - ❌ REMOVED: Geographic location bonuses
- 📊 Focus: Content preservation over infrastructure distribution
- User submits GitHub issue (via template)
- Maintainer runs:
python .github/scripts/issue-to-registry.py --issue-number 123 - Verify instance is accessible
- Commit JSON file to
instances/ - Next leaderboard update includes new instance
If an instance has been offline for 30+ days:
- Contact maintainer (via GitHub issue/email)
- If no response, move to
instances/inactive/ - Update team's
archivesarray if applicable
Teams are created when first member registers with a team name:
{
"team_id": "privacy-advocates",
"name": "Privacy Advocates Network",
"description": "Preserving privacy communities",
"founded": "2025-01-23",
"members": ["username1"],
"archives": ["instance-id-1"]
}New team members:
- Add GitHub username to
membersarray - Add their instance to
archivesarray
Check:
- Is
/api/v1/statsendpoint accessible? - Does it return valid JSON with required fields?
- Is the instance in
instances.json? - Has the leaderboard script run since registration?
Verify:
- All team instance APIs are responding
- Team instances have correct
team_idin their JSON - Stats API returns accurate numbers
- Script completed without errors
- Uptime Tracking: Store historical uptime data
- Bandwidth Metrics: Track data served (if available)
- Content Verification: Spot-check content integrity
- Achievement System: Badges for milestones
- RSS Feed: Notify when new instances register
For more information, see: