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?¶
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¶
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