Changelog

Alle wesentlichen Änderungen an Maschinchenring werden hier dokumentiert.

2026-04-15 Performance

Astro-Middleware verifiziert JWT in-process

  • Die Astro-Middleware in website/src/middleware.ts macht bei jedem Request keinen Loopback-HTTP-Call nach /auth/me mehr. Stattdessen importiert sie makeTokenVerifier aus server/src/auth/jwt.ts und prüft den JWT direkt gegen process.env.JWT_PUBLIC_KEY.
  • Öffentliche Seiten (Startseite, Gerätedetails, Impressum, Datenschutz, Docs) zahlen damit keinen Context-Switch mehr für Auth — der JWT-Check läuft komplett in-process.
  • Profil-Daten (Telefon, Adresse) lädt nur noch /konto selbst per /auth/me, weil das die einzige Seite ist, die sie anzeigt. Regressionstests in e2e/stale-auth-cookie.spec.ts bleiben grün.
2026-04-15 Feature

Vermieter können Zeiträume sperren

  • Neue MCP-Tools block_period, unblock_period und list_my_blocks: Vermieter können Zeiträume auf ihren Geräten als „belegt" markieren — z.B. wenn sie das Gerät selbst brauchen oder es bereits über eine andere Plattform vermietet ist.
  • Sperren blockieren Buchungsversuche und erscheinen im öffentlichen Kalender als unverfügbar (ohne Grund oder Namen des Vermieters preiszugeben).
  • Neue Tabelle blocked_periods (Migration 013) — saubere Trennung zu Buchungen: kein Mieter, keine Approval-Logik, keine Dummy-Namen.
  • Regressionstests: server/src/db/queries/blocked_periods.test.ts und der neue Vermieter-Sperren-Block in server/src/mcp/e2e.test.ts.
2026-04-14 Fix

Konto-Zombie-Login und kaputtes Buchung-Stornieren repariert

  • Astro-Middleware prüft jetzt bei jedem Request den auth_token-Cookie gegen /auth/me. Abgelaufene oder nach Server-Reboot ungültige Tokens werden gelöscht — vorher zeigte die Navigation fälschlich "Konto/Abmelden" an, und die Kontoseite hatte leere Profildaten (keine Adresse).
  • Buchung stornieren, bestätigen und ablehnen laufen jetzt über Full-Page-Confirmations (/buchungen/:id/cancel, /accept, /decline) statt eines JS-Popups. Vorher las der Inline-Handler den JWT über document.cookie — der Cookie ist aber httpOnly, also sah er nichts, der Bearer-Header war leer und der Server antwortete mit "Unauthorized". Der E-Mail-Approval-Flow (/buchungen/:id?token=xxx) bleibt davon unberührt.
  • Regressionstests: e2e/cancel-booking.spec.ts, e2e/owner-decision.spec.ts und e2e/stale-auth-cookie.spec.ts.
2026-04-14 Analytics

Anonyme Reichweitenmessung mit Plausible

  • Tracking-Script von analytics.levinkeller.de (selbst gehostetes Plausible) im BaseLayout eingebunden — läuft damit auf allen gerenderten Seiten
  • Cookielos, kein Personenbezug, keine Cross-Site-Tracking-IDs
2026-04-14 Doku

Doku aus Nutzer-Sicht neu geschrieben

  • /docs komplett umgeschrieben: Community-Idee, Rollen (Mieter / Vermieter), Warum-Freischaltung, FAQ (Haftung, Versicherung, Absagen, No-Shows) statt Tech-Stack- und Infrastruktur-Details
  • Neuer Abschnitt "Was darf hier angeboten werden?": kein Marktplatz, keine Dienstleistungen, keine alkoholischen / pornografischen / illegalen Inhalte — Meldung fragwürdiger Angebote per E-Mail mit Link zum Gerät
  • Gewerbetreibende ausdrücklich erlaubt (keine Haftung, egal ob privat oder gewerblich)
  • Kaution im Mieter- und Vermieter-Flow erwähnt — Übergabe direkt zwischen den Parteien, keine Zahlungsabwicklung über die Plattform
  • Betreiber-Hinweis (Levin Keller, Impressum) und Kontakt (post@levinkeller.de) ergänzt
  • /docs/mcp-tools entschlackt: als API-Referenz aus Sicht des Clients positioniert, Implementierungs-Details (Suche, Bilder-Pipeline) entfernt, Admin-Tools aus der öffentlichen Referenz genommen, "Owner" → "Vermieter" vereinheitlicht
2026-04-14 Fix

Vermieter-Status sichtbar im Chat

  • get_profile gibt jetzt lender, admin, lenderStatus (approved / pending / none) und profileComplete zurück — der Chat-Assistent kann den Vermieter-Status damit direkt auslesen statt zu raten
  • request_lender_status ist jetzt auch im Web-Chat (Haiku) als Tool verfügbar; vorher fehlte es in den Chat-Tool-Definitionen
  • Tool-Beschreibungen für den Vermieter-Flow geschärft
  • server/src/mcp/tools.ts in Domänen-Module aufgeteilt (tools/items.ts, tools/bookings.ts, tools/profile.ts, tools/admin.ts, tools/deps.ts)
2026-04-14 Feature

Vermieter-Flow & User-Cleanup

  • Neues MCP-Tool request_lender_status: User beantragt Vermieter-Freischaltung (Profil-Check, 1h-Cooldown, E-Mail an alle Admins)
  • Admin-UI unter /admin/lender-requests/:userId (Cookie-Auth, GET + POST approve/reject)
  • DB-Rename: can_uploadlender, is_adminadmin
  • Spalte lender_requested_at als Spam-Schutz
  • Tote Spalten github_id / google_id entfernt, User-IDs sind jetzt opaque UUIDs
  • GitHub-OAuth übergibt randomUUID() statt GitHub-Login als ID; Profile werden weiterhin per E-Mail gematcht
2026-04-14 Feature

Öffentliche Dokumentation

  • Neue Dokumentationsseiten unter /docs hinzugefügt
  • Vollständige MCP-Tools-Referenz unter /docs/mcp-tools
  • Changelog unter /docs/changelog
  • Footer-Link zur Dokumentation ergänzt
2026-04 Fix

Chat-Rework

  • Chat-Interface überarbeitet und stabilisiert
  • Konversationsverwaltung verbessert
2026-04 Feature

Semantische Suche

  • search_items-Tool mit Hybrid-Suche (semantisch + lexikal)
  • Jina Embeddings für Geräte-Beschreibungen
  • 70% semantisches Gewicht, 30% lexikal
2026-04 Feature

Bild-Upload und imgproxy

  • Bild-Upload-Endpoint POST /images/upload (S3/MinIO)
  • imgproxy-Integration für optimierte, HMAC-signierte Bild-URLs
  • attach_image_to_item-Tool zum Verknüpfen von Bildern
  • Uploader-Berechtigung (can_upload) für Vermieter
2026-04 Feature

Gerätesets

  • Sets: Bündel aus mehreren Geräten zu einem Tagespreis
  • list_sets-Tool
  • Sets-Übersicht auf der Webseite
2026-03 Feature

Chat-Assistent

  • Chat-Interface mit Claude (SSE-Streaming)
  • Konversationspersistenz in SQLite
  • Konversationstitel via set_conversation_title-Tool
2026-02 Feature

Admin-Tools und Vermieter-Verwaltung

  • admin_approve_uploader, admin_revoke_uploader, admin_list_users
  • Vermieter-Whitelist (can_upload-Flag)
  • Admin-Flag (is_admin) für Nutzerverwaltung
2026-01 Feature

OAuth PKCE für MCP-Clients

  • OIDC-Provider mit Authorization Code + PKCE
  • Dynamic Client Registration (POST /oauth/register)
  • Kompatibel mit Claude Desktop und anderen MCP-Clients
2025-12 Feature

Buchungsfluss

  • Buchungsanfragen via MCP-Tool create_booking
  • Owner-Benachrichtigung per E-Mail (Approve/Reject-Links)
  • Stornierung durch Mieter und Owner
  • Status: pendingapproved / rejected / cancelled
2025-12 Feature

Authentifizierung

  • GitHub OAuth (arctic)
  • Magic Link per E-Mail
  • JWT RS256 (jose) als Cookie
2025-11 Feature

MCP-Server und Webseite

  • Initiale Implementierung des MCP-Servers (Streamable HTTP)
  • Astro SSR Website mit Geräteübersicht und Detailseiten
  • Verfügbarkeitskalender
  • SQLite-Datenbankschema (Migrationen)
  • Deployment auf k3s (ARM, Traefik, cert-manager)