Herausforderung
Wer neu in der Schweiz ankommt, steht vor einem verteilten System: 26 Kantone, drei Amtssprachen, unterschiedliche Zuständigkeiten für Aufenthalt, Arbeit, Gesundheit und Bildung. Informationen liegen auf Dutzenden von Portalen — kantonal, kommunal, verbandlich — und sind selten in derselben Sprache und Detailtiefe verfügbar.
Sprache ist die erste Hürde. Viele offizielle Ratgeber existieren nur auf Deutsch, Französisch oder Italienisch. Wer Farsi, Arabisch, Ukrainisch oder Kirgisisch spricht, muss übersetzen lassen oder auf Communities zurückgreifen — und verpasst dabei die formalen Fristen und Nuancen, auf die es ankommt.
Die zweite Hürde ist die Bewilligungssituation. Rechte und Pflichten unterscheiden sich fundamental zwischen B, C, F, N, L, S oder EU/EFTA — aber Standardportale abstrahieren das weg. Menschen lesen Ratgeber, die für sie gar nicht gelten, und treffen Entscheidungen auf falscher Grundlage.
Die dritte Hürde ist digitale Fragmentierung. Für Stellensuche, Dokumenten-Checklisten, Terminvereinbarung, Communityfragen und Behördenkarten bräuchte es zehn Apps. Genau hier setzt Zusammen an: eine App statt zehn Portalen.
Ansatz
Fünf Grundsätze haben Architektur und Feature-Set geprägt:
- Mehrsprachig ab Tag 1 — 11 Sprachen sind im Code hinterlegt (ar, de, en, fa, fr, it, ky, pt, ru, tr, uk). Jede Inhaltseinheit ist von Anfang an übersetzbar, nicht nachträglich lokalisiert.
- Offline-fähig — Ratgeber-Artikel und Checklisten funktionieren ohne Netzverbindung. Wichtig für Menschen mit knappem Datenvolumen oder in Unterkünften mit instabilem WLAN.
- Permit-bewusst — Inhalte, Jobs und Empfehlungen berücksichtigen die Bewilligungssituation, statt einheitliche Antworten für alle auszugeben.
- Ein Ökosystem statt vieler Apps — Ratgeber, Stellensuche, Servicekarte, Dokumente, Community-Forum und KI-Assistent leben in einer Oberfläche mit gemeinsamem Login.
- Redaktionell wartbar — ein dediziertes Backoffice erlaubt Fachredakteur:innen zu publizieren, ohne dass Entwickler:innen deployen müssen.
Was wir gebaut haben
Ratgeber
Strukturierte Artikel zu Rechten, Arbeit, Wohnen, Gesundheit, Bildung und Alltag. Das Datenmodell trennt Article von ArticleTranslation — die Redaktion schreibt einmal pro Sprache, und die App liest in der Sprachpräferenz der Nutzer:innen. Kategorisierung erfolgt über ContentCategory mit eigenen Übersetzungen.
Stellensuche
Ein Job-Modul mit Job, JobApplication und JobTemplate. Arbeitgeber verwalten Inserate über eigene Konten (Employer), Bewerber:innen speichern Lebensläufe (cv/-Modul) und bewerben sich direkt aus der App. Templates helfen Redaktion und Arbeitgeberpartnern bei wiederkehrenden Rollen.
Servicekarte
ServicePoint bündelt Anlaufstellen — Migrationsämter, Beratung, medizinische Grundversorgung, Sprachschulen — mit Geodaten. Das geo/-Modul verarbeitet Standort und Radius, ServicePointTranslation liefert lokalisierte Namen und Beschreibungen.
Dokument-Checklisten & Erinnerungen
DocumentChecklist beschreibt, welche Unterlagen für welchen Anwendungsfall nötig sind. Über das Reminder-Modell werden Fristen (Verlängerung, Anmeldung, Kursbeginn) mit Push-Nachrichten verknüpft.
Community-Forum
Vollwertiges Forum mit ForumCategory, ForumTopic, ForumPost, ForumLike und Moderation via ForumReport. Nutzer:innen tauschen sich zu konkreten Erfahrungen aus, ohne die App zu verlassen.
KI-Assistent
AiConversation und AiMessage speichern Gespräche serverseitig, damit der Assistent Kontext behält. Er beantwortet Ratgeber-Fragen in der Sprache der Nutzer:innen und verweist auf redaktionell gepflegte Artikel — nicht auf beliebige Webquellen.
Push-Benachrichtigungen
DeviceToken verwaltet FCM- und APNs-Tokens, Notification protokolliert versendete Nachrichten. So werden Fristerinnerungen, Antworten im Forum und Job-Matches zuverlässig zugestellt.
Redaktions-Backoffice
Eine eigenständige React + Vite Anwendung (admin/) erlaubt der Fachredaktion, Kategorien, Artikel, Jobs, Services und Checklisten in allen Sprachen zu pflegen — mit Vorschau, Freigabe-Workflow und Rollen.
Architektur
Zusammen ist ein dreistufiges System: Flutter-Clients (iOS, Android, Web-PWA) sprechen über eine NestJS-REST-API mit einer PostgreSQL-Datenbank. Die App ist als Monorepo organisiert; die Web-PWA nutzt denselben Flutter-Code wie die nativen Clients und wird über nginx ausgeliefert.
Das Datenschema ist konsequent translation-first: 35 Prisma-Modelle verteilen sich auf 10 Domänen (Auth, Content, Jobs, Services, Documents, Forum, AI, Notifications, Analytics, Audit). Jede Content-Entität besitzt eine gepaarte *Translation-Tabelle. Das trennt Redaktions-Workflow (pro Sprache freigeben) sauber von der Ausliefer-Logik (pro Nutzer:in in Wunschsprache lesen).
Die Backend-Anwendung ist in 25+ NestJS-Module nach Domäne geschnitten: auth, content, jobs, employers, services (via geo), forum, ai, bookmarks, messages, notifications, reminders, search, subscriptions, sync, admin, analytics, audit, mailer, media, integrations, i18n, cv, users, common. Jedes Modul kapselt Datenmodell, DTOs, Controller und Service; so bleibt der Code beim Skalieren der Fachlichkeit übersichtlich.
Deployed wird über Docker Compose auf einem einzelnen VPS: Backend, Admin-Frontend, Web-PWA und die Landing-Site laufen als getrennte Container hinter nginx. Eine eingebaute Analytics- und Audit-Pipeline (AnalyticsEvent, AnalyticsDailyStat, AuditLog) protokolliert Nutzung und redaktionelle Aktionen ohne externe Tracker.
Zahlen & Fakten
| Metrik | Wert |
|---|---|
| Sprachen ausgeliefert | 11 (ar · de · en · fa · fr · it · ky · pt · ru · tr · uk) |
| Backend-Module (NestJS) | 25+ (Auth, Content, Jobs, Services, Forum, AI, Analytics …) |
| Prisma-Datenmodelle | 35 in 10 Domänen |
| Client-Plattformen | iOS · Android · Web-PWA |
| Übersetzbare Inhaltstypen | 5 (Ratgeber, Jobs, Services, Checklisten, Forum) |
| KI-Assistent | integriert, Konversationshistorie serverseitig |
Was wir gelernt haben
Ein permission-driven Inhaltsmodell — Inhalte auf die Bewilligungssituation zuschneiden — kostet in der Modellierung Zeit, zahlt sich aber jede Woche in Support-Aufkommen und Nützlichkeit der Ratgeber aus. Ohne diese Trennung wäre der KI-Assistent zwangsläufig ungenau geworden.
Redaktions-UX ist wichtiger als jede Frontend-Animation. Wenn die Person, die Artikel in elf Sprachen pflegt, im Admin nicht flüssig arbeiten kann, bleibt Inhalt liegen — und der Rest der App wird wertlos. Der frühe Aufwand für das Backoffice war die produktivste Investition im Projekt.
Offline-first zwingt zu einem klaren Datenvertrag. Sobald der Client Inhalte lokal cacht, muss das Backend Versionierung, Fallback-Sprachen und Konfliktauflösung beim Sync sauber liefern. Das hat die API-Grenzen geschärft und Nebenwirkungen im gesamten System reduziert.
Nächste Schritte
- Weitere Sprachen entlang der tatsächlichen Community-Nachfrage, mit Priorität auf Erstsprachen aktueller Aufnahmegruppen.
- Tiefere Integration mit kantonalen Datenquellen (Anlaufstellen, offizielle Merkblätter), sodass Ratgeber-Inhalte automatisch aktuell bleiben.
- Feineres Permit-Matching: Empfehlungen und Checklisten dynamisch aus Bewilligungstyp, Kanton und Familiensituation zusammenstellen.
Verwandt
- Kontext: Was wir bauen wollen — Zusammen ist ein Beispiel für Software mit sozialer Wirkung.