managarten/NewAppIdeas/Roblox Reimagined/GAME-PLAN.md
Till JS 22a73943e1 chore: complete ManaCore → Mana rename (docs, go modules, plists, images)
Final cleanup of references missed in previous rename commits:

- Dockerfiles: PUBLIC_MANA_CORE_AUTH_URL → PUBLIC_MANA_AUTH_URL
- Go modules: github.com/manacore/* → github.com/mana/* (7 go.mod files)
- launchd plists: com.manacore.* → com.mana.* (14 files renamed + content)
- Image assets: *_Manacore_AI_Credits* → *_Mana_AI_Credits* (11 files)
- .env.example files: ManaCore brand strings → Mana
- .prettierignore: stale apps/manacore/* paths → apps/mana/*
- Markdown docs (CLAUDE.md, /docs/*): mana-core-auth → mana-auth, etc.

Excluded from rename: .claude/, devlog/, manascore/ (historical content),
client testimonials, blueprints, npm package refs (@mana-core/*).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:26:10 +02:00

35 KiB
Raw Permalink Blame History

ManaVoxel: Der Gesamtplan

Eine Voxel-Plattform fuer handgefertigte Miniaturwelten -- im Browser, ohne Download


1. Die Vision

ManaVoxel ist eine Plattform, auf der Spieler detaillierte Miniaturwelten aus Voxeln erschaffen, jedes Objekt darin zum Leben erwecken und mit Freunden teilen und bespielen -- direkt im Browser.

Was ManaVoxel NICHT ist:             Was ManaVoxel IST:
✗ Minecraft (riesig, grob)          ✓ Klein, dicht, detailliert
✗ Roblox (externer Editor)          ✓ Alles entsteht IM Spiel
✗ Download noetig                   ✓ Ein Link, sofort spielen
✗ Texturen geben Detail             ✓ Voxel SIND das Detail
✗ Items sind Icons                  ✓ Items sind 3D-Skulpturen
✗ Nur bauen ODER spielen            ✓ Bauen, programmieren UND spielen

Der Kern-Loop

        ┌─────────────────────────────────────────┐
        │                                         │
        ▼                                         │
   ERSCHAFFEN                                     │
   Voxel setzen, formen,                          │
   Raeume einrichten                              │
        │                                         │
        ▼                                         │
   BELEBEN                                        │
   Items Properties geben,                        │
   Trigger-Actions definieren,                    │
   Scripts schreiben                              │
        │                                         │
        ▼                                         │
   TESTEN                                         │
   Sofort spielbar, im gleichen                   │
   Fenster, kein Moduswechsel                     │
        │                                         │
        ▼                                         │
   TEILEN                                         │
   Link senden, Welt veroeffentlichen,            │
   Items im Marketplace anbieten                  │
        │                                         │
        ▼                                         │
   ENTDECKEN & SPIELEN                            │
   Welten anderer besuchen,                       │
   Items finden, inspiriert werden                │
        │                                         │
        └─────────────────────────────────────────┘

Referenz-Aesthetik

MagicaVoxel (stilisierte Voxel-Kunst)
  + Teardown (Detailgrad, Zerstoerung)
  + Minecraft (sozialer Sandbox-Loop)
  + Roblox (UGC-Plattform, Creator-Economy)
  + Portal/Zelda (kleine, handgefertigte Level)

2. Das Dreistufige Voxel-System

Uebersicht

┌─────────────────────────────────────────────────────────────┐
│                                                             │
│  STUFE 1: Welt-Voxel (10cm)                ← MVP           │
│  Die gesamte Spielwelt                                      │
│  32m × 32m × 16m (erweiterbar bis 64m)                     │
│  Raeume, Gaenge, Terrain, Moebel, einfache Items            │
│                                                             │
│  STUFE 2: Detail-Zonen (5cm / 2.5cm)       ← Post-MVP A   │
│  Vom Creator platzierte Bereiche in der Welt                │
│  Max 5 Zonen, je max 4m × 4m × 4m                          │
│  Altaere, Vitrinen, Raetsel, Mechanismen, Inschriften       │
│                                                             │
│  STUFE 3: Sculpting-Modus (1cm, isoliert)  ← Post-MVP B   │
│  Separater Modus fuer Einzelobjekte                         │
│  64³ Grid (0.64m × 0.64m × 0.64m)                          │
│  Kunstvolle Items: Runen, Gravuren, Juwelen, Figuren        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Stufe 1: Welt-Voxel (10cm) -- Das Fundament

Resolution: 0.10m (10 Voxel pro Meter)
Chunk-Groesse: 32³ = 3.2m × 3.2m × 3.2m
Max Welt: 32m × 32m × 16m = 500 Chunks
Speicher: ~30 MB (komprimiert ~5 MB)
Mesh-Dreiecke: ~1.5 Millionen

Was man bei 10cm bauen kann:

  • Raeume mit Moebeln (Tische, Stuehle, Regale, Betten)
  • Treppen mit echten Stufen (2 Voxel hoch, 3 tief)
  • Fensterrahmen, Tuerklinken, Lichtschalter
  • Schwerter (3×1×15), Aexte, Schilder, Traenke
  • Charakter-Koerper mit erkennbarer Form
  • Gaerten mit Blumen, Baeumen, Zaeumen

Items bei 10cm:

  • Items = Voxel-Gruppen direkt in der Welt
  • Kein separater Editor noetig
  • Schwert: 3×1×15 Voxel (Klinge + Parierstange + Griff)
  • Krone: 5×5×3 Voxel (Zacken sichtbar)
  • Fackel: 1×1×8 Voxel (Stab + leuchtender Kopf)

Stufe 2: Detail-Zonen (5cm / 2.5cm) -- Wow-Momente

5cm:   20 Voxel/Meter -- Gravuren, Praegungen, feine Muster
2.5cm: 40 Voxel/Meter -- Inschriften, Zahlen, kleine Mechanismen

Max 5 Zonen pro Welt, je max 4m × 4m × 4m
Zusaetzlicher Speicher: ~10 MB

Wofuer Creator Detail-Zonen nutzen:

  • Schatzkammer: Goldmuenzen mit Praegung, Juwelen mit Facetten
  • Altar mit Inschriften die ein Raetsel ergeben
  • Mechanismus: Kleine Hebel, Zahnraeder, Schluesselform erkennen
  • Galerie: Voxel-Portraits an der Wand
  • Werkbank: Feine Werkzeuge, Materialien, Baupflaene

So platziert man eine Detail-Zone:

1. "Detail-Zone" Tool waehlen
2. Box in der Welt aufziehen (max 4m × 4m × 4m)
3. Resolution waehlen: [5cm] oder [2.5cm]
4. Innerhalb der Zone: feineres Voxel-Grid erscheint
5. Bauen mit erhoehtem Detail
6. Nahtloser Uebergang zur 10cm-Welt

Stufe 3: Sculpting-Modus (1cm) -- Meisterwerke

1cm: 100 Voxel/Meter -- Skulptur-Qualitaet

Isoliertes 64³ Grid = 0.64m × 0.64m × 0.64m
262.144 Voxel = 512 KB (trivial)
In der Welt als vorgerendertes Mesh platziert

Was man bei 1cm sculpen kann:

  • Schwert mit Runen auf der Klinge und Edelstein im Knauf
  • Ring mit filigraner Fassung
  • Schachfigur mit erkennbarem Gesicht
  • Schriftrolle mit lesbarem Symbol
  • Schluessel mit einzigartigem Bart-Muster

Workflow:

1. Sculpting-Werkstatt oeffnen (eigener Modus)
2. Im 64³ Grid arbeiten (Zoom, Rotate, Schicht-fuer-Schicht)
3. MagicaVoxel-aehnliche Tools (Pinsel, Spiegeln, Extrudieren)
4. "Fertig" → Item wird zum Mesh kompiliert
5. In der Welt platzieren (als Mesh-Objekt, kein Chunk-Overhead)
6. Properties und Verhalten zuweisen

Performance-Budget (alle drei Stufen zusammen)

Komponente                   Voxel      RAM       Dreiecke
──────────────────────────── ────────── ───────── ──────────
Welt (10cm, 500 Chunks)     50M        ~30 MB    ~1.5M
Detail-Zonen (5×, 5cm)       5M        ~10 MB    ~200K
Sculpted Items (20 Stueck)   5M        ~10 MB    ~100K
──────────────────────────── ────────── ───────── ──────────
TOTAL                        60M        ~50 MB    ~1.8M

→ 60fps Desktop (WebGPU)
→ 30fps Mobile (WebGPU, mit LOD)
→ Passt in Browser WASM Memory

3. Programmierbare Items & Artefakte

Drei Programmier-Ebenen

Ebene 1: Property Sliders (ab 6 Jahre)

┌─────────────────────────────────────────┐
│  ITEM EIGENSCHAFTEN                      │
│                                          │
│  Schaden:     [████████░░] 80            │
│  Reichweite:  [██░░░░░░░░] 20            │
│  Geschwind.:  [██████░░░░] 60            │
│  Haltbarkeit: [██████████] 100           │
│                                          │
│  Element:     [Feuer ▼]                  │
│  Sound:       [Schwert-Treffer ▼]        │
│  Partikel:    [Funkenspur ▼]             │
│  Seltenheit:  [Legendaer ▼]              │
│                                          │
│  [Testen]  [Speichern]                   │
└─────────────────────────────────────────┘

Kein Code. Werte einstellen → Item funktioniert sofort.

Ebene 2: Trigger-Action System (ab 8-10 Jahre)

┌─────────────────────────────────────────┐
│  VERHALTEN EDITOR                        │
│                                          │
│  WENN [Spieler beruehrt ▼]              │
│    DANN [Spieler bekommt Item ▼]         │
│                                          │
│  WENN [Item benutzt wird ▼]             │
│    DANN [Feuerball schiessen ▼]          │
│    UND  [Sound abspielen: boom ▼]        │
│    UND  [5 Schaden an Ziel ▼]            │
│    WARTE [0.5 Sekunden]                  │
│    DANN [Partikel an Ziel ▼]             │
│                                          │
│  WENN [Haltbarkeit = 0 ▼]              │
│    DANN [Item zerstoeren ▼]              │
│    UND  [Voxel-Explosion ▼]              │
│                                          │
│  [+ Neue Regel]  [Testen]  [Speichern]  │
└─────────────────────────────────────────┘

Trigger: Beruehrt, benutzt, aufgehoben, abgelegt, Timer, HP unter X, Tageszeit, Item in Naehe, Custom Event Aktionen: Schaden, Heilen, Partikel, Sound, Teleportieren, Voxel setzen/loeschen, Nachricht, Variable, Event senden

Ebene 3: TypeScript Scripting (ab 12+ Jahre)

import { onHit, damage, particles, sound } from '@manavoxel/api';

onHit((event) => {
  damage(event.target, 10 + this.properties.enchantLevel * 2);

  particles.spawn('fire_burst', event.target.position, {
    count: 20, lifetime: 0.5, color: '#ff4400'
  });

  this.durability -= 1;
  if (this.durability <= 0) {
    this.destroy();
    sound.play('shatter');
  }
});

Wie die Ebenen zusammenhaengen

Ebene 1 (Sliders)
  → generiert automatisch Trigger-Actions
    → kompiliert zu TypeScript
      → kompiliert zu WASM (Wasmtime Sandbox)

Spieler kann jederzeit "eine Ebene hoch" schauen:
  Slider → "Zeig mir die Regeln" → Trigger-Actions sichtbar
  Trigger-Actions → "Zeig mir den Code" → TypeScript sichtbar

Nahtloser Lernpfad: Kind startet mit Slidern,
entdeckt irgendwann Trigger-Actions, lernt TypeScript.

Items in der Welt definieren

1. Spieler baut einen Tisch aus Voxeln (direkt in der 10cm-Welt)
2. Selections-Tool: Voxel-Gruppe markieren
3. "Als Item speichern" → Voxel-Gruppe wird zum tragbaren Item
4. Properties zuweisen (Slider, Trigger-Actions oder Script)
5. Item im Inventar → kann platziert, benutzt, geteilt werden

Fuer Sculpted Items (1cm):
1. Sculpting-Werkstatt oeffnen
2. Im 64³ Grid formen
3. "Fertig" → Mesh generiert
4. In der Welt platzieren + Properties zuweisen

Cross-Game Item-Portabilitaet

Item "Flammenklinge" hat:

├── Visuals (reisen immer mit)
│   └── Voxel-Daten, Farben, Mesh
│
├── Identity (reist immer mit)
│   └── Name, Creator, Rarity, Beschreibung
│
├── Platform-Properties (vom Ziel-Game interpretiert)
│   └── Damage: "tier3", Element: "fire", Speed: "fast"
│   └── Ziel-Game mappt "tier3" auf seine eigene Schadens-Skala
│
└── Scripts (bleiben im Ursprungs-Game)
    └── Ziel-Game kann eigene Verhalten zuweisen

In Game A (RPG): Schwert macht Feuer-Schaden
In Game B (Parkour): Schwert ist kosmetisch, Rarity = Glow-Effekt
In Game C (Diorama): Schwert liegt in Vitrine als Dekoration

4. Welt-Typen & Templates

Vordefinierte Startpunkte

Template Groesse Chunks Beschreibung
Zimmer 8m × 8m × 4m 75 Escape Room, Puzzle, Diorama
Wohnung 16m × 12m × 4m 200 Roleplay, Mystery, Verstecken
Haus + Garten 20m × 20m × 8m 400 Simulation, Abenteuer
Dungeon 32m × 32m × 16m 500 RPG, Erkundung, Kampf
Arena 30m × 30m × 10m 400 PvP, Sport, Wettbewerb
Dorf 48m × 48m × 16m 1.125 Social, Open World (klein)
Insel 64m × 64m × 20m 2.800 Exploration, Survival
Leer Waehlbar Variabel Volle Freiheit

Was in diese Welten passt (Beispiele)

Dungeon (32m × 32m × 16m):

Erdgeschoss: Eingangshalle mit Falltuer
  → Gang mit Fallen (Pfeil-Voxel an der Wand, Trigger: Spieler geht vorbei)
  → Raetsel-Raum (Detail-Zone 2.5cm: Inschrift an der Wand)
  → Schatzkammer (Detail-Zone 5cm: Muenzen, Juwelen, Krone)

Untergeschoss: Labyrinth
  → Geheimgang hinter drehbarer Wand (Trigger-Action)
  → Monster-Spawner (Timer-Trigger + Entity-Spawn)
  → Boss-Arena (gross, offen, Saeulen als Deckung)

Belohnungen: Sculpted Items (1cm)
  → Legendaeres Schwert mit Runen
  → Amulett mit leuchtendem Stein
  → Schluessel fuer den naechsten Dungeon

Haus (20m × 20m × 8m):

Erdgeschoss:
  Kueche: Herd (funktional: Trigger bei Interaktion → "Kochen"-Animation)
  Wohnzimmer: Fernseher (Item mit Script: zeigt Bilder-Slideshow)
  Flur: Briefkasten (Item: "Wenn geoeffnet → Nachricht anzeigen")

Obergeschoss:
  Schlafzimmer: Bett (Trigger: "Wenn benutzt → HP wiederherstellen")
  Geheimzimmer: Hinter Buecherregal (Trigger: bestimmtes Buch antippen)
    → Detail-Zone (5cm): Miniatur-Modell der Stadt auf dem Tisch

Garten:
  Beete mit Pflanzen (Timer-Trigger: "Alle 60s → wachsen")
  Briefkasten der Post empfaengt (Cross-Game Item-Austausch)

5. Der Technische Stack

Architektur-Diagramm

╔═══════════════════════════════════════════════════════════╗
║  BROWSER (Zero Install, PWA, Offline-faehig)              ║
║                                                           ║
║  ┌────────────────────┐  ┌─────────────────────────────┐ ║
║  │ Bevy Engine (WASM)  │  │ Svelte 5 UI                 │ ║
║  │                     │  │                              │ ║
║  │ wgpu → WebGPU       │  │ Editor (Voxel + Properties)  │ ║
║  │ Rapier (Physik)     │  │ Trigger-Action Builder       │ ║
║  │ Greedy Meshing      │  │ Code Editor (Monaco)         │ ║
║  │ Chunk-System        │  │ Sculpting-Werkstatt          │ ║
║  │ Wasmtime (Scripts)  │  │ Inventar, Chat, Social       │ ║
║  │ Quinn (WebTransport)│  │ Marketplace                  │ ║
║  └──────────┬─────────┘  └──────────────┬──────────────┘ ║
║             │                            │                ║
║  ┌──────────▼────────────────────────────▼──────────────┐║
║  │ Dexie.js (IndexedDB) -- Local-First                   ║║
║  │ Welten, Chunks, Items, Inventar, Settings (offline!)  ║║
║  └────────────────────────┬─────────────────────────────┘║
╚═══════════════════════════╪═══════════════════════════════╝
                            │ WebTransport + REST + WS
╔═══════════════════════════╪═══════════════════════════════╗
║  GAME SERVER (Rust, Bevy headless)                        ║
║  Gleicher Engine-Code wie Client                          ║
║  Server-autoritative Physik + Script-Execution            ║
║  Orchestriert von Go-Service                              ║
╠═══════════════════════════════════════════════════════════╣
║  BACKEND (bestehende Mana-Services)                   ║
║  Go:  Orchestrator, Matchmaker, Sync, Notify, Search      ║
║  Hono: Auth, Credits, User, Subscriptions, Analytics      ║
║  Python: LLM (NPCs), Image Gen, STT, TTS                 ║
╠═══════════════════════════════════════════════════════════╣
║  DATA                                                     ║
║  PostgreSQL │ TigerBeetle │ Dragonfly │ MinIO │ Dexie.js  ║
║  Users,Game │ Economy     │ Sessions  │ Assets│ Offline   ║
╠═══════════════════════════════════════════════════════════╣
║  INFRA (Self-Hosted auf Mac Mini + Cloudflare)            ║
║  Forgejo, Grafana, Loki, GlitchTip, Meilisearch          ║
╚═══════════════════════════════════════════════════════════╝

Sprach-Verteilung

Sprache Anteil Domaene
Rust 30% Game Engine, Server, Physik, WASM Runtime, Networking
Go 25% Orchestrator, Matchmaker, Sync, Notify + 6 bestehende Services
TypeScript 30% Svelte UI, Hono Services, User-Scripting (→ WASM)
Python 15% AI: LLM-NPCs, Image Gen, STT, TTS, Moderation

Schluessel-Technologien

Schicht Technologie Warum
Rendering Bevy + wgpu → WebGPU Browser-nativ, gleicher Code Client+Server
Voxel Meshing Greedy Meshing (Rust, rayon parallel) 0.5ms/Chunk, bewaehrt
Physik Rapier (nativ in Rust) Deterministisch, WASM-faehig
Scripting Sandbox Wasmtime (WASM) Hardware-Level-Isolation, Fuel Metering
Networking Quinn (QUIC) → WebTransport Unreliable Datagrams + Reliable Streams
Editor UI Svelte 5 Bestehende Expertise, 19 Apps
Local-First Dexie.js + mana-sync Bestehend, 19 Apps migriert
Economy TigerBeetle Double-Entry, 1M+ TPS, 70% Creator Share
AI NPCs Ollama (Gemma 3 4B) + mana-llm Bestehend, self-hosted
Asset Gen FLUX (mana-image-gen) Bestehend, Texturen/Farb-Paletten
Voice Whisper (mana-stt) + Kokoro (mana-tts) Bestehend, self-hosted
Suche Meilisearch Instant, Typo-tolerant, self-hosted
Analytics ClickHouse Milliarden Events, Echtzeit

6. Chunk-System & Datenmodell

Voxel Encoding

Jeder Voxel = 16 Bit (u16):

Bits 0-7:   Material-Index (256 pro Chunk-Palette)
Bit  8:     Transparent
Bit  9:     Emissive (leuchtet)
Bits 10-11: Rotation (0°, 90°, 180°, 270°)
Bits 12-15: Flags (Custom-States, zerstoerbar, etc.)

Material 0 = Luft (leer)

Chunk-Struktur

Chunk (32³ bei 10cm = 3.2m × 3.2m × 3.2m):

  position: IVec3           // Chunk-Koordinaten
  resolution: f32           // 0.10, 0.05, oder 0.025
  voxels: [u16; 32*32*32]  // 64 KB
  palette: Vec<Material>    // Chunk-lokale Palette (max 256)
  dirty: bool               // Mesh muss regeneriert werden
  mesh: Option<GpuMesh>     // Cached GPU-Mesh

Kompression

Roh:         32³ × 2 Bytes = 64 KB
RLE:         ~5-15 KB (80-95% Reduktion)
RLE + LZ4:   ~2-8 KB (fuer Netzwerk)

Leerer Chunk:    ~10 Bytes
Flacher Boden:   ~500 Bytes
Moebel-Raum:     ~5-10 KB
Maximal dicht:   ~30 KB

Datenbank-Schema

-- Welten
CREATE TABLE worlds (
    id UUID PRIMARY KEY,
    creator_id UUID NOT NULL,
    name TEXT NOT NULL,
    description TEXT,
    template TEXT DEFAULT 'dungeon',  -- zimmer, wohnung, dungeon, arena...
    max_size SMALLINT[3],             -- z.B. {32, 32, 16} in Metern
    max_players INTEGER DEFAULT 20,
    is_published BOOLEAN DEFAULT false,
    play_count INTEGER DEFAULT 0,
    settings JSONB DEFAULT '{}',
    created_at TIMESTAMPTZ DEFAULT now(),
    updated_at TIMESTAMPTZ DEFAULT now()
);

-- Chunks
CREATE TABLE chunks (
    id UUID PRIMARY KEY,
    world_id UUID REFERENCES worlds(id) ON DELETE CASCADE,
    pos_x INTEGER NOT NULL,
    pos_y INTEGER NOT NULL,
    pos_z INTEGER NOT NULL,
    resolution REAL DEFAULT 0.10,     -- 0.10, 0.05, 0.025
    voxel_data BYTEA NOT NULL,        -- RLE + LZ4 komprimiert
    palette JSONB DEFAULT '[]',
    version INTEGER DEFAULT 1,
    updated_at TIMESTAMPTZ DEFAULT now(),
    UNIQUE(world_id, pos_x, pos_y, pos_z)
);

-- Items
CREATE TABLE items (
    id UUID PRIMARY KEY,
    creator_id UUID NOT NULL,
    name TEXT NOT NULL,
    description TEXT,
    -- Voxel-Daten
    voxel_data BYTEA NOT NULL,        -- Komprimiert
    dimensions SMALLINT[3],            -- z.B. {3, 1, 15}
    resolution REAL DEFAULT 0.10,      -- 0.10 (Welt) oder 0.01 (Sculpted)
    -- Properties
    properties JSONB DEFAULT '{}',     -- Schaden, Element, Haltbarkeit...
    behavior JSONB DEFAULT '[]',       -- Trigger-Action Regeln
    script TEXT,                        -- TypeScript Quellcode
    wasm_binary BYTEA,                 -- Kompiliertes WASM
    -- Meta
    rarity TEXT DEFAULT 'common',
    capabilities TEXT[] DEFAULT '{}',   -- ["weapon","throwable","fire"]
    portability TEXT DEFAULT 'functional',
    is_published BOOLEAN DEFAULT false,
    thumbnail BYTEA,                    -- Gerendertes Preview
    created_at TIMESTAMPTZ DEFAULT now()
);

-- Detail-Zonen
CREATE TABLE detail_zones (
    id UUID PRIMARY KEY,
    world_id UUID REFERENCES worlds(id) ON DELETE CASCADE,
    position REAL[3] NOT NULL,         -- Welt-Position (Meter)
    size REAL[3] NOT NULL,             -- Max 4×4×4m
    resolution REAL NOT NULL,          -- 0.05 oder 0.025
    CHECK (resolution IN (0.05, 0.025)),
    CHECK (size[1] <= 4.0 AND size[2] <= 4.0 AND size[3] <= 4.0)
);

-- Inventar
CREATE TABLE inventories (
    player_id UUID NOT NULL,
    item_id UUID NOT NULL,
    world_id UUID,                     -- NULL = globales Inventar
    slot INTEGER,
    quantity INTEGER DEFAULT 1,
    instance_data JSONB DEFAULT '{}',  -- Haltbarkeit, Zustand pro Instanz
    PRIMARY KEY (player_id, item_id, world_id, slot)
);

Dexie.js (Local-First, Client)

const db = new Dexie('manavoxel');

db.version(1).stores({
  worlds:       'id, creatorId, name, isPublished, updatedAt',
  chunks:       'id, worldId, [worldId+posX+posY+posZ], updatedAt',
  items:        'id, creatorId, name, rarity, isPublished, updatedAt',
  detailZones:  'id, worldId',
  inventories:  'id, playerId, itemId, worldId',
  materials:    'id, name, type',
  settings:     'key'
});

7. Creator Economy

Revenue Split: 70% Creator / 30% Plattform

Spieler kauft 100 Mana fuer 1,00 EUR

  Stripe Fee:        0,03 EUR (2.9%)
  Server/Infra:      0,01 EUR
  Plattform-Marge:   0,26 EUR
  ──────────────────────────────
  Creator erhaelt:   0,70 EUR

Zum Vergleich:
  Roblox:   Creator erhaelt ~0,25 EUR (24.5%)
  Apple:    Developer erhaelt ~0,70 EUR (70%)
  Epic:     Developer erhaelt ~0,88 EUR (88%)
  Wir:      Creator erhaelt ~0,70 EUR (70%)

Moeglich weil: Browser-Distribution (0% App Store), Self-Hosted, TigerBeetle.

TigerBeetle Account-Struktur

Platform Treasury
├── User:alice
│   ├── Wallet:purchased     (gekaufte Mana)
│   └── Wallet:earned        (verdiente Mana)
├── Game:bobs-dungeon
│   └── Revenue              (Einnahmen)
├── Marketplace:escrow        (Treuhand)
└── CreatorPayout:pending     (Auszahlungs-Queue → Stripe)

Monetarisierung fuer Creator

Was Creator verkaufen kann Wie
Zugang zu ihrer Welt Einmal-Kauf oder Abo
In-World Items Spieler kauft im Marketplace
Item-Blueprints Andere koennen das Item nachbauen
Detail-Zone Zugang Premium-Bereich in der Welt
Sculpted Items Hochdetaillierte 1cm-Items
Welt-Templates Vorgefertigte Welten zum Klonen

8. Multiplayer & Networking

WebTransport (QUIC)

Unreliable Datagrams (Position, Rotation):
  Spieler-Position: 20Hz, ~20 Bytes/Paket
  Kein Retransmit bei Verlust → fluessig, kein Lag

Reliable Stream 1 (Voxel-Aenderungen):
  SetVoxel { chunk, pos, material }
  Delta-komprimiert, batched pro Frame

Reliable Stream 2 (Chat + Social):
  Textnachrichten, Emotes

Reliable Stream 3 (Economy + Inventar):
  Item-Kauf, Item-Transfer
  → Server-autoritativ, TigerBeetle-validiert

Reliable Stream 4 (Game Events):
  Trigger-Aktionen, Schaden, Effekte

Server-Autoritaet

Client sendet: "Ich will Voxel setzen bei (15, 3, 7)"
Server prueft: Hat Spieler Baurechte? Material im Inventar? Zone editierbar?
Server setzt Voxel → Broadcast an alle Clients im Bereich

Client sendet: "Ich benutze mein Schwert auf Spieler B"
Server prueft: Reichweite? Cooldown? Script-Ergebnis?
Server berechnet: Schaden, Effekte → Broadcast Ergebnis

Alles Spielrelevante laeuft auf dem Server.
Der Client rendert nur und sendet Inputs.

Bandbreite

Initial Load (500 Chunks × ~5 KB komprimiert): ~2.5 MB
  → Bei 10 Mbit/s: ~2 Sekunden
  → Progressiv: Nahe Chunks zuerst, spielbar nach ~0.5s

Laufend (20 Spieler):
  Positionen: 20 × 20 Hz × 20 Bytes = ~8 KB/s
  Voxel-Aenderungen: ~1-5 KB/s
  Chat + Events: ~0.5 KB/s
  → Total: ~10-15 KB/s pro Spieler
  → Trivial

9. AI-Integration

NPCs mit Persoenlichkeit (mana-llm + Ollama)

Creator definiert NPC:
  Name: "Thorin der Schmied"
  Persoenlichkeit: "Muerrisch, aber gutherzig. Liebt sein Handwerk."
  Wissen: "Kennt alle Waffen im Dorf. Hasst Magie."
  Verhalten: "Verkauft Schwerter. Gibt Quests."

Spieler spricht NPC an:
  → mana-llm (Gemma 3 4B, lokal auf Ollama)
  → Structured Output: { dialog, emotion, action }
  → Dialog wird angezeigt, Emotion steuert Animation
  → Action: z.B. "gib_quest" oder "oeffne_shop"

Textur-/Palette-Generierung (mana-image-gen)

Creator: "Generiere eine mittelalterliche Stein-Palette"
  → FLUX generiert Farb-Samples
  → 8-16 Farben werden als Material-Palette importiert
  → Sofort im Voxel-Editor verwendbar

Voice Chat + Moderation (mana-stt)

Spieler spricht im Voice Chat
  → Whisper transkribiert (lokal, <2s Latenz)
  → Text-Classifier prueft auf Verstoesse
  → Bei Verstoss: Warnung + Mute
  → Transkript optional als Chat-Text anzeigen

10. Sicherheit

WASM Sandbox (User-Scripts)

Jedes Item-Script laeuft in eigener WASM-Sandbox:
  ├── Linear Memory: Max 4 MB (Hardware-isoliert)
  ├── Fuel: Max 10.000 Instructions pro Tick
  ├── Timeout: 5ms dann Abbruch
  ├── API: Nur deklarierte Capabilities
  │   ├── damage() → Server-Event (nicht direkt)
  │   ├── particles() → Client-only (kosmetisch)
  │   ├── sound() → Client-only
  │   └── voxel.set() → Server-validiert
  └── Kein Zugriff auf: Filesystem, Netzwerk, andere Scripts

Voxel-Content-Moderation

Bei Welt-Veroeffentlichung:
  1. Render Welt aus 8 Winkeln zu Bildern
  2. Vision-Classifier prueft auf unangemessene Formen
  3. Text-in-Voxel-Erkennung (Schimpfwoerter aus Bloecken gebaut)
  4. Bei Flag: Human Review Queue
  5. Community-Reporting im Spiel

11. Self-Hosting & Infrastruktur

Alles auf dem Mac Mini

Mac Mini M4 16 GB (bestehend):
├── PostgreSQL, Redis/Dragonfly, MinIO          ~2 GB
├── Alle Hono Services (auth, credits, etc.)    ~0.5 GB
├── Alle Go Services (sync, notify, etc.)       ~0.5 GB
├── 30-50 Game Server Instanzen                 ~5-10 GB
├── Ollama (Gemma 3 4B, on-demand)              ~3 GB
├── Monitoring (Grafana, Loki, etc.)            ~0.5 GB
└── Headroom                                    ~1-2 GB
  = ~200-500 gleichzeitige Spieler

Spaeter: Mac Mini M4 Pro 48 GB (~$1.200)
  = ~1.000-2.000 gleichzeitige Spieler

Cloud-Burst: Fly.io fuer Spitzen
  Go-Orchestrator spawnt automatisch bei Bedarf

Was bereits existiert und wiederverwendet wird

DIREKT NUTZBAR (0 Aufwand):
  mana-auth, mana-credits, mana-subscriptions, mana-user,
  mana-analytics, mana-notify, mana-search, mana-llm,
  mana-image-gen, mana-stt, mana-tts,
  Forgejo, Grafana, GlitchTip, MinIO

ANPASSBAR (geringer Aufwand):
  mana-sync (+ Chunk-Sync, Item-Sync)
  @mana/local-store (+ Voxel Collections)
  @mana/shared-auth (unveraendert)
  @mana/shared-ui (+ Editor-Komponenten)

NEU ZU BAUEN:
  Bevy Voxel Engine (Client + Server)
  Svelte Editor UI
  Go Game Orchestrator
  Go Matchmaker
  TigerBeetle Integration
  Meilisearch Integration
  Content Moderation Pipeline

12. Build-Plan

Phase 0: Proof of Concept (6-8 Wochen)

Ziel: Bevy rendert Voxel-Welt im Browser, ein Block setzen/loeschen

Woche 1-2: Bevy + wgpu im Browser
  □ Rust/Bevy-Projekt aufsetzen
  □ WASM-Build → WebGPU-Rendering in Chrome
  □ Kamera (Orbit + WASD + Fly)

Woche 3-4: Chunk-System + Greedy Meshing
  □ Chunk-Datenstruktur (32³, u16, 10cm)
  □ Greedy Meshing implementieren (block-mesh-rs)
  □ Flat-World (eine Ebene Stein)
  □ 5 Materialien (Stein, Holz, Gras, Sand, Wasser)

Woche 5-6: Voxel Editing
  □ Raycast (Mausklick → welcher Voxel?)
  □ Platzieren + Loeschen
  □ Material-Palette (Svelte Overlay)
  □ Undo/Redo

Woche 7-8: Spieler + Physik
  □ Capsule-Collider, Gravitation
  □ AABB-Kollision mit Voxel-Welt
  □ Laufen, Springen
  □ First-Person + Third-Person

Ergebnis: Minecraft Creative im Browser bei 10cm, 60fps

Phase 1: Item-System (6-8 Wochen)

Ziel: Items aus Voxeln formen, Properties geben, benutzen

Woche 9-10: Item-Definition
  □ Voxel-Gruppe selektieren (Box-Select)
  □ "Als Item speichern" → Item-Entity erstellen
  □ Item im Inventar anzeigen (Svelte UI)
  □ Item halten (Third Person, Hand-Attachment)

Woche 11-12: Property Sliders (Ebene 1)
  □ Property-System (ECS Components)
  □ Slider-UI (Svelte): Schaden, Element, Haltbarkeit...
  □ Standard-Verhalten basierend auf Properties
  □ Item benutzen → Effekt sichtbar

Woche 13-14: Trigger-Actions (Ebene 2)
  □ Trigger-Action Editor UI
  □ 10 Trigger + 15 Actions
  □ Trigger-Action → WASM Kompilierung
  □ Wasmtime Sandbox Integration

Woche 15-16: Items in der Welt
  □ Items ablegen / aufheben
  □ Partikel + Sound System
  □ Item-zu-Item Interaktion
  □ Voxel-Manipulation durch Items (Welt veraendern)

Ergebnis: Schwert formen → Feuer-Schaden geben → benutzen → Funken fliegen

Phase 2: Multiplayer (4-6 Wochen)

Ziel: 2-20 Spieler in einer geteilten Welt

Woche 17-18: Game Server
  □ Bevy headless Server (Rust Binary)
  □ Go-Orchestrator spawnt Prozesse
  □ WebTransport (Quinn ↔ Browser)

Woche 19-20: Welt-Sync
  □ Chunk-Transfer bei Verbindung (komprimiert)
  □ Delta-Sync bei Voxel-Aenderungen
  □ Spieler-Positionen synchronisieren
  □ Server-autoritative Validierung

Woche 21-22: Multiplayer-Features
  □ Item-Sync + Inventar-Sync
  □ Item-Interaktionen zwischen Spielern
  □ Text-Chat
  □ Welt-Link teilen (manavoxel.mana.how/world/abc)

Ergebnis: Freunde bauen zusammen, bekaempfen sich mit selbst-gebauten Waffen

Phase 3: Platform (4-6 Wochen)

Ziel: Login, Persistenz, Welt-Discovery

Woche 23-24: Auth + Speichern
  □ mana-auth Integration
  □ Welten in PostgreSQL
  □ Local-First Sync (Dexie.js ↔ mana-sync)
  □ Guest Mode (spielen ohne Account)

Woche 25-26: Discovery + Economy
  □ Welt veroeffentlichen
  □ Welt-Suche (Meilisearch)
  □ TigerBeetle: Mana-Waehrung
  □ Item-Marketplace (einfach)

Woche 27-28: Polish
  □ Onboarding Tutorial
  □ Welt-Templates
  □ Performance Tiers (Desktop/Mobile)
  □ Adaptive LOD
  □ Bug Fixes

Ergebnis: MVP! Spielbare Voxel-Plattform im Browser.

Phase 4: Detail-System + AI (Post-MVP, 8-12 Wochen)

□ Detail-Zonen (Stufe 2: 5cm, 2.5cm)
□ Sculpting-Modus (Stufe 3: 1cm)
□ TypeScript Scripting (Ebene 3)
□ AI NPCs (mana-llm Integration)
□ Voice Chat (mana-stt + WebRTC)
□ Cross-Game Items
□ Voxel-Destruction Physik
□ Advanced Beleuchtung (Schatten, AO)
□ Mobile PWA Optimierung

13. Differenzierung: Warum ManaVoxel?

Gegenueber Minecraft

Minecraft ManaVoxel
1m Bloecke 10cm Voxel (10× detaillierter)
Riesige generierte Welten Kleine handgefertigte Welten
Texturen geben Detail Voxel SIND das Detail
Modding braucht Java/externe Tools Programmierung IM Spiel
Download (300+ MB) Browser, ein Klick
Items = 2D-Icons Items = 3D-Voxel-Skulpturen
Kein Creator-Revenue 70% Revenue Share

Gegenueber Roblox

Roblox ManaVoxel
Mesh-basiert, externer Editor Voxel-basiert, alles in-game
Roblox Studio (Desktop-App) Browser, kein Download
Luau (Nischensprache) TypeScript (Mainstream)
24.5% Creator Revenue 70% Creator Revenue
Kein Offline Offline-Editor, Local-First
Cloud-only Self-Hosted moeglich
Proprietaer Open-Source moeglich

Gegenueber Teardown

Teardown ManaVoxel
Singleplayer Multiplayer
Vordefinierte Level User-generierte Welten
Fotorealistisch Stylisiert (MagicaVoxel)
Nur Destruction Bauen + Programmieren + Zerstoeren
Nativer Client Browser
Kein UGC Vollstaendige UGC-Plattform

Die einzigartige Kombination

Kein anderes Spiel/Plattform hat:

✓ 10cm Voxel + Multi-Resolution (Detail-Zonen + Sculpting)
✓ In-Game Programmierung mit 3 Ebenen (Slider → Trigger → Code)
✓ Browser-nativ (Zero Install)
✓ Local-First (Offline-Editor)
✓ Self-Hosted (DSGVO, volle Kontrolle)
✓ 70% Creator Revenue
✓ AI-nativ (NPCs, Asset-Gen, Voice)
✓ Cross-Game Items mit Voxel-Portabilitaet

ManaVoxel ist: MagicaVoxel + Minecraft + Roblox + Teardown
               im Browser, mit programmierbaren Items,
               offline-faehig, self-hosted, 70% Creator Share.

14. Zusammenfassung

WAS:     Voxel-Plattform fuer handgefertigte Miniaturwelten
WIE:     10cm Basis + 5cm/2.5cm Zonen + 1cm Sculpting
WO:      Im Browser (WebGPU + WASM), kein Download
WARUM:   Alles entsteht im Spiel, alles ist programmierbar
FUER WEN: Creator ab 6 Jahre (Slider) bis Profi (TypeScript)
TECH:    Rust (Bevy) + Go + TypeScript (Svelte) + Python (AI)
HOSTING: Self-Hosted (Mac Mini) + Cloudflare CDN
ECONOMY: TigerBeetle, 70% Creator Revenue, Mana-Waehrung
MVP:     7 Monate (1 Person)
BUDGET:  ~50 MB RAM, ~1.8M Dreiecke, 60fps Desktop, 30fps Mobile

Erstellt: 28. Maerz 2026 Projekt: ManaVoxel -- Teil des Mana-Oekosystems