Zum Inhalt

Multi-Dimensional Matrix Architecture

Vision

CommunicationFinder nutzt eine mehrdimensionale Entscheidungsmatrix, die nicht nur individuelle Präferenzen berücksichtigt, sondern auch Gruppen-Dynamiken, temporäre Zustände, kulturelle Normen und Plattform-Verfügbarkeit.

Warum Multi-Dimensional?

Das Problem mit 2D-Matrizen

Traditionelle Ansätze: - Nur Dringlichkeit × Verfügbarkeit - Statische Regeln - Keine Kontextberücksichtigung - Funktioniert nur für Einzelpersonen

Realität ist komplexer:

const REAL_WORLD_DECISION = {
    personal: "Ich bevorzuge Email",
    team: "Team nutzt Slack",
    temporal: "Ich bin im Urlaub",
    cultural: "Partner ist in China (kein WhatsApp)",
    platform: "Er hat nur WeChat",

    // Welcher Channel ist optimal?
    result: "WeChat" // Trotz persönlicher Email-Präferenz
};

Die 5 Dimensionen

1. Personal Layer (Individuelle Präferenzen)

Gespeichert als: NFT (permanent, unveränderbar)

Attribute:

const personal = {
    work_context: "high_focus",
    availability: "9-17h",
    urgency_threshold: "only_critical",
    communication_style: "async_preferred",
    privacy_level: "high",

    channel_preferences: {
        email: 0.9,
        slack: 0.7,
        phone: 0.3,
        whatsapp: 0.5
    }
};

Vektor-Repräsentation: [256 dimensions]


2. Group Layer (Team/Familie/Community)

Gespeichert als: Shared Settings (optional verschlüsselt)

Beispiele:

Team-Matrix

const teamMatrix = {
    name: "Engineering Team",
    members: 12,
    default_channels: ["slack", "github", "zoom"],

    rules: {
        urgent: "slack-mention + sms-fallback",
        normal: "slack-channel",
        async: "github-issue",
        social: "discord"
    },

    overrides: {
        weekend: "only-emergency",
        holidays: "disabled",
        after_hours: "sms-only"
    }
};

Familien-Matrix

const familyMatrix = {
    name: "Familie Schmidt",
    members: 4,
    default_channels: ["whatsapp", "phone"],

    rules: {
        emergency: "phone-all",
        planning: "whatsapp-group",
        personal: "direct-message"
    },

    special_cases: {
        grandma: {
            only_phone: true,
            no_video: true
        }
    }
};

3. Temporal Layer (Situationsabhängige Zustände)

Gespeichert als: Live Status Token (temporär, 24h max)

Global verfügbare Zustände (GitHub Community-verified):

const GLOBAL_TEMPORAL_STATES = {
    emergency: {
        priority: "OVERRIDE_ALL",
        channels: ["phone", "sms"],
        fallback: "any_available",
        module: "@comfinder/emergency-v1.0.0"
    },

    vacation: {
        default_behavior: "do_not_disturb",
        exceptions: ["family", "emergency"],
        auto_reply: true,
        module: "@comfinder/vacation-v1.2.0"
    },

    sick: {
        availability: "limited",
        preferred: ["async"],
        no_meetings: true,
        module: "@comfinder/sick-v1.0.0"
    },

    focus_mode: {
        block: ["instant_messaging"],
        allow: ["emergency"],
        duration: "2h",
        module: "@comfinder/focus-v1.1.0"
    },

    commuting: {
        limited: ["audio_only"],
        no_video: true,
        voice_preferred: true,
        module: "@comfinder/commute-v1.0.0"
    }
};

User kann wählen (nicht eigene erstellen!):

user.setTemporalState({
    state: "vacation",
    start: "2025-12-24",
    end: "2026-01-05",
    exceptions: ["family", "boss"],
    custom_message: "Frohe Weihnachten! 🎄"
});


4. Cultural/Regional Layer

Gespeichert als: GitHub Modules (community-verified)

Plattform-Verfügbarkeit:

const PLATFORM_AVAILABILITY = {
    china: {
        blocked: ["whatsapp", "telegram", "signal", "gmail"],
        preferred: ["wechat", "qq", "dingtalk"],
        module: "@comfinder/region-china-v2.0.0"
    },

    russia: {
        blocked: ["facebook", "instagram", "twitter"],
        preferred: ["telegram", "vk", "ok"],
        module: "@comfinder/region-russia-v1.5.0"
    },

    iran: {
        blocked: ["most_western_platforms"],
        preferred: ["telegram", "soroush", "gap"],
        module: "@comfinder/region-iran-v1.0.0"
    },

    global: {
        available: ["email", "sms", "phone"],
        module: "@comfinder/global-v1.0.0"
    }
};

Kulturelle Normen:

const CULTURAL_NORMS = {
    japan_business: {
        rules: {
            formal_email_first: true,
            no_phone_unless_invited: true,
            line_for_informal: true,
            respect_hierarchy: true
        },
        module: "@comfinder/culture-japan-v1.1.0"
    },

    germany_business: {
        rules: {
            email_preferred: true,
            meetings_scheduled_2weeks: true,
            no_whatsapp_business: true
        },
        module: "@comfinder/culture-germany-v1.0.0"
    },

    usa_startup: {
        rules: {
            slack_default: true,
            informal_ok: true,
            fast_response_expected: true
        },
        module: "@comfinder/culture-usa-startup-v1.0.0"
    }
};

5. Relational Layer (Beziehungstiefe)

Dynamisch berechnet (nicht gespeichert):

const relationship_depth = {
    stranger: 0.1,          // LinkedIn connection
    acquaintance: 0.3,      // Colleague from other team
    colleague: 0.5,         // Same team
    friend: 0.7,            // Personal friend
    close_friend: 0.8,      // Best friend
    family: 0.9,            // Family member
    emergency_contact: 1.0  // Partner, Parent, Child
};

// Beeinflusst Channel-Wahl:
// Stranger → formal (email)
// Family → informal (whatsapp, phone)

Matrix-Berechnung

Vector-basierte Entscheidung

class MatrixCalculator {
    async calculateOptimalChannel(context) {
        // 1. Lade alle relevanten Vektoren
        const vectors = {
            personal: await this.loadPersonalNFT(context.user),
            group: await this.loadGroupSettings(context.group),
            temporal: await this.loadTemporalState(context.user),
            cultural: await this.loadRegionalModule(context.region),
            relational: this.calculateRelationship(context.sender, context.receiver)
        };

        // 2. Gewichte basierend auf Kontext
        const weights = {
            personal: 0.3,      // Base preference
            group: 0.2,         // Team rules
            temporal: 0.25,     // Current state (wichtig!)
            cultural: 0.15,     // Regional constraints
            relational: 0.1     // Relationship depth
        };

        // Temporal State kann Gewichte ändern:
        if (vectors.temporal.state === 'emergency') {
            weights.temporal = 0.9;  // Override alles
            weights.personal = 0.05;
            weights.group = 0.05;
        }

        // 3. Vektor-Multiplikation
        const decision = this.weightedSum(vectors, weights);

        // 4. Constraints anwenden (z.B. Platform blocked)
        const filtered = this.applyConstraints(decision, vectors.cultural);

        // 5. Top-3 Channels zurückgeben
        return this.rankChannels(filtered).slice(0, 3);
    }

    weightedSum(vectors, weights) {
        // Simplified (in reality: 256-dim vector math)
        let result = {};

        for (let channel of ALL_CHANNELS) {
            result[channel] = 
                vectors.personal[channel] * weights.personal +
                vectors.group[channel] * weights.group +
                vectors.temporal[channel] * weights.temporal +
                vectors.cultural[channel] * weights.cultural +
                vectors.relational[channel] * weights.relational;
        }

        return result;
    }
}

Beispiel-Berechnung

// Kontext:
const context = {
    sender: "colleague_from_china",
    receiver: "me",
    urgency: "normal",
    topic: "work_question"
};

// Schritt 1: Vektoren laden
const vectors = {
    personal: { email: 0.9, slack: 0.7, whatsapp: 0.5 },
    group: { slack: 0.9, email: 0.7 },
    temporal: { email: 0.8, slack: 0.6 }, // Im Focus Mode
    cultural: { wechat: 0.9, email: 0.7, slack: 0.0, whatsapp: 0.0 }, // China!
    relational: { email: 0.6, slack: 0.7, wechat: 0.5 }
};

// Schritt 2: Gewichte
const weights = {
    personal: 0.3,
    group: 0.2,
    temporal: 0.25,
    cultural: 0.15,  // WICHTIG: Platform constraints!
    relational: 0.1
};

// Schritt 3: Berechnung
const scores = {
    email: 0.9*0.3 + 0.7*0.2 + 0.8*0.25 + 0.7*0.15 + 0.6*0.1 = 0.785,
    slack: 0.7*0.3 + 0.9*0.2 + 0.6*0.25 + 0.0*0.15 + 0.7*0.1 = 0.610,
    wechat: 0.0*0.3 + 0.0*0.2 + 0.0*0.25 + 0.9*0.15 + 0.5*0.1 = 0.185,
    whatsapp: 0.5*0.3 + 0.0*0.2 + 0.0*0.25 + 0.0*0.15 + 0.0*0.1 = 0.150
};

// Ergebnis: Email (0.785) > Slack (0.610) > WeChat (0.185)
// ABER: Slack ist in China blockiert! → Filter anwenden
// FINAL: Email > WeChat

Modular System

Warum Module?

graph TD A[Problem] --> B{Wer definiert Regeln?} B -->|Jeder User selbst| C[Chaos] B -->|Community GitHub| D[Ordnung] C --> E[Inkonsistente Daten] C --> F[Keine Interoperabilität] C --> G[Schlechte UX] D --> H[Verified Modules] D --> I[Quality Control] D --> J[Crowd Intelligence] style C fill:#ff0000 style D fill:#00ff00

Ohne Module: - Jeder erstellt eigene "Vacation"-Regeln - 1000 verschiedene "Emergency"-Definitionen - Keine Kompatibilität zwischen Users - Matrix funktioniert nicht mehr

Mit Modulen (GitHub Community): - Verified "@comfinder/emergency-v1.0.0" - Versioniert & getestet - Community Review (3 Approvals) - Alle nutzen gleiche Standards

Module Structure

/modules/
├── core/                           # Basis-Module (verified)
│   ├── emergency.json
│   ├── vacation.json
│   ├── sick.json
│   ├── focus-mode.json
│   └── commuting.json
├── regional/                       # Regional Modules
│   ├── china/
│   │   ├── platforms.json         # WhatsApp blocked, WeChat preferred
│   │   └── business-culture.json
│   ├── japan/
│   │   ├── platforms.json
│   │   └── business-etiquette.json
│   └── usa/
│       ├── platforms.json
│       └── startup-culture.json
├── platforms/                      # Platform-Verfügbarkeit
│   ├── messaging/
│   │   ├── whatsapp.json
│   │   ├── telegram.json
│   │   └── signal.json
│   ├── video/
│   │   ├── zoom.json
│   │   └── teams.json
│   └── social/
│       └── linkedin.json
└── community/                      # Community Contributions
    ├── pending/                   # Awaiting Review
    ├── approved/                   # Verified & Live
    └── experimental/               # Beta Testing

Module Format

{
  "id": "@comfinder/emergency-v1.0.0",
  "version": "1.0.0",
  "author": "core-team",
  "verified": true,
  "category": "temporal",

  "metadata": {
    "name": "Emergency State",
    "description": "Global emergency communication pattern",
    "tags": ["emergency", "critical", "override"],
    "language": "en"
  },

  "rules": {
    "priority": "OVERRIDE_ALL",
    "channels": {
      "phone": 1.0,
      "sms": 0.9,
      "any_available": 0.8
    },
    "fallback": "any_available",
    "timeout": "instant",
    "retry_attempts": 3
  },

  "constraints": {
    "min_version": "1.0.0-beta.1",
    "max_version": "2.x.x",
    "dependencies": []
  },

  "validation": {
    "schema_version": "1.0",
    "hash": "sha256:abc123...",
    "signature": "0x1234..."
  }
}

Module Validation

class ModuleValidator {
    async validateModule(module) {
        const checks = {
            // 1. Schema
            schema: this.validateSchema(module),

            // 2. Security
            security: await this.auditSecurity(module),

            // 3. Performance
            performance: await this.benchmarkPerformance(module),

            // 4. Compatibility
            compatibility: this.checkCompatibility(module),

            // 5. Community Review (min. 3 approvals)
            community: await this.getCommunityApprovals(module, min = 3)
        };

        return {
            passed: Object.values(checks).every(c => c.passed),
            checks: checks
        };
    }
}

Offline-First Architecture

Lokale Speicherung

class OfflineMatrix {
    constructor() {
        this.storage = {
            personal: 'localStorage',      // NFT-Export als JSON
            groups: 'IndexedDB',            // Team/Family Settings
            modules: 'IndexedDB',           // Cached Modules
            temporal: 'sessionStorage'      // Current State (flüchtig)
        };
    }

    async calculateOffline(context) {
        // 1. Lade aus lokalem Cache
        const personal = JSON.parse(localStorage.getItem('nft_settings'));
        const group = await idb.get('groups', context.group_id);
        const modules = await idb.getAll('modules');

        // 2. Berechne Matrix (client-side)
        return this.calculate(personal, group, modules, context);
    }

    async syncWhenOnline() {
        // 3. Sync mit Blockchain/IPFS wenn online
        if (navigator.onLine) {
            await this.syncToBlockchain();
            await this.updateModules();
        }
    }
}

NFT Export/Import

// Export (Konfigurator)
const nft_data = {
    version: "1.0.0",
    wallet_id: "0x1234...",
    settings: personal_preferences,
    signature: "0xabcd...",
    timestamp: 1730563200,
    encrypted: true  // Optional password
};

localStorage.setItem('nft_settings', JSON.stringify(nft_data));

// Import (Matrix)
const nft = JSON.parse(localStorage.getItem('nft_settings'));
if (nft.encrypted) {
    const password = prompt('Passwort:');
    nft.settings = await decrypt(nft.settings, password);
}

Vector Database (Zukunft)

Warum Vector DB?

Ähnlichkeitssuche:

// Find ähnliche Kontexte
const similar_contexts = await vectorDB.search({
    query: current_context_vector,
    k: 10,  // Top-10 ähnlichste
    filter: { verified: true }
});

// Nutze Crowd Intelligence
const learned_decision = aggregate(similar_contexts.map(c => c.decision));

Vorteile: - Learn from Community - Bessere Vorhersagen - Personalisiertes Learning - A/B Testing

Dezentrale Implementation

class DecentralizedVectorDB {
    constructor() {
        this.storage = {
            local: new VectorStore('IndexedDB'),      // Offline
            distributed: new IPFSClient(),            // P2P
            indexed: new GunDB(),                     // Real-time
            permanent: new ArweaveClient()            // Blockchain
        };
    }

    async store(vector, metadata) {
        // 1. Anonymize
        const anon = this.anonymize(vector);

        // 2. Compress
        const compressed = await this.compress(anon);

        // 3. Encrypt
        const encrypted = await this.encrypt(compressed);

        // 4. Store distributed
        const cid = await this.storage.distributed.add(encrypted);

        // 5. Index
        await this.storage.indexed.set(metadata.id, cid);

        return cid;
    }
}

GitHub Community Process

Contribution Flow

graph LR A[Developer] -->|Fork| B[Local Module] B -->|Create| C[module.json] C -->|Test| D[Validation] D -->|PR| E[GitHub PR] E -->|Review| F{3 Approvals?} F -->|No| G[Feedback] G -->|Revise| D F -->|Yes| H[Merge to approved/] H -->|Publish| I[npm @comfinder/module-name] I -->|Use| J[Users]

Review Criteria

Community Reviewers prüfen: 1. Functionality: Macht das Modul Sinn? 2. Security: Keine Sicherheitslücken? 3. Performance: Schnell genug? 4. Compatibility: Funktioniert mit anderen Modulen? 5. Documentation: Gut dokumentiert?

Voting: - 👍 Approve (min. 3 needed) - 👎 Request Changes - 💬 Comment (kein Vote)

Merge Requirements: - 3+ Approvals - 0 Request Changes - All Tests passing - Documentation complete


Use Cases

Beispiel 1: Business Trip nach China

const context = {
    user: "max_mustermann",
    location: "shanghai",
    duration: "1_week",
    colleagues: ["local_team_china", "home_team_germany"]
};

// Matrix berechnet automatisch:
// - WeChat für lokale Kommunikation (WhatsApp blocked)
// - Email für internationale Kommunikation
// - Emergency: Phone (funktioniert überall)

Beispiel 2: Familie im Urlaub

const temporal_state = {
    state: "vacation",
    start: "2025-12-24",
    end: "2026-01-05",

    exceptions: {
        family: "always_reachable",
        boss: "emergency_only",
        friends: "do_not_disturb"
    }
};

// Matrix passt sich an:
// - Familie: WhatsApp, Phone (24/7)
// - Boss: Phone nur bei Emergency
// - Freunde: Auto-Reply, kein Ping

Beispiel 3: Multi-Team Projekt

const groups = [
    { name: "Engineering", channel: "slack", urgent: "slack-mention" },
    { name: "Design", channel: "figma-comments", urgent: "slack-dm" },
    { name: "Management", channel: "email", urgent: "phone" }
];

// Matrix aggregiert für optimal cross-team communication:
// - Normal: Slack (gemeinsamer Nenner)
// - Urgent: Slack-mention (Engineering/Design) + Phone (Management)
// - Async: Email (alle lesen)

Roadmap

Phase 1: Offline Matrix (JETZT)

  • Personal Layer (NFT Settings)
  • Basic Matrix Calculation
  • Local Storage

Phase 2: Modular System (Monat 1)

  • Module Structure (GitHub)
  • Core Modules (emergency, vacation, etc.)
  • Validation Process
  • Community Guidelines

Phase 3: Group Support (Monat 2)

  • Team Settings
  • Family Settings
  • Shared Rules
  • Override Logic

Phase 4: Regional Modules (Monat 3)

  • Platform Availability (China, Russia, etc.)
  • Cultural Norms (Japan, Germany, USA)
  • Language Support

Phase 5: Vector DB (Monat 4-6)

  • IndexedDB Local Storage
  • IPFS Distributed Storage
  • Similarity Search
  • ML-based Learning

Phase 6: AI Integration (Monat 7-12)

  • Predictive Channel Selection
  • Context Understanding (NLP)
  • Automatic Rule Suggestions
  • A/B Testing

FAQ

Q: Warum kann ich keine eigenen Temporal States erstellen?

A: Damit die Matrix funktioniert, müssen alle die gleichen Standards nutzen. Stell dir vor: - User A definiert "vacation" als "komplett offline" - User B definiert "vacation" als "erreichbar für Familie" - Wenn A an B schreibt → Matrix weiß nicht was zu tun ist!

Lösung: Community-verified Module → Alle nutzen @comfinder/vacation-v1.2.0

Q: Was wenn mein Use Case nicht existiert?

A: Create a Module! 1. Fork GitHub Repository 2. Erstelle modules/community/pending/your-module.json 3. Submit Pull Request 4. Community Review (3 Approvals) 5. Merge → Alle können es nutzen!

Q: Wie funktioniert das offline?

A: Alles läuft client-side: - Personal Settings: LocalStorage (NFT-Export) - Group Settings: IndexedDB - Modules: IndexedDB (cached) - Calculation: JavaScript (lokal)

Kein Server nötig!

Q: Wie skaliert das zu Millionen Users?

A: Dezentral! - Settings: Blockchain (IPFS/Arweave) - Modules: GitHub + npm - Calculation: Client-side - Optional: Vector DB (P2P)

Jeder User ist ein Node!


Status: 🟡 KONZEPT (Stage 1 Complete)
Next: Module System (Stage 2 - Co-Developer Phase)
Vision: Ultimative Flexibilität durch N-dimensionale Matrix + Community Modules