---
title: "Im Produktionsumfeld"
description: "Echte Nibiru-Anwendungen bringen echtes Einkommen. Maschinen Stockert verkauft industrielle Maschinen in 12 Ländern auf diesem Framework."
---

Ein Framework, das sich lohnt zu verwenden, bringt Dinge mit. Der Flaggschiff-Nibiru-Bereitstellung ist die **Maschinen Stockert**-Gruppe – eine Paar von Repositorys, die einen der größten industriellen-Geräte-E-Commerce-Plattformen Österreichs betreiben.

Die beiden Repositories teilen Module und eine Datenbank; sie teilen die Verantwortung nach Publikum.

---

<div class="showcase-plate">
  <img src="/img/showcase-tpms.png" alt="Ein industrieller CNC-Maschinenaufbau auf einem Fabrikflur zur goldenen Stunde." />
  <div class="showcase-plate__body">
    <p class="showcase-plate__meta">10 Steuerungen · 18 Module · 150 Vorlagen · 36.289 Zeilen PHP</p>
    <h3 class="showcase-plate__title">maschinen-stockert.de — öffentlicher Katalog</h3>
    <p class="showcase-plate__desc">Die Verkaufsseite. Durchsuchen und suchen Sie gebrauchte industrielle Maschinen, zeigen Sie reiche Detailseiten mit SEO-freundlichen Slug an, melden Sie sich für das jährliche Hausmesse-Messeveranstaltung an, fordern Sie Angebote an.</p>
  </div>
</div>

## maschinen-stockert.de — öffentlicher Katalog

Die öffentliche Seite: Dies ist der Ort, an dem industrielle Käufer landen, suchen und umwandeln.

### Was darauf enthalten ist

- **Multilingual content**, bei dem jeder sichtbare String aus der `cms_template_texts` Datenbank abgerufen wird, die durch `<controller>/<action>` + Sprache indiziert ist. Redakteure aktualisieren den Text im Admin-Bereich ohne einen Deployment.
- **Elasticsearch-gestützte maschinelles Suchen**, mit typbewusster Filterung — Abmessungen werden aus `"2500 × 1200 mm"` Zeichenketten in numerische Bereiche analysiert, sodass Käufer nach Größe suchen können.
- **SEO-freundliche URLs** — `/maschine/drehmaschine-2500/42` — generiert aus dem Maschinenname mit Normalisierung der deutschen Umlaute (`ä → ae`, `ß → ss`). Die numerische ID steht immer am Ende, sodass der Router einen veralteten Slug auflösen kann.
- **Yumpu PDF Flipbooks** für herunterladbare Kataloge.
- **Hausmesse Modul** für die Anmeldung auf Messestandsmitte mit rollenbasiertem Zugriff.

### Eine repräsentative Aktion
```php
// application/controller/maschineController.php
public function detailAction()
{
    $machineId = $this->getRequest('id', true);
    if (!$machineId) {
        http_response_code(404);
        return;
    }

    $controllerPath = $this->getController() . '/detail';
    $cmsTemplateTexts = Cms::init($this->getController())
        ->loadCmsTemplateTextsByControllerPath($controllerPath, $this->language);

    foreach ($cmsTemplateTexts as $t) {
        View::assign([
            $t['cms_template_texts_text_identifier']
                => $t['cms_template_texts_text_content']
        ]);
    }

    try {
        $machine = Machine::init()->getMachine((int) $machineId);
    } catch (\Throwable $e) {
        $machine = null;   // DB blip → page still renders with fallback.
    }

    $machineName = $machine['ms_machines_name'] ?? "Maschine #$machineId";
    $protocol = (($_SERVER['HTTPS'] ?? '') === 'on') ? 'https' : 'http';

    View::assign([
        'machine'        => $machine,
        'pageTitle'      => "$machineName - Maschinen Stockert",
        'metaDescription'=> "Details und Spezifikationen für $machineName",
        'canonicalUrl'   => $protocol . '://' . $_SERVER['HTTP_HOST']
                          . self::generateMachineSeoUrl($machineId, $machineName),
    ]);
}
```
50 Zeilen, kein Dependency Injection Container, kein Validierungs-Pipeline, kein Middleware Stack. Lädt zuerst die von der CMS verwaltete Kopie (damit eine Datenbankausfall auf den Maschinen die Seite nicht zerstört), zieht die Maschine mit einem sanften Fallback, generiert SEO-Metadaten immer. Die gesamte Detailseite wird in zwei Datenbank-Round-Trips gerendert.

---

<div class="showcase-plate">
  <img src="/img/showcase-thorax.png" alt="Eine Wand aus gut benutzten technischen Lederbüchern, eines davon im Weichfokus geöffnet." />
  <div class="showcase-plate__body">
    <p class="showcase-plate__meta">36 Controller · 18 Module · 348 Vorlagen · 161 SQL-Migrationen · 37.369 Zeilen PHP</p>
    <h3 class="showcase-plate__title">data.maschinen-stockert.de — Admin & API</h3>
    <p class="showcase-plate__desc">Das interne Cockpit. Vertriebsmitarbeiter verwalten den Bestand, Inhalte, Aufträge, Teamseiten und Messeanmeldungen. Entwickler und Integrationen rufen REST-APIs auf, um Maschinen zu suchen, Hersteller zu synchronisieren, PDFs zu generieren und Ollama für künstliche Intelligenz-basierte Maschinendescriptions abzurufen.</p>
  </div>
</div>

## data.maschinen-stockert.de — Admin und API

Die gleichen Module, dreimal so viele Controller und Templates – weil Admin-Benutzeroberflächen und APIs viele Einstiegspunkte benötigen.

### Was es macht

- **Page-tree CMS**: Redakteure erstellen Seiten aus einer Smarty-Vorlage; das `Parser`-Plugin durchsucht die Platzhalter `{$identifier}` in der Vorlage und generiert automatisch die Bearbeitungsformularschnittstelle für den Admin-Bereich. Die Vorlage *ist* die Formulierungsspezifikation.
- **Rollenbasierte ACL**: jeder Konstruktor des Admin-Controllers ruft `$this->user = new User(); $this->acl = new Acl(); $this->acl->init(); $this->user->validate();` – drei Zeilen, fertig. Vertrieb hat nur Lesezugriff auf den Bestand; Administratoren können bearbeiten; Partner sehen nur ihre zugewiesenen Einträge.
- **Public-API-Zulassungsliste**: `apiController` erlaubt maschinenbasierte Suchen, Kategorieabrufe, Teaminformationen und Ollama-AI-Aufrufe ohne Authentifizierung, erfordert dann jedoch Authentifizierung für alles andere. Die Zulassungsliste befindet sich direkt im Konstruktor – keine Probleme mit der Reihenfolge des Middlewares.
- **Machineryscout Indexer**: das schwerste Modul. Ein 2.200-Zeilen-Trait, das Maschinen + Attribute + Bilder + Dokumente aus MySQL über `JSON_ARRAYAGG` zieht, normalisiert die Typen (`"2500 x 1200"` → `dimension_width: 2500.0, dimension_height: 1200.0`), ersetzt Platzhalter für fehlende Bilder und schreibt Zeilen in Elasticsearch.

### Der Parser-Muster — automatische Generierung von Editor-Benutzeroberflächen aus einer Vorlage
```php
// application/controller/adminController.php
$parser = Parser::init();
$cmsEditable = $parser->parseSmartyTemplateByTemplateId($templateId);
View::assign([
    'cmsEditable'        => $cmsEditable,
    'cmsTemplateTextForm'=> Cms::textsEditingForm('/admin/texts/create/text/new'),
]);
```
Fügen Sie eine neue Smarty-Vorlage ins System ein, der Editor weiß sofort, welche Platzhalter bearbeitet werden können. Es gibt keinen Schritt zur "Registrierung der Formularfelder".

---

## Was ist tatsächlich besonderes, zusammengefasst

Die fünf Unterschiedsmaker unten stammen aus den darüberliegenden Codebasen. Jeder verweist auf seine Beweise auf der Seite [Warum Nibiru](/de/warum-nibiru/).

| | Was Nibiru macht | Was Laravel/Symfony macht |
|---|---|---|
| Seitenkopie | Aus der Datenbank per Anfrage durch `<controller>/<action>` geladen, von einem Editor verwaltet. | Hardschrieben in Blade / Übersetzungs-JSON; für Änderungen bereitstellen. |
| Modulkomposition | 13 Traits pro Modul, keine DI. | Dienstanbieter + IoC-Container. |
| ORM | Direkte SQL, MySQL `JSON_ARRAYAGG`, `Pdo::fetchAll`. | Eloquent / Doctrine-Entitäten + Lazy-Loading-Proxys. |
| Authentifizierung | 3 Zeilen im Controller-Konstruktor. | Middleware-Stack + Policy-Klassen + Gates. |
| Ereignisse | `SplSubject` + `SplObserver` aus der PHP Standardbibliothek. | Benutzerdefinierter Event-Dispatcher + Listener-Registry + Warteschlange. |

Lesen Sie die [vollständige Ausbreakdown mit Codeverweisen →](/de/warum-nibiru/)

---

## Was dazu notwendig war

Maschinen Stockert ist eine echte, einkommensgenerierende Website, die Maschinen in 12 Ländern verkauft. Sie hat **161 timestamped SQL-Migrationen** ohne Migrationsframework in die Produktion übertragen, **74.000 Zeilen PHP über zwei Repositories** ohne Dienstcontainer und **18 Module**, die mit Traits anstelle von Vererbung zusammengesetzt werden. Das Team, das es erstellt und betreut, ist klein.

Das ist die Beweisnachweisung.

Wenn Sie mit einer kleinen Team und einem engen Budget in die Produktion gehen, bei der Abstimmungen und Ausfallzeiten echtes Geld kosten — das ist der Nibiru-Sweet Spot. Lesen Sie den [Schnellstart](/en/start/quick-start/), dann kommen Sie zurück.
