Eigenbetrieb
Eigene Infrastruktur in der Schweiz. Stack komplett quelloffen — Postgres, SQLite, Redis, MinIO, Hono, Bun, SvelteKit, Astro. Keine Managed-Services, keine proprietären Bauteile, kein Cloud-Anbieter, der morgen das Pricing dreht.
docs/MISSION.md — Stufe 2 „Unabhängiges Hosten, Betreiben, Warten"
Eigenbetrieb ist die zweite Stufe der Unabhängigkeit. Die erste ist, unabhängig Software zu bauen. Die zweite ist, sie unabhängig zu hosten und zu warten. Auf eigener Hardware, mit eigenem Stack, ohne Cloud-Anbieter im Pfad zwischen uns und den Nutzer:innen.
Konkret: Ein Mac Mini steht in der Schweiz (Tägerwilen TG), eine GPU-Workstation daneben. Auf dem Mini laufen ~100 Container — Postgres-Datenbanken, Redis-Instanzen, MinIO-Buckets, ~20 Plattform-Services, alle Vereins-Apps. Auf der GPU-Box läuft die KI-Inferenz, soweit sie sich selbst-hosten lässt.
Und der Werkzeugkasten dahinter ist genauso selbst-betrieben: Forgejo für Git, Verdaccio für npm, Stalwart für Mail, SearXNG für die Suche. Wo wir noch Drittpartei kaufen — Stripe, APNs/FCM, die LLM-Provider — nennen wir das ehrlich.
Diese Selbständigkeit ist anstrengend. Sie ist aber die einzige Form von Eigentum an einer Plattform, die wir wirklich kennen.
Was wir tun
- Mac Mini in der Schweiz (Tägerwilen TG) als Plattform-Server, RTX-3090-Workstation als GPU-Box
- Postgres, SQLite, Redis, MinIO — alles selbst gehostet, kein Managed-Service
- Forgejo statt GitHub, Verdaccio statt npmjs, Stalwart statt Postmark, SearXNG statt Google
- Cloudflared als einziger Außen-Tunnel — bewusst dokumentierte Abhängigkeit
- Backups lokal aktiv, off-site geplant — keine fremde Cloud im Daten-Pfad
Was wir nicht tun
- Keine US-Cloud (AWS, GCP, Azure) — auch nicht für „die unkritischen Teile"
- Keine Managed-Datenbanken, keine Vendor-Lock-In-SDKs
- Bewusste, dokumentierte Ausnahmen: Stripe (Bezahlung), APNs/FCM (Push-Channel), LLM-APIs (Anthropic/OpenAI/Gemini)
Was uns dieser Wert kostet
Jeder Wert hat einen Preis. Wir benennen ihn, damit Werte keine Floskeln werden.
- Selbst-Hosting heißt: wenn die Hardware ausfällt, fällt der Verein aus — Schweiz-Replikation ist offen
- Wir betreiben deutlich mehr Dienste, als ein gleich-großes Startup tun würde — On-Call ist real
- Manche „bequeme" Lösung (Managed-Postgres, Managed-Auth) müsste man kaufen und werden nicht gekauft
Wo dieser Wert konkret im Code steht
Diese Apps, Services und Pakete führen Eigenbetrieb ausdrücklich in ihrer Werte-Liste. Werte gewinnen erst, wenn sie sich an Bauteilen festmachen lassen.
-
KartomoFreie Karteikarten zum Behalten — über 50 fertige Decks gratis, Lernen im eigenen Tempo, und jede Karte kommt zurück, kurz bevor du sie vergisst.
-
SeepulsDie erste Plattform, die den Bodensee als eine Region behandelt — über alle Anrainer hinweg, ohne nationale Trennlinien.
-
stetickVorsätze, die halten — freie Wochen-Frequenz, Limit-Vorsätze, lokal, ohne Konto.
-
ZeitrankeDie bekanntesten historischen Persönlichkeiten — nach Land, Beruf und Epoche, auf der Karte und am Zeitstrahl. Ohne Konto, ohne Cookies.
-
Amana-authIdentität, Sessions und JWKS für alle Vereins-Apps — eine Anmeldung, lokale Token-Verifikation, kein Cloud-Auth-Anbieter.
-
Amana-auth-webDas Anmelde-Portal als eigene Web-App — gemeinsame Login-Seite für alle Vereins-Apps mit App-spezifischem Branding.
-
Mmana-meUser-globale Profil-Referenzen — welches Foto ist gerade dein Gesicht, welches dein Körper, über alle Apps hinweg.
-
Cmana-creditsDie Geldbörse der Plattform — Mana-Guthaben, Stripe-Brücke, Buchhaltung, 2-Phase-Debit über alle Apps.
-
AauraPrivater Anerkennungs-Ledger für Beiträge zum Ökosystem — sechs Botanik-Ränge, kleine reale Geschenke, kein Leaderboard.
-
XxpGeplantes Lern- und Kompetenz-Backbone der Plattform — Skill-XP pro App, neun Intelligenz-Domains, globaler Level, opt-in-Portfolio.
-
Smana-shareFöderations-Drehscheibe für Cross-App-Datentransfers — App-Manifeste, Routing, Retry-Queue, Audit-Log.
-
Lmana-linksDeep-Link-Resolver — Apps registrieren ihre URI-Schemata, andere verlinken stabil quer durch das Ökosystem.
-
Emana-eventsPlattform-Pub/Sub — Topic-basiertes Event-Bus mit At-least-once-Delivery, DLQ und Wildcard-Subscriptions.
-
Mmana-mcpTool-Registry und MCP-Gateway — sammelt AI-Tools aus App-Manifesten und liefert sie an Claude-Clients per Model Context Protocol.
-
Smana-searchFöderierte Aggregat-Suche — verteilt eine Anfrage über alle Apps eines Users und vereint die Ergebnisse.
-
Lmana-llmEine Schnittstelle vor Anthropic, OpenAI, Gemini — ein Ort für API-Keys, ein Cost-Tracking, ein Audit.
-
Smana-sttSelbst gehostetes Speech-to-Text via Whisper auf eigenem GPU-Server — Sprache verlässt die Vereins-Infrastruktur nicht.
-
Smana-stt-ersatzDerselbe Spracherkenner auf einem zehn Jahre alten Büro-PC — langsamer, aber genauso genau, und er läuft, wenn die Grafikkarte ausfällt.
-
Tmana-ttsSelbst gehostetes Text-to-Speech auf eigenem GPU-Server — Vereins-Stimme statt Big-Cloud-Stimme.
-
Tmana-tts-ersatzVorlesen ohne Grafikkarte, auf einem Bestandsrechner — mit zwei CC0-Stimmen, und es klingt hörbar anders.
-
Imana-image-editsReference-basierte Image-Edits — Plattform-Service vor OpenAI gpt-image-2 und Gemini-Image-Edits.
-
Imana-image-genBilder aus Text auf der eigenen Grafikkarte — FLUX.2 [klein] 4B unter Apache-2.0, kein Prompt verlässt das Haus.
-
Mmana-mediaObjekt-Speicher für alle Vereins-Uploads — S3-kompatibles MinIO im Eigenbetrieb, Buckets pro App.
-
Mmana-music-genMusik samt Gesang aus einer Textbeschreibung, gerechnet auf der eigenen Karte — ACE-Step unter Apache-2.0.
-
Tmana-transcodeVideo-Transcoding-Worker — liest BullMQ-Jobs, läuft ffmpeg, schreibt 720p/480p/Poster zurück in mana-media.
-
Gmana-geocodingAdresse ↔ Koordinaten — eigener Photon-Server zuerst, Public-Photon und Nominatim nur als Fallback.
-
Smana-stemsTrennt eine fertige Aufnahme in Gesang und Begleitung — die Grundlage für Karaoke aus eigenem Material.
-
Gmana-gpu-brokerDie Schlange vor der einen Grafikkarte — teilt Speicher zu, damit sich sieben KI-Dienste nicht gegenseitig abschiessen.
-
Rmana-researchWeb-Research-Orchestrator — 16+ Provider hinter einer Schnittstelle mit Auto-Routing nach Query-Typ.
-
3mana-3dAus einem Foto wird ein dreidimensionales Objekt — der Dienst, der einmal ohne jede Anmeldung im Netz stand.
-
Smana-syncEvent-Store-Server für die Event-Sourced-Plattform — Append-only Event-Log pro User pro App, JWT-Auth via mana-auth.
-
Pmana-presenceLive-State + SSE-Fanout — was läuft gerade auf welchem Gerät, bidirektional zwischen Phone und Web.
-
Mmana-mailTransaktionale Email für die ganze Plattform — Welcome, Passwort-Reset, Spendenbescheinigung, alles über Vereins-Stalwart.
-
Nmana-notifyPush-Versand für iOS, Android und Web-Push — Templates und Throttling zentral, keine Push-SaaS-Anbieter.
-
Nmana-news-poolGeteilter RSS/JSON-Feed-Pool — kuratierte Quellen, die alle Apps gemeinsam lesen können.
-
Amana-adminVereins-Backoffice — Mitglieder, Spenden, DSGVO-Fan-out, Einladungen, Aura-Ledger und Gift-Versand in einem Werkzeug.
-
S@mana/shared-uiVereins-UI-Komponenten — Svelte 5 mit strikter 12-Token-Disziplin. Die UI-Foundation aller mana-Apps.
-
S@mana/shared-tailwindTailwind-Preset für alle Vereins-Apps — gemeinsamer Farb-Token-Satz, Spacing-Skala, Schriften-Stack.
-
S@mana/shared-iconsPhosphor-Icon-Wrapper für alle Vereins-SvelteKit-Apps — einheitliche Icon-API, bundlebar pro App nur die genutzten.
-
S@mana/shared-theme12-Token-Theming-Engine — pro App ein Theme, ein Token-Satz, eine konsistente Optik.
-
S@mana/shared-brandingBrand-Assets der Vereins-Apps — Logos, Favicons, App-Icons, Footer-Bausteine. Eine Quelle für visuelle Identität.
-
S@mana/shared-pwaPWA-Boilerplate für Vereins-Apps — Vite-Plugin, Theme-Bridge, Install-Banner, Update- und Offline-Komponenten.
-
S@mana/shared-honoHono-Server-Foundation — JWT-Auth-Middleware, Health-Endpoints, Admin-Routen, Fehlerbehandlung. Jeder Server-Service nutzt das.
-
S@mana/shared-drizzle-configDrizzle-ORM-Konfiguration-Factory für alle Vereins-Services — eine DB pro Service, schema-isoliert via pgSchema.
-
S@mana/shared-loggerLogging-Foundation für Mobile- und Web-Apps der Plattform — strukturiert, kontextualisierbar, datenschutz-konform.
-
S@mana/shared-typesGemeinsame TypeScript-Typen für das Vereins-Monorepo — Wissens-Brücke zwischen Services und Apps.
-
T@mana/tsconfigGeteilte tsconfig-Bases — Web/SvelteKit und Hono+Bun-Server in zwei sauberen Voreinstellungen.
-
S@mana/shared-app-tplHono-Helpers für föderierte Vereins-Apps — Manifest-Serving, Share-Receive-Router, Tools-Router, DSGVO-Export.
-
Mmana/shared-goGo-Helpers für die wenigen Vereins-Services in Go — Auth, Env, HTTP-Middleware. Pendant zu shared-hono.
-
S@mana/shared-share-protocolFöderations-Vertrag des Vereins — Manifest, Share-Envelope, Drag-Payload, Search-Result. Der eine Klasse-A-Vertrag, an dem alle Apps hängen.
-
E@mana/event-kitEvent-Sourcing DSL und Codegen — definiert Schemas einmal, generiert TypeScript, Swift und Kotlin daraus.
-
E@mana/event-syncWeb-Client für die Event-Sourced-Plattform — IndexedDB-Store + HTTP/WebSocket-Sync zu mana-sync.
-
S@mana/shared-auth-ssoSvelte-5-Auth-Klient für das SSO-Cookie-Pattern — createSession, tryRefresh, buildLoginRedirect, AuthCallback.
-
N@mana/notify-clientClient-SDK für den mana-notify Push-Service — eine Zeile pro App, statt OneSignal-Setup zu pflegen.
-
S@mana/shared-researchGeteilte Typen und Provider-Interfaces für den mana-research Service — eine Schnittstelle vor 16+ Such-Providern.
-
S@mana/shared-rssRSS/Atom-Parser plus Mozilla-Readability-Artikel-Extraktion plus Feed-Discovery. Pure-TypeScript ohne externe Dienste.
-
S@mana/shared-mapCross-App-Karten-Komponente — MapLibre GL JS, PMTiles-ready, OpenStreetMap-Kacheln. Eine Karte für alle Vereins-Apps.
-
S@mana/shared-key-grantHKDF-basierte Mission-Key-Grants — Apps bekommen per-Mission-Decrypt-Access, ohne den User-Masterkey zu sehen.
-
M@mana/marketing-kitAstro-Marketing-Foundation für Vereins-Apps — AppLanding-Layout, Hero/Story/Feature/Stats/CTA-Komponenten, SEO/JSON-LD-Helper.
Wogegen Eigenbetrieb ansteuert — und was wir baulich dafür tun
Werte gewinnen erst gegen die Industrie-Logik, wenn sie sich an konkreten Problemen festmachen lassen — und an strukturellen Lösungenn, die sie tragen.
-
Cloud-Energiehunger als SelbstzweckCloud-Wachstum dient zunehmend sich selbst — mehr Strom, um besser zu überwachen, um besser zu monetarisieren, um mehr Cloud rechtfertigen zu können.
-
Cloud-Act — extraterritoriale US-Zugriffe auf europäische DatenSolange der Mutterkonzern dem US-Recht unterliegt, gibt es keine technische oder vertragliche Konstruktion, die einen Cloud-Act- Zugriff auf europäische Daten zuverlässig ausschließen kann.
-
Eigenbetrieb auf einem Mac MiniSouveränität fängt damit an, dass jemand im Verein die Stromrechnung der Hardware kennt, auf der die Daten liegen.
-
Was öffentlich ist, liefern wir statisch ausFür Inhalte, die öffentlich sind und für alle gleich aussehen, ist statisches Vorab-Bauen langlebiger, ausfallsicherer und günstiger als ein dynamischer Server hinter jeder Seite.
-
Local-First + Login-OptionalDas energie-effizienteste Rechenzentrum ist die CPU, die ohnehin schon in der Hosentasche liegt — und kein Konto ist die beste Privatsphäre.
-
PWA vor Native — Web-App, wo es gehtEine gute PWA ist heute auf Android und Desktop praktisch ununterscheidbar von einer nativen App — ohne Apple/Google als Distributions-Mittler.
-
Eigener App-Store — Android-Vertrieb in eigener HandAuf Android war der Vertrieb nie verschlossen — also betreiben wir ihn selbst, an Google vorbei, ohne Gatekeeper und ohne Gebühr.
Was diesen Grundsatz weiter trägt
- Jetzt Mukke Vocal-Studio — GPU-Phase 2: echte Modelle statt Stubs Die vier GPU-Services für Mukkes Vocal-Studio (Stems, Music-Gen, Pitch, Mix) laufen seit KW 20 live als Stub-Implementierungen. Phase 2 ersetzt sie durch die tatsächlichen Modelle auf der RTX-3090-Workstation in Tägerwilen.
- Jetzt Memoro: Vorstand-Inbox + „An Verein senden"-Knopf Memoro bekommt ein Share-Pattern pro Aufnahme, mit dem Sprachnotizen an den Verein gesendet werden — entweder als privates Strategie-Werkstück (nur Vorstand sieht es, exportierbar als Markdown für das Sprachnotizen-Archiv) oder als öffentlicher Software-Wunsch (wird später von der Wunsch-App konsumiert). Damit wird Memoro der zentrale Sprach-Eingang des Vereins — konsistent mit der Origin-Story und Eat-Your-Own-Dogfood.
- Jetzt Software-Wunsch-App — Bedarfe sammeln, priorisieren, bauen Eine kleine, eigenständige App, in der Menschen aus der Region ihre Software-Bedarfe einreichen, beschreiben und gegenseitig bewerten können. Der Verein wertet aus, priorisiert und baut. Bewusst keine Memoro- Erweiterung — als eigenes, klar umrissenes Werkzeug ein Beweis dafür, dass gezielte Software für einen gezielten Use-Case schnell und sauber entstehen kann. MVP **live auf `wunsch.mana.how`** seit 2026-05-25.
- Bald Off-Site-Backup an einem zweiten CH-Standort Der lokale Backup-Cron läuft (18 DBs, 9 Container, 46 GB nightly) — das Off-Site-Spiegel-Bein fehlt aber noch. Ohne zweiten Standort ist ein Brand- oder Diebstahl-Szenario in Tägerwilen unrettbar.
- Bald Alte news.curated_articles-Tabelle droppen (~2026-06-17) In mana_platform liegen noch 25 717 Zeilen vom abgeschalteten news-ingester. Reine Hygiene-Aufgabe — keine App liest sie mehr. Recipe steht intern, nur Ausführung fehlt.
- Später Eigener Android-Store: F-Droid-Repo + Direkt-APK Die Recherche zum App-Vertrieb hat die Richtung gesetzt: Auf Android bauen wir das souveräne Rückgrat selbst — ein selbst gehostetes F-Droid-Repo plus signierte Direkt-APK, an Google vorbei, in jedem Land nutzbar (auch der Schweiz). Bestehende Kanäle bleiben Reichweiten-Verstärker, die PWA der Default. Hier steht der Weg dorthin.
- Später SEPA-Lastschrift direkt — Stripe als bewusste Externe ablösen Stripe ist heute eine der drei bewusst akzeptierten externen Stellen. Der Ablöse-Pfad steht in der Landing-Sektion „Bewusste Externe": SEPA-Lastschrift direkt, ohne Payment-Provider zwischen Verein und Mitglied.
- Später On-Device-LLM für alle Apps — Anthropic/OpenAI/Gemini ablösen Die LLM-APIs (Anthropic, OpenAI, Gemini) sind heute die dritte bewusst akzeptierte Externe. Ablöse-Pfad: lokale Modelle, gestaffelt — Gemma/Mistral auf dem Gerät via mana-swift-llm, größere Modelle auf der eigenen GPU-Box.
- Später Web-Push (VAPID) — APNs/FCM für PWAs ablösen APNs und FCM sind die zweite bewusste Externe. Für PWAs (unsere Android- Primärlinie) lässt sich der Push-Channel mit Web-Push + VAPID direkt aus dem Server bedienen, ohne Apple oder Google im Pfad.
- Später Knoten-Betreiber:innen mit Compute beteiligen (Stufe 3) Heute können Knoten-Betreiber:innen Backup-Spiegel anbieten. Stufe 3 wäre, dass sie Compute-Lasten mittragen — verteilte Mac-Minis oder GPU-Boxen, die KI-Inferenz oder Echtzeit-Sync föderieren.