Zum Inhalt

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:

  1. 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")
    

  2. Deal-Rotation-Warnung:

    Trigger: deal.rotting(days=14)
    → notify(owner, "Deal stagniert seit 14 Tagen")
    → wait(3 days)
    → condition(deal.stage_changed?)
      → NO: notify(manager, "Deal eskaliert"), assign_owner(manager)
    

  3. After-Sales:

    Trigger: deal.won
    → create_task(owner, "Onboarding-Call planen", due=+2d)
    → wait(30 days)
    → send_email("Wie zufrieden sind Sie? CSAT-Link")
    → wait(90 days)
    → create_task(owner, "Upsell-Chance pruefen")
    


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)
- IMAP-Proxy: Platform-API spricht IMAP zu Dovecot, cached Folder-Trees in Redis - SMTP-Relay: E-Mail-Versand ueber Postfix (SPF, DKIM, DMARC automatisch) - Push: IMAP IDLE → WebSocket Push an Client - Offline: Service Worker fuer grundlegende Offline-Lese-Faehigkeit (Stretch-Goal)


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)
Mail 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)

  1. Tenant-System (DB, Middleware, Subdomain-Routing)
  2. Shared Components: Kontakte, Aufgaben, Notizen, Aktivitaeten, Tags
  3. XyNaP.mail (Webmailer — IMAP-Proxy, Composer, Filter)
  4. Modul-Aktivierung & Berechtigungen

Phase 2: CRM Core (M3-M4)

  1. Pipeline & Deals
  2. Lead-Management & Scoring
  3. Angebote & Rechnungen (PDF-Generator)
  4. CRM-Workflows (Event-Bus + Actions)

Phase 3: Groupware (M4)

  1. XyNaP.cloud (Dateimanager, WebDAV)
  2. Kalender (CalDAV, Event-Management)
  3. Kontakte (CardDAV-Server)
  4. Aufgaben (CalDAV VTODO)

Phase 4: CMS (M4-M5)

  1. Grid-Layout Editor
  2. Block-System & Komponenten
  3. Template-Engine & Themes
  4. Website-Import
  5. Publishing & Deploy

Phase 5: Integration (M5)

  1. Modul-uebergreifende Workflows
  2. Globale Suche
  3. Reporting & Dashboards
  4. 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