Skip to content
This repository was archived by the owner on Feb 15, 2026. It is now read-only.
/ errordon Public archive

Mastodon fork with profile media tabs (Videos/Audio/Images), filter UI, 250MB uploads with transcoding, and privacy-first defaults

License

Notifications You must be signed in to change notification settings

error-wtf/errordon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

20,536 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Errordon

Fediverse Compatible License: AGPL v3 Version EU Law Compliant German Law NSFW-Protect AI


πŸ›‘οΈ A Safe Fediverse Instance for European Law Compliance

Errordon is a Mastodon fork designed for instance operators who want to run a legally compliant social media platform under European and German law β€” with AI-assisted content moderation.


πŸ“Έ Screenshots

Errordon Profile View - Matrix Theme

Profile View with Media Tabs

Errordon Live Feeds - Matrix Theme

Live Feeds with Matrix Rain


🚫 ZERO TOLERANCE POLICY

πŸ”ž NO PORN

Every upload is automatically scanned by AI. Pornographic content is immediately deleted and accounts are frozen.

🚫 NO HATE

Hate speech, antisemitism, and incitement (Β§130 StGB) trigger automatic review and escalating bans.

β›” NO FASCISM

Nazi symbols, Holocaust denial, and unconstitutional content (Β§86a StGB) result in permanent bans.


πŸ€– NSFW-Protect AI System

Errordon includes a revolutionary AI-powered content moderation system that helps instance administrators enforce European law with minimal manual effort. It is optionional - you can install with or with out. The deploy scripts let you choose. But I thought Porn-Filter would be a need.

Here some Thoughts about the wide Range of AI-Usecases - from helping handicaped people to masssurveilance and masskilling weapons.

A call to look closer and not stay shortminded: https://hearthis.at/lino.casu/ai-lino/

How It Works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        NSFW-PROTECT AI PIPELINE                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                           β”‚
β”‚   πŸ“€ UPLOAD                    πŸ€– AI ANALYSIS                            β”‚
β”‚   ───────────                  ──────────────                             β”‚
β”‚   User uploads                 Ollama AI checks:                          β”‚
β”‚   image/video                  β€’ Pornographic content                     β”‚
β”‚         β”‚                      β€’ Hate symbols                             β”‚
β”‚         β–Ό                      β€’ Illegal material                         β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                     β”‚                                   β”‚
β”‚   β”‚  INTERCEPT  │────────────────────▢│                                   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                     β–Ό                                   β”‚
β”‚                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚                              β”‚  SAFE? ──▢ βœ…   β”‚                         β”‚
β”‚                              β”‚  PORN? ──▢ 🚫   │──▢ Auto-delete + Strike β”‚
β”‚                              β”‚  HATE? ──▢ 🚫   │──▢ Review + Strike      β”‚
β”‚                              β”‚  CSAM? ──▢ 🚨   │──▢ Ban + Authorities    β”‚
β”‚                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚                                                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Strike System (Escalating Consequences)

Strike Porn Violation Hate Violation
1st 24 hours freeze Warning + Review
2nd 3 days freeze 3 days freeze
3rd 7 days freeze 7 days freeze
4th 30 days freeze PERMANENT
5th+ PERMANENT β€”

Scheduled Jobs (automatic via Sidekiq)

Job Schedule Purpose
Blocklist Update 3:00 AM Update porn domain list
GDPR Cleanup 4:00 AM Delete expired data, anonymize IPs
AI Snapshot Cleanup 4:30 AM Delete SAFE snapshots after 14 days
Video Cleanup 5:00 AM Shrink old videos to 480p
Freeze Cleanup Hourly Unfreeze expired accounts
Weekly Summary Mon 9 AM Email stats to admin

Instance-Wide Protection

  • 10+ active alarms β†’ Instance posting freeze for flagged accounts
  • CSAM detection β†’ Immediate permanent ban + law enforcement notification
  • Admin email alerts β†’ Real-time notifications for all violations

βš–οΈ Legal Framework (German/EU Law)

This instance software is designed to help operators comply with:

Law Description Errordon Response
Β§130 StGB Volksverhetzung (Incitement) AI detection + auto-ban
Β§184b StGB Child pornography Immediate ban + authorities
Β§86a StGB Unconstitutional symbols AI detection + permanent ban
Β§131 StGB Glorification of violence AI review + escalating bans
NetzDG Network Enforcement Act IP logging, content removal
DSGVO/GDPR Data protection Privacy-first defaults

Legal Documents Included

  • βœ… Terms of Service (German law compliant)
  • βœ… Privacy Policy (DSGVO/GDPR compliant)
  • βœ… Community Guidelines (Clear rules with legal references)

πŸ” Registration Security

Errordon supports invite-only registration with mandatory checks:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         REGISTRATION FLOW               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  1. βœ‰οΈ  Invite Code Required             β”‚
β”‚     └─ Max 3 uses per code                β”‚
β”‚                                           β”‚
β”‚  2. πŸ”ž Age Verification                  β”‚
β”‚     └─ Checkbox: "I am 18 or older"       β”‚
β”‚                                           β”‚
β”‚  3. πŸ“œ Legal Acceptance                  β”‚
β”‚     └─ Terms of Service                   β”‚
β”‚     └─ Privacy Policy                     β”‚
β”‚     └─ Community Guidelines               β”‚
β”‚                                           β”‚
β”‚  4. βœ… Email Verification                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Quick Start

Enable NSFW-Protect AI

# Install Ollama for AI content moderation
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llava    # Vision model for images/videos
ollama pull llama3   # Text model for hate speech

# Enable in .env.production
ERRORDON_NSFW_PROTECT_ENABLED=true
ERRORDON_NSFW_OLLAMA_ENDPOINT=http://localhost:11434
ERRORDON_NSFW_ADMIN_EMAIL=admin@your-instance.com
ERRORDON_INVITE_ONLY=true
ERRORDON_REQUIRE_AGE_18=true

One-Line Installation (Docker-based)

curl -fsSL https://raw.githubusercontent.com/error-wtf/errordon/main/install-docker.sh -o install-docker.sh
bash install-docker.sh

Why this way: piping into bash can break interactive prompts on some terminals because stdin is not a TTY (you can end up typing into your shell instead of the installer). Downloading first keeps the installer fully interactive and makes failures (like 404) obvious.

Interactive prompts for:

  • Domain & Admin Email
  • Admin Username
  • SMTP Configuration
  • Matrix Terminal Theme
  • Ollama AI (NSFW-Protect)

Manual Docker Setup

git clone https://github.com/error-wtf/errordon.git
cd errordon
bash install-docker.sh

✨ Additional Features

Beyond legal compliance, Errordon includes:

Feature Description
🎬 Profile Media Tabs Separate Videos/Audio/Images tabs
🎨 Matrix Theme Cyberpunk green UI (Ctrl+Shift+M)
πŸ–₯️ Matrix Terminal Interactive landing page with games
😎 165 Custom Emojis Matrix/Hacker/Nerd/CCC/DevOps/Security themed
πŸ“€ 99MB Uploads With server-side transcoding
πŸ”’ Privacy-First Strict defaults via ENV
πŸ’Ύ Dynamic Storage Quota 60% disk shared equally, profile display
πŸ” Media Filters Originals only, Alt text, Public
πŸ“Ή Auto Video Cleanup Shrink videos >7 days to 480p
πŸ—‘οΈ GDPR Compliance Auto-delete expired data
πŸ“§ Evidence Emails Forensic reports for violations

🎨 Matrix Theme

Errordon includes an optional Matrix-style cyberpunk theme with:

  • Green neon color palette (#00ff00)
  • VT323 hacker font for headings (UTF-8 compatible)
  • Glitch effects on hover
  • Dark background with white text for readability
  • 100% Fediverse-compatible (opt-in, no structural changes)

Toggle Theme

Keyboard: Ctrl + Shift + M

Or set default via environment:

ERRORDON_THEME=matrix  # Options: matrix, default, light

😎 Custom Emojis

127 Matrix/Hacker/Nerd/CCC/DevOps/Security themed emojis in 14 categories:

Category Emojis
Matrix :matrix_code: :red_pill: :blue_pill: :skull_matrix: :matrix_cat: :glitch: :neon: :synthwave: :hologram:
Hacker :hacker: :terminal: :binary: :encrypt: :access_granted: :access_denied: :anonymous: :wifi_hack: :firewall: :sudo: :tor: :vpn: :ssh: :darknet: :exploit: :overflow: :injection: :phishing:
Nerd :nerd: :keyboard: :code: :bug: :cyber_eye: :robot: :coffee_code: :git: :loading: :hacker_cat: :night_owl: :headphones:
Coding :python: :javascript: :rust: :docker: :linux: :vim: :emacs: :api: :json: :regex: :null: :undefined: :commit: :merge: :branch: :pull_request: :opensource: :foss: :debug: :segfault: :bash: :zsh: :root: :chmod: :ping: :404: :500: :200:
Hardware :cpu: :ram: :gpu: :server: :database: :raspberry_pi: :arduino: :usb: :ethernet:
Coffee :coffee: :espresso: :latte: :energy_drink: :pizza:
CCC :ccc: :chaos: :hackspace: :soldering:
Cyberpunk :cyborg: :ai: :neural: :blockchain: :crypto: :vr: :retro: :pixel: :arcade: :gamepad:

Import Emojis

bundle exec rails errordon:import_emojis

πŸ”§ API Endpoints

Errordon-specific APIs

Endpoint Method Description
/api/v1/errordon/quotas/current GET Current user's quota stats
/api/v1/errordon/storage_quota GET Dynamic disk-based quota
/api/v1/errordon/quotas GET Admin: All user quotas
/api/v1/errordon/quotas/:id GET/PUT Admin: User quota details/update
/api/v1/errordon/transcoding/:media_id/status GET Transcoding status for media

Enhanced Mastodon APIs

Endpoint Enhancement
/api/v1/accounts/:id/statuses New media_type param: video|audio|image

🎯 Goals

  • Profile Media Columns: Separate tabs for Videos, Audio, Images in user profiles
  • Filter UI: Filter by "originals only", "with alt text", visibility
  • Large Uploads: Up to 250MB for video/audio with automatic transcoding
  • Privacy Defaults: Strict preset inspired by chaos.social principles

πŸ“ Repository Structure

errordon/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ controllers/api/v1/errordon/     # Errordon API controllers
β”‚   β”‚   β”œβ”€β”€ quotas_controller.rb          # Quota management
β”‚   β”‚   └── transcoding_controller.rb     # Transcoding status
β”‚   β”œβ”€β”€ services/errordon/               # Business logic
β”‚   β”‚   β”œβ”€β”€ storage_quota_service.rb      # Dynamic disk quotas
β”‚   β”‚   β”œβ”€β”€ media_upload_checker.rb       # NSFW-Protect AI
β”‚   β”‚   β”œβ”€β”€ domain_blocklist_service.rb   # Porn/fascism blocklist
β”‚   β”‚   β”œβ”€β”€ security_service.rb           # File validation
β”‚   β”‚   β”œβ”€β”€ audit_logger.rb               # Security logging
β”‚   β”‚   └── video_transcoder_service.rb   # Video transcoding
β”‚   β”œβ”€β”€ workers/errordon/                # Background jobs
β”‚   β”‚   └── media_transcode_worker.rb     # Sidekiq worker
β”‚   └── javascript/
β”‚       β”œβ”€β”€ mastodon/features/errordon/   # React components
β”‚       β”‚   β”œβ”€β”€ matrix_theme.ts           # Theme controller
β”‚       β”‚   β”œβ”€β”€ admin_quotas.tsx          # Admin UI
β”‚       β”‚   └── video_grid.tsx            # Video grid
β”‚       └── styles/errordon_matrix.scss   # Matrix theme styles
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ initializers/errordon_*.rb       # Feature configs
β”‚   β”œβ”€β”€ routes/errordon.rb               # API routes
β”‚   └── locales/errordon.*.yml           # Translations
β”œβ”€β”€ public/emoji/errordon/               # 127 custom SVG emojis
β”œβ”€β”€ lib/tasks/errordon_emojis.rake       # Emoji import task
β”œβ”€β”€ deploy/                              # Production configs
β”œβ”€β”€ docs/                                # Documentation
└── spec/initializers/                   # Tests

πŸ“– Documentation

Getting Started

Document Description
πŸš€ Deployment Guide Complete production deployment
πŸ“š Tutorials Step-by-step guides
βš™οΈ Configuration All environment variables
πŸ”§ Troubleshooting Common issues & solutions

Technical Documentation

Document Description
NSFW_PROTECT_ARCHITECTURE.md AI moderation system details
STORAGE_QUOTA.md Dynamic disk-based quotas
GDPR_COMPLIANCE.md Data retention & privacy
VIDEO_CLEANUP.md Auto video shrinking
TRANSCODING_PIPELINE.md Media transcoding
SECURITY.md Security best practices

Legal Documents

Document Description
Terms of Service Legal terms (DE/EN)
Privacy Policy DSGVO/GDPR compliant
Community Guidelines Rules with legal references

Contributing

Document Description
Contributing Guide How to contribute
Changelog Version history & changes

πŸ›οΈ Why This Exists

Running a social media instance in Germany/EU comes with legal responsibilities:

  • NetzDG requires removal of illegal content within 24 hours
  • Β§184b StGB criminalizes hosting of CSAM
  • Β§130 StGB prohibits hosting hate speech and incitement
  • Instance operators can be held personally liable

Errordon helps you comply by automating detection and enforcement β€” so you can run a safe community without becoming a full-time moderator.


🀝 For Instance Operators

This software is for you if:

  • βœ… You want to run a safe, family-friendly Fediverse instance
  • βœ… You want EU/German law compliance out of the box
  • βœ… You want AI assistance for content moderation
  • βœ… You want clear legal documents for your users
  • βœ… You believe in free speech within the law (no fascism, no porn, no hate)

πŸ“œ License

AGPLv3 - Compatible with Mastodon's license.

All Errordon additions are also AGPLv3.


πŸ”— Links


Errordon β€” A Safe Fediverse for Europe πŸ‡ͺπŸ‡ΊπŸ‡©πŸ‡ͺ

NO PORN β€’ NO HATE β€’ NO FASCISM

About

Mastodon fork with profile media tabs (Videos/Audio/Images), filter UI, 250MB uploads with transcoding, and privacy-first defaults

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 51