XyNaP Modulares Produktsystem — Gesamtkonzept¶
Status: Konzeption (v1.0, 2026-03-05) Ziel: Vollintegrierte, modulare SaaS-Plattform unter
*.xynap.cloud
1. Vision¶
XyNaP ist eine modulare Business-Plattform. Kunden buchen einzelne Module (Bausteine) und kombinieren sie frei. Alle Module teilen sich gemeinsame Komponenten (Kontakte, Kalender, Dateien, Benutzer) und laufen unter einer einheitlichen Oberflaeche mit einem Login.
┌─────────────────────────────────────────────────────────────────┐
│ <firma>.xynap.cloud │
│ Ein Login. Ein UI. │
├─────────┬─────────┬─────────┬─────────┬─────────┬─────────────┤
│ XyNaP. │ XyNaP. │ XyNaP. │ XyNaP. │ XyNaP. │ XyNaP. │
│ crm │ cms │ mail │ cloud │ host │ voice │
│ │ │ │ │ │ │
│ Deals │ Seiten │ Webmail │ Dateien │ Websites│ Telefonie │
│ Leads │ Editor │ IMAP │ WebDAV │ PHP/DB │ SIP/VoIP │
│ Pipeline│ Themes │ Kalend. │ CalDAV │ FTP │ IVR │
│ Tickets │ Import │ Filter │ CardDAV │ SSL │ Voicemail │
├─────────┴─────────┴─────────┴─────────┴─────────┴─────────────┤
│ Shared Components (Kern) │
│ │
│ Kontakte │ Kalender │ Dateien │ Benutzer │ Domains │
│ Aufgaben │ Notizen │ Tags │ Teams │ Billing │
│ Workflows │ Suche │ Audit │ API │ Webhooks │
├─────────────────────────────────────────────────────────────────┤
│ Infrastruktur │
│ Multi-Tenant │ RBAC │ API Gateway │ Event-Bus │ Storage │
└─────────────────────────────────────────────────────────────────┘
2. Module im Detail¶
2.1 XyNaP.crm — Customer Relationship Management¶
Kernfunktionen:
2.1.1 Kontakt-Management (nutzt Shared Component contacts)¶
- Personen & Organisationen mit beliebigen Custom Fields
- Beziehungen: Person ↔ Organisation (Rolle, Abteilung, Position)
- Aktivitaetshistorie: Alle Interaktionen (E-Mails, Anrufe, Meetings, Notizen) chronologisch
- Tags & Segmente: Dynamische Listen basierend auf Filtern
- Duplikat-Erkennung: Fuzzy-Match auf Name, E-Mail, Telefon → Merge-Assistent
- Import/Export: vCard, CSV, LDAP-Sync
2.1.2 Sales-Pipeline¶
- Deals: Kanban-Board mit Drag & Drop zwischen Phasen
- Phasen: Frei konfigurierbar pro Pipeline (z.B. Lead → Qualifiziert → Angebot → Verhandlung → Gewonnen/Verloren)
- Mehrere Pipelines: z.B. Neukunden-Pipeline, Upsell-Pipeline, Partner-Pipeline
- Deal-Felder: Wert, Waehrung, erwartetes Abschlussdatum, Wahrscheinlichkeit
- Gewichteter Forecast: Summe(Wert × Wahrscheinlichkeit) pro Phase/Monat/Quartal
- Rotting-Deals: Automatische Warnung wenn Deal X Tage in einer Phase stagniert
- Produkte/Positionen: Angebotspositionen mit Menge, Einzelpreis, Rabatt
2.1.3 Lead-Management¶
- Lead-Erfassung: Webformulare (CMS-Integration), E-Mail-Parser, API
- Lead-Scoring: Regelbasiert (Branche +10, Websitebesuch +5, E-Mail geoeffnet +3)
- Lead-Routing: Automatische Zuweisung an Vertriebsmitarbeiter (Round-Robin, Region, Skill)
- Lead-Nurturing: Automatische E-Mail-Sequences basierend auf Score/Verhalten
- Conversion: Lead → Kontakt + Deal (mit einem Klick)
2.1.4 Angebote & Rechnungen¶
- Angebots-Generator: Aus Deal-Positionen, eigene Vorlagen (PDF)
- Angebots-Tracking: Wann geoeffnet, wie oft angesehen
- Angebot → Rechnung: Ein-Klick-Konvertierung
- Rechnungs-Workflow: Entwurf → Gesendet → Bezahlt → Ueberfaellig → Gemahnt
- Zahlungseingaenge: Manuell oder via Payment-Gateway (Stripe, PayPal)
- Mahnwesen: Automatische Mahnstufen (1. Erinnerung → 2. Mahnung → 3. letzte Mahnung)
- DATEV-Export: Buchungssaetze fuer Steuerberater
- ZUGFeRD/XRechnung: E-Rechnungsstandard (PDF/A-3 + XML)
2.1.5 Support & Tickets (erweitert bestehende Tickets)¶
- Ticket-Kanaele: E-Mail, Webformular, Telefon (→ Voice-Modul), Chat
- SLA-Management: Reaktionszeit, Loesungszeit pro Prioritaet/Kunde
- Eskalation: Automatisch bei SLA-Verletzung (Benachrichtigung → Reassignment → Manager)
- Knowledge Base: Artikel mit Kategorien, Volltext-Suche, Kundensichtbarkeit
- Kundenzufriedenheit: CSAT-Umfrage nach Ticket-Schliessung
- Canned Responses: Vorgefertigte Antworten mit Platzhaltern
2.1.6 Reporting & Dashboards¶
- Sales-Dashboard: Pipeline-Wert, Conversion-Rate, Durchschnittliche Deal-Dauer, Win/Loss-Ratio
- Team-Performance: Aktivitaeten pro Mitarbeiter, Deals gewonnen, Umsatz
- Forecast: Gewichteter Forecast pro Monat/Quartal mit Trend
- Funnel-Analyse: Drop-off pro Phase, Engpass-Erkennung
- Custom Reports: Drag & Drop Report-Builder mit Filtern, Gruppierungen, Diagrammen
- Scheduled Reports: Automatischer Versand per E-Mail (taeglich/woechentlich/monatlich)
- Export: PDF, CSV, Excel
2.1.7 CRM-Workflows (nutzt Shared Component workflows)¶
Trigger:
| Trigger | Beispiel |
|---|---|
contact.created |
Neuer Kontakt angelegt |
contact.updated |
Feld geaendert (z.B. Status) |
contact.tag_added |
Tag "VIP" hinzugefuegt |
deal.created |
Neuer Deal erstellt |
deal.stage_changed |
Deal in neue Phase verschoben |
deal.won / deal.lost |
Deal gewonnen/verloren |
deal.rotting |
Deal stagniert X Tage |
lead.score_threshold |
Lead-Score ueberschreitet Schwelle |
ticket.created |
Neues Ticket |
ticket.sla_warning |
SLA-Deadline naht |
invoice.overdue |
Rechnung ueberfaellig |
email.received |
E-Mail von Kontakt empfangen |
call.completed |
Telefonat beendet (Voice-Modul) |
form.submitted |
Webformular abgeschickt (CMS) |
schedule.cron |
Zeitgesteuert (taeglich/woechentlich) |
Aktionen:
| Aktion | Beschreibung |
|---|---|
send_email |
E-Mail senden (Template + Platzhalter) |
send_sms |
SMS senden |
create_task |
Aufgabe erstellen und zuweisen |
create_deal |
Deal aus Lead erstellen |
update_field |
Feld an Kontakt/Deal aendern |
add_tag |
Tag hinzufuegen |
assign_owner |
Zustaendigen wechseln |
move_stage |
Deal in Phase verschieben |
create_ticket |
Support-Ticket erstellen |
webhook |
Externer HTTP-Call |
wait |
X Minuten/Stunden/Tage warten |
condition |
If/Else Verzweigung |
notify |
Interne Benachrichtigung (Push, E-Mail, Telegram) |
score_lead |
Lead-Score anpassen |
start_sequence |
E-Mail-Sequence starten |
call_contact |
Anruf initieren (Voice-Modul) |
generate_invoice |
Rechnung erstellen |
Beispiel-Workflows:
-
Lead-Nurturing Sequence:
Trigger: lead.created (Score < 50) → wait(1 day) → send_email("Willkommen bei XyNaP") → wait(3 days) → condition(email.opened?) → YES: score_lead(+10), send_email("Feature-Highlights") → NO: send_email("Haben Sie Fragen?") → wait(7 days) → condition(score > 40?) → YES: assign_owner(sales-team), create_task("Lead kontaktieren") → NO: add_tag("cold-lead") -
Deal-Rotation-Warnung:
-
After-Sales:
2.2 XyNaP.cms — Content Management System¶
Kernfunktionen:
2.2.1 Grid-Layout Editor¶
- Block-basiert: Jede Seite besteht aus Bloecken in einem responsiven Grid
- Grid-System: CSS Grid mit 12 Spalten, frei konfigurierbar (Colspan, Rowspan, Gap)
- Breakpoints: Desktop (1200+), Tablet (768-1199), Mobile (< 768) — pro Block einstellbar
- Live-Preview: WYSIWYG mit Echtzeit-Vorschau aller Breakpoints
- Drag & Drop: Bloecke verschieben, resize via Handles, Snap-to-Grid
- Undo/Redo: Vollstaendige History (Ctrl+Z / Ctrl+Y)
2.2.2 Block-Typen (Komponenten-Bibliothek)¶
| Kategorie | Bloecke |
|---|---|
| Text | Heading, Paragraph, Rich-Text, Blockquote, Code |
| Media | Bild, Video, Gallery, Slider, Icon |
| Layout | Container, Columns, Spacer, Divider, Accordion, Tabs |
| Navigation | Menu, Breadcrumb, Footer, Sidebar |
| Formulare | Kontaktformular, Newsletter, Umfrage (→ CRM Lead-Erfassung) |
| E-Commerce | Produktkarte, Preistabelle, CTA-Button |
| Social | Social Links, Share-Buttons, Feed-Embed |
| Daten | Tabelle, Timeline, Counter, Statistik |
| Integration | Map (OpenStreetMap), HTML-Embed, iFrame |
| CRM | Kontaktformular→Lead, Angebots-Rechner, Terminbuchung (Kalender) |
2.2.3 Design-System¶
- Globale Styles: Farb-Palette (Primary, Secondary, Accent, Neutral, Danger, Success)
- Typografie: Font-Family, Groessen, Zeilenhoehe — global definiert, pro Block ueberschreibbar
- Spacing-System: Konsistente Abstands-Skala (xs, sm, md, lg, xl, 2xl)
- Theme-Variablen: CSS Custom Properties, Dark/Light Mode
- Preset-Themes: 10+ vorgefertigte Themes (Business, Creative, Minimal, Bold, etc.)
2.2.4 Template-Engine¶
- Seitentypen: Startseite, Unterseite, Blog-Post, Landing-Page, 404
- Master-Layouts: Header + Footer + Content-Area, gemeinsam fuer alle Seiten
- Template-Marktplatz: Eigene Templates teilen und importieren
- Globale Bloecke: Header, Footer, CTA-Banner — einmal definiert, ueberall verwendet
2.2.5 Website-Import¶
- HTML/CSS Import: Bestehende Website crawlen, Struktur erkennen, in Bloecke konvertieren
- WordPress Import: WP-Export XML → Seiten, Posts, Medien, Menues
- Sitemap-Crawler: URL eingeben → alle Seiten erfassen → selektiv importieren
- Asset-Migration: Bilder, Fonts, CSS automatisch in Cloud-Speicher uebernehmen
2.2.6 SEO & Performance¶
- SEO-Felder: Title, Description, OG-Tags, Canonical URL pro Seite
- Sitemap: Automatische XML-Sitemap Generierung
- robots.txt: Konfigurierbar
- Performance: Lazy-Loading, Bild-Optimierung (WebP/AVIF), Critical CSS
- Lighthouse-Score: Integrierter Check mit Empfehlungen
2.2.7 Publishing¶
- Entwurf → Review → Veroeffentlicht: Workflow mit Freigabe (wenn Team)
- Versionierung: Jede Aenderung gespeichert, Rollback moeglich
- Scheduling: Seite zu Zeitpunkt X veroeffentlichen
- One-Click Deploy: Direkt auf xynap-Hosting (Domain, SSL, DNS automatisch)
- Preview-Links: Teilbare Links fuer Review vor Veroeffentlichung
2.3 XyNaP.mail — Integrierter Webmailer¶
Kein Roundcube! Eigener, vollintegrierter Webmailer als Teil der Plattform.
Kernfunktionen:
2.3.1 Postfach-Ansicht¶
- 3-Spalten Layout: Ordner | Nachrichtenliste | Vorschau (konfigurierbar)
- Unified Inbox: Alle Konten in einer Ansicht (oder pro Konto getrennt)
- Thread-Ansicht: E-Mail-Konversationen zusammengefasst (Gmail-Style)
- Lazy-Loading: Nachrichten werden on-demand geladen (kein "alle 5000 laden")
- Echtzeit-Updates: WebSocket-basiert, neue Mails erscheinen sofort
- Schnellaktionen: Archivieren, Loeschen, Markieren, Verschieben per Swipe/Shortcut
2.3.2 Composer (E-Mail schreiben)¶
- Rich-Text Editor: Formatierung, Bilder, Links, Tabellen
- Templates: Vorgefertigte E-Mail-Vorlagen mit Platzhaltern (→ CRM Canned Responses)
- Anhang-Upload: Drag & Drop, Cloud-Speicher-Integration (Datei aus XyNaP.cloud anhaengen)
- Signatur-Manager: Mehrere Signaturen, HTML-fähig, pro Konto
- Empfaenger-Vorschlaege: Autovervollstaendigung aus Kontakten (→ Shared Contacts)
- Spaeter senden: E-Mail zeitgesteuert versenden
- Lesebestaetigungen: Optional anfordern
2.3.3 Ordner & Organisation¶
- Standard-Ordner: Posteingang, Gesendet, Entwuerfe, Papierkorb, Spam, Archiv
- Benutzerdefinierte Ordner: Beliebig verschachtelt, per Drag & Drop sortierbar
- Labels/Tags: Farbige Labels (wie Gmail), mehrere pro Mail moeglich
- Sieve-Filter: Regelbasierte E-Mail-Sortierung (serversitig)
- Bedingungen: Absender, Betreff, Header, Groesse
- Aktionen: Verschieben, Label, Weiterleiten, Antwort, Loeschen
- Suche: Volltextsuche ueber Betreff, Inhalt, Absender, Anhangsnamen
- Erweiterte Suche: Datum, Groesse, Hat-Anhang, Ungelesen, Label
2.3.4 Kalender-Integration (→ Shared Component calendar)¶
- ICS-Einladungen: Automatisch erkannt, inline annehmen/ablehnen
- Meeting-Vorschlaege: Verfuegbare Zeiten aus Kalender vorschlagen
- Termin per Mail: Aus E-Mail direkt Kalendertermin erstellen
2.3.5 Kontakt-Integration (→ Shared Component contacts)¶
- Absender → Kontakt: E-Mail-Absender automatisch als Kontakt vorschlagen
- Kontakt-Sidebar: Bei E-Mail-Auswahl → Kontaktinfo, letzte Interaktionen, Deals (CRM)
- Kontaktgruppen: Mailing-Listen aus Kontakt-Segmenten
2.3.6 Mehrere Konten & Identitaeten¶
- Multi-Account: Mehrere Mailboxen in einem Interface
- Identitaeten: Pro Konto mehrere Absender-Adressen (+ Signatur)
- Aliase: Direkt im Webmailer verwalten
- Weiterleitung: Konfigurierbar pro Konto
2.3.7 Sicherheit¶
- Spam-Anzeige: Rspamd-Score sichtbar, Whitelist/Blacklist
- Verschluesselung: S/MIME und/oder PGP (Key-Management im Browser)
- Phishing-Warnung: Verdaechtige Links hervorheben
- 2FA: Login separat absicherbar
2.3.8 Technische Architektur¶
Browser ←WebSocket→ Platform-API ←IMAP/SMTP→ Dovecot/Postfix
↓
Redis (Mail-Cache)
↓
Kontakte/Kalender (DB)
2.4 XyNaP.cloud — Dateien & Groupware¶
Kernfunktionen:
2.4.1 Dateimanager¶
- Web-Interface: Explorer-Ansicht mit Ordnern, Breadcrumb, Grid/Liste
- Upload: Drag & Drop, Ordner-Upload, Fortschrittsanzeige
- Vorschau: Bilder, PDFs, Office-Dokumente, Videos, Audio inline
- Versionierung: Jede Datei-Aenderung als Version gespeichert, Rollback moeglich
- Papierkorb: 30 Tage Aufbewahrung, manuell leerbar
- Freigabe: Interne (Team) und externe Links (mit Passwort, Ablaufdatum, Download-Limit)
- Suche: Dateiname, Typ, Groesse, Datum, Tags
- Speicherkontingent: Pro Tenant konfigurierbar, Warnung bei 80%/90%
2.4.2 WebDAV-Server¶
- Standard-konform: WebDAV/CalDAV/CardDAV (RFC 4918, 4791, 6352)
- Client-Sync: macOS Finder, Windows Explorer, Nautilus, Cyberduck
- Mobile: DAVx5 (Android), iOS nativ
- Desktop-Sync: Eigener Sync-Client oder kompatibel mit Standards (Stretch-Goal)
2.4.3 Kalender (CalDAV) — Shared Component¶
- Monats/Wochen/Tagesansicht + Agenda-Liste
- Mehrere Kalender: Persoenlich, Team, Projekt — farbcodiert
- Termin-Erstellung: Quick-Add, Drag auf Zeitslot, Formular
- Einladungen: Teilnehmer hinzufuegen → iCal-Einladung per E-Mail (→ XyNaP.mail)
- Verfuegbarkeit: Frei/Belegt-Anzeige fuer Team-Mitglieder
- Wiederkehrende Termine: Taeglich, woechentlich, monatlich, jaehrlich + Ausnahmen
- Erinnerungen: Push, E-Mail, SMS (konfigurierbar pro Termin)
- Raum-/Ressourcen-Buchung: Besprechungsraeume, Fahrzeuge, Equipment
- CalDAV-Sync: Outlook, Thunderbird, Google Calendar, Apple Calendar
2.4.4 Kontakte (CardDAV) — Shared Component¶
- Kontaktkarten: Name, Firma, E-Mail(s), Telefon(e), Adresse(n), Foto, Notizen
- Custom Fields: Beliebige Zusatzfelder (Text, Datum, Link, Auswahl)
- Gruppen: Kontaktgruppen fuer Verteilerlisten
- CardDAV-Sync: iOS, Android (DAVx5), Thunderbird, Outlook
- vCard Import/Export: v3.0 und v4.0
2.4.5 Aufgaben — Shared Component¶
- Aufgabenliste: Personal und Team
- Felder: Titel, Beschreibung, Faelligkeitsdatum, Prioritaet, Zugewiesen an
- Status: Offen → In Bearbeitung → Erledigt
- Verknuepfungen: Aufgabe an Kontakt, Deal, Ticket, E-Mail, Datei
- Teilaufgaben: Checklisten innerhalb einer Aufgabe
- CalDAV VTODO: Sync mit Clients die Tasks unterstuetzen
2.5 XyNaP.host — Web-Hosting¶
Bereits weitgehend implementiert (M1+M2).
- Sites: nginx + PHP-FPM (8.4), vHost pro Site
- Datenbanken: MariaDB Shared-Hosting, phpMyAdmin pro Kunde
- SFTP/FTP: Dateizugang pro Site
- SSL: Automatisch via Let's Encrypt (DNS-01 oder HTTP-01)
- Domains: Custom Domains mit DNS-Management
- Deployment: Git-Push-Deploy (Stretch-Goal), Dateimanager (→ XyNaP.cloud)
- Statistiken: Access-Logs, Traffic, Speicherverbrauch
- Backups: Taeglich automatisch, Self-Service Restore
CMS-Integration: - XyNaP.cms "Publizieren" deployed direkt auf XyNaP.host - Statische Assets aus CMS werden in Cloud-Speicher abgelegt - Domain + SSL automatisch provisioniert
2.6 XyNaP.voice — Telefonie (bereits vorhanden)¶
FreeSwitch + SIP-Agent, wird als Modul eingebunden.
- SIP-Trunks: Provider-Anbindung (1&1, Plusnet, etc.)
- Nebenstellen: Interne Extensions
- IVR: Sprachmenue-Builder (→ Workflow-Engine)
- Voicemail: Aufnahme → E-Mail (→ XyNaP.mail)
- Call-Logging: Anrufe in Kontakt-Historie (→ CRM)
- Click-to-Call: Aus CRM/Kontakten direkt anrufen
- WebRTC: Browser-Telefonie ueber LiveKit
3. Shared Components (Kern-System)¶
Diese Komponenten existieren genau einmal und werden von allen Modulen genutzt.
3.1 Kontakte (shared.contacts)¶
┌─────────────────────────────────┐
│ Contact │
├─────────────────────────────────┤
│ id, tenant_id │
│ type: person | organization │
│ display_name │
│ first_name, last_name │
│ company_name (wenn org) │
│ emails[] │
│ phones[] │
│ addresses[] │
│ custom_fields: JSON │
│ tags[] │
│ avatar_url │
│ notes │
│ source: manual|import|web|api │
│ owner_id (User) │
│ created_at, updated_at │
├─────────────────────────────────┤
│ Relationen: │
│ → ContactRelation (n:n) │
│ → Deal (1:n, CRM) │
│ → Ticket (1:n, CRM) │
│ → Activity (1:n) │
│ → MailThread (1:n, Mail) │
│ → CalendarEvent (n:n) │
│ → File (n:n, Cloud) │
│ → Task (1:n) │
└─────────────────────────────────┘
Genutzt von: CRM (Deals, Pipeline), Mail (Absender-Erkennung, Sidebar), Cloud (Kontakt-Dateien), Voice (Anrufer-Erkennung), CMS (Formulare → Kontakt)
3.2 Kalender (shared.calendar)¶
┌─────────────────────────────────┐
│ CalendarEvent │
├─────────────────────────────────┤
│ id, tenant_id, calendar_id │
│ uid (iCal UID) │
│ summary, description │
│ dtstart, dtend, all_day │
│ rrule (Wiederholung) │
│ location │
│ status: confirmed|tentative| │
│ cancelled │
│ organizer_id, attendees[] │
│ reminders[] │
│ color │
│ linked_contact_id │
│ linked_deal_id │
│ linked_task_id │
└─────────────────────────────────┘
Genutzt von: CRM (Meeting mit Lead), Mail (ICS-Einladungen), Cloud (CalDAV-Sync), Voice (Rueckruf-Termin)
3.3 Dateien (shared.files)¶
┌─────────────────────────────────┐
│ File │
├─────────────────────────────────┤
│ id, tenant_id, parent_folder_id │
│ name, mime_type, size_bytes │
│ storage_path │
│ version (int) │
│ owner_id │
│ shared_with[] (users/links) │
│ tags[] │
│ linked_contact_id │
│ linked_deal_id │
│ linked_ticket_id │
│ checksum_sha256 │
│ is_trashed, trashed_at │
└─────────────────────────────────┘
Genutzt von: CRM (Angebots-PDFs, Vertraege), Mail (Anhaenge aus Cloud), CMS (Medien-Bibliothek), Host (Dateibrowser)
3.4 Aufgaben (shared.tasks)¶
┌─────────────────────────────────┐
│ Task │
├─────────────────────────────────┤
│ id, tenant_id │
│ title, description │
│ status: open|progress|done │
│ priority: low|medium|high|urgent│
│ due_date │
│ assigned_to (User) │
│ created_by (User) │
│ linked_contact_id │
│ linked_deal_id │
│ linked_ticket_id │
│ subtasks[] (Checkliste) │
│ tags[] │
└─────────────────────────────────┘
Genutzt von: CRM (Follow-up), Mail ("Aus E-Mail → Aufgabe"), Cloud (CalDAV VTODO), alle Module
3.5 Workflows (shared.workflows)¶
Erweitert die bestehende Workflow-Engine (M2).
Architektur:
Event-Bus (Redis Streams)
↓
Workflow-Engine
↓
├── Trigger evaluieren
├── Conditions pruefen
├── Actions ausfuehren
└── Logging (Audit)
- Event-Bus: Jedes Modul publiziert Events (
contact.created,mail.received,deal.stage_changed) - Trigger: Workflow lauscht auf Events, evaluiert Conditions
- Actions: Modul-uebergreifend (CRM-Action in Mail-Trigger, etc.)
- Visual Builder: Drag & Drop Flow-Editor (bereits vorhanden, erweitern)
- Templates: Vorgefertigte Workflows zum Importieren
3.6 Suche (shared.search)¶
- Globale Suche: Kontakte, E-Mails, Dateien, Deals, Tickets, Kalender, Aufgaben
- Volltextindex: PostgreSQL/ElasticSearch fuer schnelle Suche ueber alle Entitaeten
- Facetten: Filtern nach Typ, Modul, Datum, Besitzer
- Keyboard-Shortcut: Cmd+K / Ctrl+K oeffnet Suchleiste
3.7 Benutzer & Teams (shared.users)¶
- Tenant-User: Mitarbeiter innerhalb eines Tenants
- Rollen: Admin, Manager, Mitarbeiter, Extern (pro Tenant konfigurierbar)
- Teams: Gruppen von Usern (Sales-Team, Support-Team)
- Berechtigungen: Pro Modul und pro Entitaet (eigene Deals vs. alle Deals)
4. Multi-Tenant Architektur¶
4.1 Tenant-Modell¶
┌─────────────────────────────────┐
│ Tenant │
├─────────────────────────────────┤
│ id │
│ slug (subdomain) │
│ name (Firmenname) │
│ domain: <slug>.xynap.cloud │
│ custom_domain (optional) │
│ owner_id (Admin-User) │
│ plan: starter|business|enterprise│
│ modules_enabled: ["crm","mail"] │
│ storage_quota_gb │
│ user_limit │
│ status: trial|active|suspended │
│ trial_ends_at │
│ created_at │
└─────────────────────────────────┘
4.2 Modul-Aktivierung¶
# Tenant hat Module als Array:
tenant.modules_enabled = ["crm", "mail", "cloud"]
# Middleware prueft bei jedem Request:
@require_module("crm")
async def get_deals(tenant: Tenant):
...
# Sidebar zeigt nur aktivierte Module
# Shared Components sind IMMER verfuegbar
4.3 Datenisolierung¶
- DB-Ebene: Jede Tabelle hat
tenant_id(Foreign Key) - Middleware: Automatischer Tenant-Filter auf allen Queries
- Dateisystem:
/var/lib/xynap/tenants/<tenant_id>/files/ - Mail: Virtuelle Domains pro Tenant (bestehender Mail-Stack)
- Backups: Pro Tenant exportierbar (DSGVO Art. 20 Datenportabilitaet)
4.4 Subdomain-Routing¶
*.xynap.cloud → Traefik
→ Wildcard-SSL (Let's Encrypt DNS-01)
→ Host-Header → Tenant-Slug extrahieren
→ Platform-API: X-Tenant-Slug Header
→ Middleware: Slug → Tenant-ID resolve + Cache (Redis)
4.5 Custom Domains¶
kunde.de → CNAME → firma.xynap.cloud
→ Traefik: On-Demand TLS (Let's Encrypt HTTP-01)
→ custom_domain Lookup → Tenant-ID
5. Buchungsmodell¶
5.1 Modulare Preisstruktur¶
| Modul | Starter | Business | Enterprise |
|---|---|---|---|
| XyNaP.crm | Kontakte, Pipeline, Berichte | + Workflows, Scoring, Mahnwesen | + API, Webhooks, Custom Fields |
| XyNaP.cms | 5 Seiten, Templates | + Unbegrenzt, Import, SEO | + Multi-Site, Custom Blocks |
| XyNaP.mail | 5 Postfaecher, 5GB | + 25 Postfaecher, 25GB, Filter | + Unbegrenzt, S/MIME |
| XyNaP.cloud | 10GB, WebDAV | + 100GB, Versionierung | + 1TB, Audit-Log |
| XyNaP.host | 1 Site, 1GB | + 5 Sites, 10GB, Staging | + Unbegrenzt, Git-Deploy |
| XyNaP.voice | 1 Trunk, 3 Ext. | + 5 Trunks, IVR | + Unbegrenzt, Call-Center |
5.2 Addons (zusaetzlich buchbar)¶
| Addon | Einheit | Preis |
|---|---|---|
| Extra Speicher | pro 10 GB | X EUR/Monat |
| Extra Postfaecher | pro 5 Stk. | X EUR/Monat |
| Extra Benutzer | pro User | X EUR/Monat |
| Custom Domain | pro Domain | X EUR/Monat |
| Backup-Retention | 90/365 Tage | X EUR/Monat |
| Priorisierter Support | Flat | X EUR/Monat |
5.3 Paket-Bundles¶
| Bundle | Module | Rabatt |
|---|---|---|
| Office | mail + cloud + calendar + contacts | 20% |
| Sales | crm + mail + voice | 25% |
| Website | cms + host + mail | 20% |
| All-in-One | Alle Module | 35% |
6. DB-Schema Erweiterung¶
6.1 Neue Tabellen (Kern)¶
-- Tenant (ersetzt/erweitert Project)
tenants (
id, slug UNIQUE, name,
owner_id → users,
modules_enabled JSON, -- ["crm","mail","cloud"]
plan VARCHAR, -- starter|business|enterprise
storage_quota_gb INT,
user_limit INT,
status VARCHAR, -- trial|active|suspended|cancelled
trial_ends_at TIMESTAMP,
custom_domain VARCHAR,
settings JSON,
created_at, updated_at
)
-- Modul-Definitionen (Admin)
modules (
id, slug UNIQUE, -- crm, cms, mail, cloud, host, voice
name, description,
icon, color,
is_active BOOL,
dependencies JSON, -- ["contacts","calendar"] (shared components)
sort_order INT
)
-- Modul-Plaene (Preise pro Stufe)
module_plans (
id, module_id → modules,
tier VARCHAR, -- starter|business|enterprise
price_monthly DECIMAL,
price_yearly DECIMAL,
limits JSON, -- {"users": 5, "storage_gb": 10, ...}
features JSON, -- ["workflows","scoring","mahnwesen"]
sort_order INT
)
-- Tenant-Module (gebuchte Module)
tenant_modules (
id, tenant_id → tenants,
module_id → modules,
plan_id → module_plans,
status VARCHAR, -- active|trial|suspended
activated_at TIMESTAMP,
trial_ends_at TIMESTAMP
)
-- Tenant-Addons
tenant_addons (
id, tenant_id → tenants,
addon_type VARCHAR,
quantity INT,
price_monthly DECIMAL,
activated_at TIMESTAMP
)
6.2 Shared Component Tabellen¶
-- Kontakte
contacts (
id, tenant_id, type, display_name,
first_name, last_name, company_name,
emails JSON, phones JSON, addresses JSON,
custom_fields JSON, tags JSON,
avatar_url, notes, source,
owner_id → users,
created_at, updated_at
)
-- Kontakt-Beziehungen
contact_relations (
id, tenant_id,
contact_a_id → contacts,
contact_b_id → contacts,
relation_type VARCHAR, -- employee_of, partner, supplier, ...
role VARCHAR
)
-- Kalender
calendars (
id, tenant_id, owner_id → users,
name, color, is_default BOOL,
caldav_url VARCHAR
)
-- Kalender-Events
calendar_events (
id, tenant_id, calendar_id → calendars,
uid VARCHAR UNIQUE,
summary, description, location,
dtstart TIMESTAMP, dtend TIMESTAMP, all_day BOOL,
rrule TEXT,
status VARCHAR,
organizer_id → users,
linked_contact_id, linked_deal_id,
reminders JSON,
created_at, updated_at
)
-- Event-Teilnehmer
event_attendees (
id, event_id → calendar_events,
user_id → users (nullable),
email VARCHAR,
status VARCHAR -- accepted|declined|tentative|needs-action
)
-- Dateien
files (
id, tenant_id, parent_id → files (nullable),
is_folder BOOL,
name, mime_type, size_bytes,
storage_path VARCHAR,
version INT DEFAULT 1,
owner_id → users,
checksum_sha256 VARCHAR,
tags JSON,
is_trashed BOOL, trashed_at TIMESTAMP,
linked_contact_id, linked_deal_id,
created_at, updated_at
)
-- Datei-Versionen
file_versions (
id, file_id → files,
version INT,
storage_path VARCHAR,
size_bytes BIGINT,
created_by → users,
created_at
)
-- Datei-Freigaben
file_shares (
id, file_id → files,
share_type VARCHAR, -- user|link
target_user_id → users (nullable),
token VARCHAR UNIQUE (fuer Links),
password_hash VARCHAR,
expires_at TIMESTAMP,
max_downloads INT,
permissions VARCHAR, -- read|write
created_at
)
-- Aufgaben
tasks (
id, tenant_id,
title, description,
status VARCHAR,
priority VARCHAR,
due_date DATE,
assigned_to → users,
created_by → users,
linked_contact_id, linked_deal_id, linked_ticket_id,
subtasks JSON,
tags JSON,
completed_at TIMESTAMP,
created_at, updated_at
)
-- Notizen
notes (
id, tenant_id,
content TEXT,
author_id → users,
linked_contact_id, linked_deal_id, linked_ticket_id,
is_pinned BOOL,
created_at, updated_at
)
-- Aktivitaeten (Timeline)
activities (
id, tenant_id,
type VARCHAR, -- email|call|meeting|note|task|deal_update|...
summary TEXT,
details JSON,
user_id → users,
contact_id → contacts,
deal_id, ticket_id, -- optional Links
occurred_at TIMESTAMP,
created_at
)
-- Tags (global, wiederverwendbar)
tags (
id, tenant_id,
name VARCHAR, color VARCHAR,
UNIQUE(tenant_id, name)
)
6.3 CRM-spezifische Tabellen¶
-- Pipelines
pipelines (
id, tenant_id,
name, is_default BOOL,
sort_order INT
)
-- Pipeline-Phasen
pipeline_stages (
id, pipeline_id → pipelines,
name, color,
probability INT, -- 0-100%
rotting_days INT, -- Warnung nach X Tagen
sort_order INT
)
-- Deals
deals (
id, tenant_id,
title,
pipeline_id → pipelines,
stage_id → pipeline_stages,
contact_id → contacts,
organization_id → contacts,
owner_id → users,
value DECIMAL, currency VARCHAR,
expected_close_date DATE,
probability INT,
status VARCHAR, -- open|won|lost
lost_reason TEXT,
won_at TIMESTAMP, lost_at TIMESTAMP,
source VARCHAR,
tags JSON,
custom_fields JSON,
created_at, updated_at
)
-- Deal-Positionen
deal_items (
id, deal_id → deals,
product_name VARCHAR,
description TEXT,
quantity DECIMAL,
unit_price DECIMAL,
discount_percent DECIMAL,
total DECIMAL
)
-- Lead-Scores
lead_scores (
id, contact_id → contacts,
tenant_id,
score INT DEFAULT 0,
score_history JSON, -- [{date, delta, reason}]
updated_at
)
-- Lead-Score Regeln
lead_score_rules (
id, tenant_id,
name, condition JSON,
score_delta INT,
is_active BOOL
)
-- E-Mail Sequences
email_sequences (
id, tenant_id,
name, description,
is_active BOOL,
created_by → users
)
-- Sequence Steps
sequence_steps (
id, sequence_id → email_sequences,
step_order INT,
delay_hours INT,
action VARCHAR, -- send_email|wait|condition
template_id, config JSON
)
-- Sequence Enrollments
sequence_enrollments (
id, sequence_id → email_sequences,
contact_id → contacts,
current_step INT,
status VARCHAR, -- active|completed|paused|bounced
enrolled_at, completed_at
)
-- Angebote
quotes (
id, tenant_id, deal_id → deals,
contact_id → contacts,
quote_number VARCHAR UNIQUE,
status VARCHAR, -- draft|sent|viewed|accepted|declined|expired
items JSON,
subtotal DECIMAL, tax DECIMAL, total DECIMAL,
valid_until DATE,
sent_at, viewed_at, accepted_at,
pdf_file_id → files,
created_at, updated_at
)
-- Rechnungen
invoices (
id, tenant_id, deal_id, quote_id,
contact_id → contacts,
invoice_number VARCHAR UNIQUE,
status VARCHAR, -- draft|sent|paid|overdue|cancelled
items JSON,
subtotal DECIMAL, tax_rate DECIMAL, tax DECIMAL, total DECIMAL,
due_date DATE,
paid_at TIMESTAMP, paid_amount DECIMAL,
dunning_level INT DEFAULT 0, -- 0=keine, 1=Erinnerung, 2=Mahnung, 3=letzte
dunning_sent_at TIMESTAMP,
pdf_file_id → files,
zugferd_xml TEXT,
created_at, updated_at
)
-- SLA-Definitionen
sla_policies (
id, tenant_id,
name,
priority VARCHAR,
first_response_hours INT,
resolution_hours INT,
business_hours_only BOOL
)
-- CSAT-Bewertungen
csat_ratings (
id, tenant_id,
ticket_id, contact_id,
rating INT, -- 1-5
comment TEXT,
created_at
)
6.4 Webmailer-Tabellen¶
-- Mail-Identitaeten (pro User, mehrere Absender)
mail_identities (
id, tenant_id, user_id → users,
email VARCHAR,
display_name VARCHAR,
signature_html TEXT,
is_default BOOL,
mail_account_id → mail_accounts
)
-- Sieve-Filter
mail_filters (
id, tenant_id, user_id → users,
name, is_active BOOL,
priority INT,
conditions JSON, -- [{field, operator, value}]
actions JSON, -- [{type, target}]
stop_processing BOOL
)
-- Mail-Labels
mail_labels (
id, tenant_id, user_id → users,
name, color VARCHAR,
sort_order INT
)
-- E-Mail-Vorlagen
mail_templates (
id, tenant_id,
name, subject, body_html,
placeholders JSON, -- [{key, label, default}]
category VARCHAR,
is_shared BOOL,
created_by → users
)
7. Modul-Abhaengigkeiten & Shared-Component Matrix¶
contacts calendar files tasks workflows search
XyNaP.crm x x x x x x
XyNaP.cms x x
XyNaP.mail x x x x x x
XyNaP.cloud x x x x x
XyNaP.host x x
XyNaP.voice x x x x x
Regel: Wenn ein Kunde mindestens EIN Modul bucht, erhaelt er automatisch alle benoetigen Shared Components. Kontakte/Kalender/Dateien/Aufgaben sind nie separat buchbar — sie kommen mit jedem Modul.
8. Technischer Stack¶
| Schicht | Technologie |
|---|---|
| Frontend | Vue 3.5 + TypeScript + Vite + Tailwind 4 |
| Backend | FastAPI + SQLAlchemy 2.0 async + Alembic |
| Datenbank | MariaDB 11.4 (Multi-Tenant, tenant_id Filter) |
| Cache | Redis 7 (Sessions, Tenant-Cache, Mail-Cache, Event-Bus) |
| Dateispeicher | Lokales Filesystem + S3-kompatibel (MinIO, Stretch-Goal) |
| Postfix + Dovecot + Rspamd (bestehend) | |
| Kalender/Kontakte | Eigene CalDAV/CardDAV Implementierung (Radicale als Referenz) |
| Suche | MariaDB Fulltext (Start) → Meilisearch/ES (Scale) |
| Event-Bus | Redis Streams |
| Reverse-Proxy | Traefik v3 (Wildcard-SSL, Tenant-Routing) |
| Auth | JWT + RBAC (bestehend, erweitert um Tenant-Kontext) |
9. Implementierungs-Reihenfolge¶
Phase 1: Foundation (M3)¶
- Tenant-System (DB, Middleware, Subdomain-Routing)
- Shared Components: Kontakte, Aufgaben, Notizen, Aktivitaeten, Tags
- XyNaP.mail (Webmailer — IMAP-Proxy, Composer, Filter)
- Modul-Aktivierung & Berechtigungen
Phase 2: CRM Core (M3-M4)¶
- Pipeline & Deals
- Lead-Management & Scoring
- Angebote & Rechnungen (PDF-Generator)
- CRM-Workflows (Event-Bus + Actions)
Phase 3: Groupware (M4)¶
- XyNaP.cloud (Dateimanager, WebDAV)
- Kalender (CalDAV, Event-Management)
- Kontakte (CardDAV-Server)
- Aufgaben (CalDAV VTODO)
Phase 4: CMS (M4-M5)¶
- Grid-Layout Editor
- Block-System & Komponenten
- Template-Engine & Themes
- Website-Import
- Publishing & Deploy
Phase 5: Integration (M5)¶
- Modul-uebergreifende Workflows
- Globale Suche
- Reporting & Dashboards
- API & Webhooks (fuer Drittanbieter)
10. Abgrenzung: Was xynap NICHT ist¶
- Kein ERP — Keine Lagerverwaltung, Produktion, Logistik
- Kein Buchhaltungsprogramm — DATEV-Export ja, aber keine Finanzbuchhaltung
- Kein Projektmanagement-Tool — Aufgaben ja, aber kein Gantt/Agile Board (Stretch-Goal)
- Kein Social Media Tool — Keine Social-Media-Planung/Automatisierung
- Keine eigene E-Mail-Zustellung — Nutzt Postfix/Dovecot, kein eigener MTA