GeGroups
Gruppen und Mailinglisten, gebaut zum Betreiben.
Das Grundelement aus gemeinsamer Adresse und gemeinsamem Verlauf, das Teams und Communities immer wieder brauchen — ohne dafür einen eigenen Mail-Stack zu betreiben.
Was es ist
Mailinglisten. Das Grundelement aus gemeinsamer Adresse und gemeinsamem Verlauf, das Teams und Communities immer wieder brauchen, ohne selbst einen Mail-Stack zu betreiben.
Listen sind noch immer eines der ältesten täglich genutzten Stücke Kollaborationsinfrastruktur, und die meisten Angebote stecken entweder in 2005 fest oder sind für eine Beschaffungsabteilung bepreist. GeGroups liegt dazwischen. Ausgeliefert, Open Core, gebaut zum Betreiben statt zum Bewundern.
Der Name behält das „Ge". GeGroups, nicht GGroups.
Der Zuschnitt
Einer Gruppe gehört eine Subdomain. Unter dieser Gruppe liegen eine oder mehrere Listen: eine main-Liste plus die Untergruppen, die sie braucht. Jede Liste hat ein Webarchiv, eine eigene Mitgliedschaft und eine eigene Zustellung.
Das ist das Modell von groups.io, und es ist das richtige. Die Subdomain ist das, was eine Gruppe wie einen Ort wirken lässt statt wie eine Zeile in irgendjemandes Datenbank.
Die Mailseite
Diesen Teil unterschätzt man leicht. Listen zu betreiben heißt Mail zu betreiben, und Mail zu betreiben heißt, die unglamourösen und nicht verhandelbaren Teile zu betreiben.
Eingehendes kommt über LMTP in einen eigenen Listener. Ausgehendes läuft über einen Transport, der mit DKIM signiert, denn unsignierte Listenmail ist gefilterte Mail. Speicher für Anhänge und Archive ist MinIO oder ein beliebiges S3-kompatibles Ziel. Die Suche ist Meilisearch.
Jede Änderung ist ein Workflow
Die ungewöhnliche Entscheidung hier ist, dass Hintergrundaufgaben und Änderungen beide auf Temporal laufen, gegen ein versioniertes Worker-Deployment.
Eine Mailingliste ist ein verteiltes System, ob man es zugibt oder nicht. Eine einzelne eingehende Nachricht fächert in Hunderte Zustellungen auf, von denen einige fehlschlagen, einige Stunden später erneut versucht werden müssen, und alle mit einem Archiv konsistent bleiben müssen, das jemand gerade liest. Das mit einer Job-Queue und einer Cron-Tabelle zu machen funktioniert genau so lange, bis es das nicht mehr tut — und dann untersucht man eine halb zugestellte Nachricht ohne jede Historie dessen, was geschehen ist.
Temporal gibt jedem davon eine dauerhafte Ausführungshistorie. Wenn etwas kaputtgeht, hat die Frage „was ist mit dieser Nachricht eigentlich passiert" eine Antwort.
Redis ist geblieben, aber nur noch für Echtzeit-Pub/Sub. Tragend ist es nicht mehr.
Stack
Next.js und React im Frontend, Tailwind. Drizzle über PostgreSQL. Temporal für den Worker. Die Authentifizierung läuft über einen selbst betriebenen Identitätsdienst statt über einen fremden, dieselbe Haltung wie im Rest der Reihe.
Status
Ausgeliefert. Open Core, mit kostenloser Basisversion und proprietären Bezahlstufen.
Rechtliches: Terms · Privacy notice · Processing agreement