Ich habe viel im Internet gesucht und festgestellt, dass mein persönliches Wissen überall verstreut war: Notizen, PDFs, Lesezeichen, Zettel, Links, Bilder, Sprachaufnahmen — alles an verschiedenen Orten, nie auffindbar, wenn ich es brauchte. Notion war gut, aber ich wollte den Inhalt meines Gehirns nicht in einen anderen SaaS-Dienst geben.

Dann dachte ich: “Warum baue ich nicht meine eigene?”

Und ich tat es.

Was ist Memorito?#

Memorito ist eine selbst gehostete, multimodale Wissensdatenbank, die ich für mich selbst gebaut habe — kein fertiges Produkt, das ich nutze, sondern etwas, das ich für meine eigenen Bedürfnisse codiert und kontinuierlich weiterentwickelt habe. Es kann Texte, URLs, Bilder, Audio-Dateien und PDFs verarbeiten, indexieren und durchsuchen. Nicht nur Schlüsselwortsuche — semantische Suche, also findet es relevante Inhalte basierend auf der Bedeutung.

Der Kern: Wirf alles rein, und später kannst du danach in natürlicher Sprache suchen, wie bei einem persönlichen Assistenten.

Der Code ist Open Source und auf GitHub verfügbar: https://github.com/Yappito/memorito. Wenn du interessiert bist, schau es dir an, und wenn du Ideen oder einen Pull Request hast, nehme ich sie gerne an.

Warum habe ich es gebaut?#

Ehrlich gesagt? Weil es nervig war, überall zu suchen. Ich habe ein QNAP NAS, ich habe einen Proxmox Homelab Cluster, und ich dachte: “Warum sollte ich keine eigene Wissensdatenbank betreiben?” Ich wollte meine eigene Software, kein SaaS-Produkt.

Die Hauptmotive:

  • Meine Daten, mein Server — ich gebe den Inhalt meines Gehirns nicht an ein SaaS-Unternehmen
  • Multimodal — nicht nur Text, sondern auch Bilder, Audio, PDF
  • Semantische Suche — kein Keyword-Match, sondern echte bedeutungsbasierte Suche
  • Automatisierbar — API-Endpunkte, also können Agenten es nutzen
  • Selbst gehostet — volle Kontrolle, in meiner eigenen Infrastruktur
  • Mein eigener Code — wenn etwas nicht funktioniert, behebe ich es selbst, kein Support-Ticket nötig

Vibe-Coding, oder die Sünde#

Ja, ich habe vibe-gecodet. Über GLM-5.1, via OpenCode, war die v1 an einem Nachmittag fertig. Natürlich habe ich danach noch viel verfeinert, aber die Grundidee und der Großteil des Codes kamen vom Vibe-Coding. Ich bin überhaupt kein Entwickler, ich bin Infrastrukturengineer, inzwischen Architekt. Aber mit großen Sprachmodellen kann man heute wirklich eine funktionierende App zusammenbauen, wenn man einen guten Prompt und eine klare Vorstellung hat.

Der Schlüssel ist zu wissen, was man will. Wenn man genau beschreiben kann, was man will, und einen KI-Partner hat, der es in Code übersetzen kann — dann muss man nicht wochenlang auf ein Feature warten. Ein paar Stunden und es ist fertig.

Wie funktioniert es?#

Ingestion — Inhalte einspeisen#

Es gibt fünf Endpunkte zur Verarbeitung, alle asynchron:

  1. Text — direkte Texteingabe mit Titel und Tags
  2. URL — Abrufen und Indexieren von Webseiten
  3. Image — Bild-Upload für visuelle Suche
  4. Audio — Audio-Datei-Upload, automatisch transkribiert (mit z.ai GLM-ASR-2512 Modell)
  5. PDF — Dokument-Upload für Volltextsuche

Jede Ingestion ist asynchron: POST einen Job, dann poll den /api/ingest/<id>/status Endpunkt, bis er COMPLETED zurückgibt. Kein Warten nötig — einfach einreichen und später suchen.

Retrieval — Suche und Abfrage#

Zwei Hauptarten zu suchen:

  • /api/search?q=... — hybride semantische Suche, filterbar nach Quelltyp, Tags, Datumsbereich, Reranker-Toggle, Paginierung
  • /api/items/<id> — Abfrage eines bestimmten Elements, gibt Metadata, Chunks, Duplikat-Links und eine presigned S3-Download-URL für Mediendateien zurück

Bestehende Daten ändern#

PATCH-Endpunkte erlauben es, Titel und Tags zu aktualisieren, ohne den Inhalt erneut hochzuladen. Nützlich, wenn man den Titel verschossen hat oder später Tags hinzufügen will.

Der technische Hintergrund#

Der Stack ist nicht gerade durchschnittlich:

  • Next.js 15 App Router + TypeScript Strict Mode
  • tRPC v11 (interne UI) + REST Ingestion API (externe Aufrufer)
  • Prisma + PostgreSQL 17 + pgvector (hybride Suche)
  • Redis + BullMQ (asynchrone Job-Warteschlange)
  • Jina Embeddings v4 (1024-dimensional) + Jina Reranker v3
  • Provider-agnostische LLM-Schicht — kann vier verschiedene Modelle verarbeiten:
    • zai — z.ai Coding Plan API (GLM-5.1, /layout_parsing, ASR)
    • local — lokaler OpenAI-kompatibler Server (z.B. llama.cpp)
    • custom — beliebiger OpenAI-kompatibler Endpunkt
    • ollama-cloud — Ollama Cloud (https://ollama.com/v1)

Die Audioverarbeitung nutzt ein separates z.ai GLM-ASR-2512 Modell, unabhängig vom LLM-Provider.

Speicherung#

Dateien gehen in ein S3-kompatibles Backend — ich betreibe Garage auf einem QNAP NAS. Download-URLs sind presigned URLs, gültig für etwa 1 Stunde. Das bedeutet, Memorito speichert Dateien nicht direkt — es sendet sie an das S3-Backend und serviert sie von dort.

Wie verbinden sich OpenClaw und Hermes Agenten?#

Hier wird es wirklich interessant. Ich habe zwei KI-Agenten (OpenClaw und Hermes), die die Memorito API nutzen. Ich habe den Code nicht geschrieben — die KI hat ihn generiert, aber ich habe die Architektur entworfen, und ich weiß genau, wie jeder Endpunkt funktioniert und wie man das Maximum daraus herausholt.

OpenClaw#

OpenClaw nutzt eine Skill (openclaw-skill/SKILL.md), die curl-basierte HTTP-Anfragen an die Memorito API sendet. Wichtige Verhaltensweisen:

  1. Ingestion mit sourceName: "openclaw" Tag — damit weiß ich, welche Inhalte vom Agent kamen
  2. Polling bis COMPLETED — nie zur Suche springen, bevor die Ingestion fertig ist
  3. Suche auf dem /api/search Endpunkt
  4. Vollständige Kontextabfrage auf dem /api/items/<id> Endpunkt für relevante Ergebnisse
  5. Übersetzung ins Englische — nicht-englische Ergebnisse werden immer ins Englische übersetzt
  6. Datei-Download und -Zustellung — wenn eine Mediendatei im Ergebnis ist, lädt sie von der downloadUrl herunter und sendet sie an den Benutzer

Wichtig: die downloadUrl ist eine presigned S3-URL, kein Memorito-Endpunkt. Direkt mit curl herunterladen: curl -o file.jpg "$DOWNLOAD_URL".

Hermes#

Der Hermes-Agent funktioniert ähnlich, aber mit einigen Unterschieden:

  • Netcat-Fallback — curl stottert in der VM-Umgebung, also nutzt er Netcat für Raw-HTTP
  • Datei-Zustellung auf Messaging-Kanälen — für Telegram/WhatsApp reicht das MEDIA: Tag nicht, die Datei muss nach ~/.openclaw/workspace/ heruntergeladen werden, dann gesendet mit openclaw message send --channel <channel> --target <target> --media <local-path>
  • GLM-5.1 Reasoning-ModellgenerateTitle benötigt mindestens 2048 Token, sonst kann die Antwort leer sein (Reasoning-Tokens fressen das Budget)

Wozu nutze ich es?#

Grundsätzlich kann ich alles reinwerfen und später danach suchen:

  • Tech-Artikel, Dokumentation — URL-Ingestion, später suchen, wenn ich mich an das Thema erinnere
  • PDF-Dokumente — Forschungsunterlagen, Handbücher
  • Audio-Aufnahmen — Meeting-Notizen, Podcasts, meine eigenen Sprachnotizen
  • Bilder — Screenshots, Diagramme, alles Visuelle
  • Textnotizen — schnelle Gedanken, Tipps, Lösungen
  • Fotos von Notizen, Flugblättern, IKEA-Möbel-Etiketten — das ist der größte Use-Case für mich: Ich fotografiere etwas (z.B. ein IKEA-Möbel-Etikett, einen Flugzettel, eine Notiz), und suche später danach, oder bitte den KI-Agenten, die Item-URL zu finden, die Maße zu speichern oder die Information basierend auf den extrahierten Daten zu ergänzen.

Agenten ingestieren Inhalte nicht automatisch — sie senden nur Daten an Memorito, wenn ich es anweise. Wenn ich nach etwas suche, gibt Memorito die relevanten Ergebnisse mit vollem Kontext zurück.

Zusammenfassung#

Memorito ist eine starke, gut durchdachte Wissensdatenbank, die ich für mich selbst gebaut habe, und sie funktioniert tatsächlich. Nicht nur ein weiterer Bookmark-Manager, sondern eine echte semantische Suchschicht für dein persönliches Wissen. Die Agenten-Integrationen (OpenClaw, Hermes) machen es wirklich nützlich — man muss nicht alles von Hand ingestieren, die Agenten sammeln und kategorisieren die Inhalte automatisch.

Und da wir über meinen eigenen Code sprechen — wenn du an Memorito interessiert bist, schau es dir auf GitHub an: https://github.com/Yappito/memorito. Es ist Open Source, also keine Angst vor Vendor-Lock-in. Wenn du Ideen, Bug Reports oder Pull Requests hast — nehme ich sie gerne an.

Wenn du auch müde bist, dass dein Wissen auf zehn verschiedene Orte verstreut ist, und du willst, dass ein KI-Agent dir hilft, zu finden, was du suchst — es lohnt sich, es auszuprobieren. Oder wenn du denkst, du könntest es auch bauen — dann bau es, es macht richtig Spaß. Man braucht heute wirklich keinen professionellen Entwickler zu sein, um seine eigene Software zu bauen.