Studios in MotionProjektkartei

SIMticketsystem

Aktiv

Eigenes Ticketsystem (Teamleader-Ablösung): Mailimport und Versand, Personen, Firmen, Mailverlauf, KI-Formulierer, Zeiterfassung, Kundenabgleich mit der Zentrale

Bereich
Zentrale
Start
30.05.2026
Zuletzt
10.10.2026
Am Zug
René
Nächster Schritt, René

Ticket #851 (Thomas, Life X) einer Firma zuordnen und beantworten; Commit e12f4c7 beim nächsten gesammelten Deploy pushen

Worum es geht

Das SIMticketsystem ist unser eigenes Support-Ticketsystem. Aus Mails an service@ (seit 16.07. über das Sammelpostfach tickets@) werden Tickets, die wir beantworten, zuordnen und abrechnen. Es löst Teamleader Stück für Stück ab: Personen und Firmen, Mailverlauf, Zeiterfassung mit Abrechnung, Rechnungen (eigene Akte: rechnungsmodul) und Übergabe an die Zentrale für Website-Aufträge (eigene Akte: website-auftraege-pipeline). Die Triage per KI läuft über OpenRouter (eigene Akte: ticket-triage).

Stand

  • Live auf ticketsystem.sim-tools.cloud als zwei Coolify-Apps aus dem Team-Repo: Backend (Fastify, Postgres) und Frontend (Vue 3, Vite, Tailwind, nginx). Letzter ausgelieferter Stand ist 3371e69 (08.10.).
  • Mail: IMAP-Import von tickets@ alle 60 s, Versand per SMTP als service@ (seit 13.07.), Threading über [SIM-id] und Header, Weiterleitungs-Erkennung, Beteiligte als sichtbares CC, optional HTML-Fassung mit Logo und Blindkopie (05.10.), Betreff änderbar.
  • Personen: Bereich mit Suche, mehreren Firmen und mehreren E-Mail-Adressen je Person, Zusammenführen von Dubletten, E-Mail-Verlauf mit Reiter „Gesendet“, „Nachhaken“ aus einer Mail ohne Ticket (01.10.).
  • KI: Antwort-Formulierer im Ticket und im E-Mail-Dialog, Assistent mit Werkzeugen (nur Vorschläge mit Bestätigungskarte), Stil-Lernen aus Korrekturen (seit 20.08.).
  • Zeiterfassung: Wochenansicht, Projekte, Stundensätze, Abrechnung je Firma, einzelne Positionen abrechnen oder nicht berechnen, monatliche Zeitberichte per Mail, Excel und CSV, Umsatz-Übersicht für Berechtigte, externer Mitarbeiter Udo (09/2026 importiert).
  • Zentrale: Hub-Modul tickets.ts (Nav Betrieb › Tickets, Karte in der Kundenakte), automatischer Kunden-Abgleich Firma und Ansprechpartner (Hub v0.318.0, 18.09.).
  • Offene Arbeit im Repo: Commit e12f4c7 (10.10., Herausgeber-Artikel für mitfitINSIGHT als Ereignis an die Zentrale) liegt lokal, ist nicht gepusht.

Offen

  • René Ticket #851 (Thomas, Life X, Agilea-Instanztrennung 20.10., Verträge über die Website bis 06.11.) einer Firma zuordnen (Kontakt 1404 ohne Firma, Life X Firmen 201 und 203 ohne Domain) und Thomas antworten.
  • ich Commit e12f4c7 beim nächsten gesammelten Deploy pushen (Push ist Deploy, Go von René abwarten).
  • René Preview-Mail an Tine (info@injoy-schwerin.de, 24.09.) kam unzustellbar zurück, kein erneuter Versand an info@newcircles-schwerin.de gespeichert; Frank Mäschig hat auf keine der drei Mails geantwortet.
  • ich Gesendet-Ordner von service@ synchronisieren, damit Outlook-Antworten im Verlauf stehen (vorgemerkt 08.10.).
  • ich ersten echten CC-Versand an Beteiligte beobachten (bisher nicht gesehen).
  • ich Stil-Regeln im Admin beobachten, sobald echte Korrekturen vorliegen (Karte „KI-Stilregeln“).
  • René sim-tools.cloud in die Einstellung internal_domains aufnehmen (04.09., Stand heute prüfen).
  • René bei by Charlie info@bycharlie.de als weitere Adresse von Charleen Strunk hinterlegen (18.09., Stand heute prüfen).
  • ich Hub-Härtung: Port 3000 des Backends war am 02.08. öffentlich erreichbar (Stand prüfen).
  • Kleinigkeiten ohne Frist: Escape schließt Modale nicht, KI-Analyse-Karte sitzt im Ticket über dem Verlauf, Heller Modus mit Eyebrow-Texten auf dem Hintergrundbild schlecht lesbar (alles bewusst nicht ohne Renés Go angefasst).

Entscheidungen und Regeln

  • 2026-10-08: Deploys sammeln, etwa einmal am Tag, nicht nach jedem Fix. Ausnahme nur bei akutem Bedarf nach Rücksprache.
  • 2026-10-01: Zeitstempel überall in Berliner Zeit. Alte Zeiten vor dem 01.10.2026 (12:51 Uhr) bleiben in UTC, René will sie nicht umgerechnet haben.
  • 2026-09-24: Kundenmails immer WEITERLEITEN (WG:), nie beantworten. Anhänge an einer Antwort erreichen das System nie.
  • 2026-09-18: Jede Personensuche per Adresse geht über KONTAKT_PER_EMAIL aus services/contactEmails.js, nie nur über contacts.email.
  • 2026-09-15: Mitarbeiter-Notizen stehen als eigene Karte im Ticket, zwei Kacheln unter dem Kopf (Renés Wunsch).
  • 2026-08-20: Auto-Deploy der beiden Coolify-Apps ist AN. Ein Push auf main geht sofort live, deshalb Freigabe vor dem Push und danach Image-Tag und /api/health prüfen.
  • 2026-08-11: Eigene Postfächer kommen nie in den Verteiler (Schleifengefahr), Kollegen aus unserer Domain bleiben drin, Versand als sichtbares CC. Nie eine Firma raten, nie eine vorhandene Person überschreiben.
  • 2026-08-05: Rechnungen werden automatisch dem Mitarbeiter „Buchhaltung“ zugewiesen. Regeln mit einer Freemail-Domain oder der eigenen Domain als einzigem Merkmal treffen nie.
  • 2026-08-02: Zusammenspiel mit der Zentrale in zwei Stufen statt Verschmelzung. Kein Design-Angleich, René mag den eigenen Look (Token-Paket liegt in /root/transfer/sim-design-tokens).
  • 2026-07-16: Posteingang ist tickets@, Versand bleibt service@. Cursor mail_sync_state.last_uid_seen immer erst NACH dem Neustart zurücksetzen.
  • 2026-07-12: LLM ist OpenRouter, nicht Anthropic (Env OPENROUTER_API_KEY, Modell über AI_TRIAGE_MODEL).
  • Technik: Entfernen läuft über POST statt DELETE (Fastify weist DELETE ohne Body ab). Overlays nie mit @click.self schließen, sondern mit v-overlay-close. @click.stop nie auf die Tabellenzelle. Neue Bausteine auf Theme-Variablen bauen und beide Modi ansehen. Frontend-Build nur mit Node 22 (Host hat Node 18).

Verlauf

  1. Commit e12f4c7: Mails von René oder Dominik mit „Artikel … Insight“ im Betreff werden als Ereignis an die Zentrale gemeldet (Herausgeber-Artikel für mitfitINSIGHT). Lokal, nicht gepusht.
  2. Ticket #717 (Thomas, Life X): neue Mail landete über Outlook-References im alten Ticket. Abgespalten als Ticket #851, Code-Fix 3371e69 (passtZumFaden, Folge-Analyse ai_triage_folge) auf Renés Go („alles ausrollen“) um ca. 05:55 UTC gepusht.
  3. dcd15cd und 734f24b: frei geschriebene Mails optional als gestaltete HTML-Fassung mit Logo und mit Blindkopie. Erster Einsatz: neun Nachfass-Mails an die Golf-Circle-Clubs (Tickets #815 bis #823).
  4. Rechnungsmodul bekommt Zugriffsliste, „Buchung zurückziehen“ und Dauerrechnungs-Text (Details in der Akte rechnungsmodul). Zeit-Import des externen Mitarbeiters Udo (09/2026, 136 h, 36 Einträge, Mitarbeiter 173) mit Skript zeit-import-extern.sh.
  5. aea92b2 E-Mail-Verlauf auf der Personenseite und Reiter „Gesendet“; 97a526e „Nachhaken“; bcdb4b6 Datenbank-Sitzung in Europe/Berlin.
  6. 6ad7cbc Kopfleiste umgebaut: runder blauer Plus-Knopf mit „Ticket erstellen“ und „Zeit erfassen“, E-Mail unter Einstellungen.
  7. ac846d5 Betreff ändern (PATCH /subject) und Auftrags-Dialog mit Anweisungsfeld für den Website-Agenten (Hub v0.343.1).
  8. df4a781 KI-Formulierer auch im E-Mail-Dialog. Vorfall Ticket #762 (SecData): Antwort statt Weiterleitung, Anhänge fehlten.
  9. 8e5d05e mehrere E-Mail-Adressen je Person und Zusammenführen live; a7a3ccd Hinweistext Kursplan.
  10. 038e236 Kontaktauswahl für Beteiligte live. Hub v0.318.0 (sim-ops 3c23058): neue Kunden bekommen Firma und Ansprechpartner automatisch im Ticketsystem, Knopf „Mit Ticketsystem abgleichen“ für Bestandskunden.
  11. bf12968 und f76d826 Mitarbeiter-Notizen im Ticket.
  12. 4d4e503 E-Mail von der Personenseite und weitere Firmen je Person (Anlass Frank Mäschig, InForm und Fit501).
  13. 488207c Ticket #689 (Balance Kassel): umgebrochene Von-Zeile in Outlook und Betreff-Regel mit Kombination mehrerer Wörter.
  14. dd87e83 Kunde im Betreff erkennen (services/subjectCompany.js), Anlass Ticket #654 (K5).
  15. 536c45a einzelne Positionen abrechnen oder „nicht berechnen“.
  16. 0328834 Gesamtstunden in der CSV, Excel-Export und versteckte Umsatz-Übersicht (Zugriff über revenue_dashboard_employee_ids).
  17. afd630b monatliche Zeitberichte je Kunde, August-Berichte an pfeiffer@ versendet (acht Kunden).
  18. Ausfall „Oberfläche lädt, keine Inhalte“ (IMAP-Fehler ohne Listener und nginx mit veralteter Backend-IP), Fix ebe1cfb.
  19. a9bb276 Modale schließen nicht mehr beim Markieren im Betreff; 910faae Weiterleitungen werden von Regel 56 nicht mehr verschluckt.
  20. a338cd4 Listenvorschau zeigt die neueste Kundennachricht.
  21. edd9978 Stil-Lernen aus Antwort-Korrekturen, 431b6e4 ganze Listenzeile klickbar. Abschluss dieses Tages: Stand 20.08.
  22. 3186fa9 Bereich „Personen“ (1.744 Personen, 1.244 ohne Firma), 3a86a24 Beteiligte in Kopie.
  23. 0fcb025 Weiterleitungs-Erkennung und PATCH /tickets/:id/sender; 491e9b8 neueste Nachricht oben im Ticket.
  24. 3fb4737 Absender-Spalte, Auto-Zuweisung bei erster aktiver Aktion, Kontakt-Zuordnung, Compose-Dialog mit Vorlagen.
  25. 67da36f Rechnungen automatisch an Buchhaltung, Freemail-Sicherung bei Absender-Regeln.
  26. Hub v0.69.0 (dae1c33) bindet das Ticketsystem an die Zentrale an; Repo-Freigabe für Agenten durch René; fa48a2c Zeiterfassungs-UX-Paket; 516d2f6 Abrechnung je Firma mit CSV.
  27. Repo-Konsolidierung: Org-Repo studios-in-motion-team ist die einzige aktive Quelle (02b5a3f), Coolify auf die Org-GitHub-App umgestellt.
  28. Mail-Quelle auf tickets@ umgestellt (676fadc); 336 alte Tickets auf Wunsch gelöscht (487 auf 151, vorher gesichert).
  29. SMTP-Versand live (692b768) und Threading (c88a830).
  30. OpenRouter-Triage, Team-Chat, Zeiterfassung (8272239), Stundensätze, KI-Assistent; Repo-Zugang wiederhergestellt.
  31. erster Commit im Repo.

Wo liegt was

  • Arbeitskopie: /root/system-sim-ticketsystem (Push auf main = Coolify-Deploy beider Apps, Push in der Form git -C /root/system-sim-ticketsystem push, dafür gibt es eine dauerhafte Permission-Regel). Remote über den SSH-Alias gh-ticket-backup.
  • Alte Kopien: Volume des Hermes-Ticketagenten (…_sim-ticketsystem-data/_data/workspace, HEAD 93ca66d, hinter origin/main, nicht maßgeblich); /root/sim-ticketsystem-data ist eine Restkopie ohne Git und ohne Code. Vollsicherung der Historie vom 12.07.: /root/transfer/ticketsystem-notsicherung-20260712/system-sim-ticketsystem-full.bundle.
  • Container: Backend backend-g5qsxkkptephybb6gvmklma2-* (Coolify-App-ID 2, Port 3000), Frontend nginx (App-ID 4). Datenbank Postgres im Supabase-Container (Host 10.0.5.1). Manuelles Deploy über docker exec coolify php artisan tinker mit queue_application_deployment, danach Image-Tag und /api/health prüfen. Die Coolify-API ist vom Host aus gesperrt.
  • Wichtige Env-Namen (Coolify, Backend): OPENROUTER_API_KEY, AI_TRIAGE_MODEL, MAIL_IMAP_*, MAIL_SMTP_*, MAIL_ADDRESS, MAIL_SEND_ENABLED, MAIL_MARK_SEEN_AFTER_IMPORT, BILLING_REPORT_ENABLED, STYLE_LEARNING_ENABLED, HUB_SOURCE_TOKEN, JWT_SECRET.
  • Code: backend/src/services (mailSync, mailSend, mailThreading, forwardedSender, subjectCompany, ticketContacts, ticketParticipants, contactEmails, styleLearning, billingReport, replyDraft, assistantService), backend/src/routes, frontend/src/views und components (TicketDetailView, EmailComposeModal, TicketParticipants), backend/scripts (E2E-Skripte, triage-eval.mjs).
  • Tabellen (Auswahl): tickets, ticket_messages, mail_messages, contacts, contact_emails, contact_company_links, companies, ticket_participants, time_entries, projects, company_hourly_rates, app_settings, reply_draft_log, running_timers, mail_sync_state.
  • Hub-Seite: sim-ops hub/src/tickets.ts, ticketsKunde.ts, ticketsKundeCore.ts, ticketschatten.ts; Zentrale › Betrieb › Tickets und Kundenakte › Karte „Tickets“.
  • Skripte und Sicherungen: /root/scripts/zeit-import-extern.sh, /root/transfer/zeit-import-extern/, /root/transfer/ticketsystem-cleanup-20260716/, /root/transfer/ticket-717-split-undo-20261008/. Vault: 40-Projekte/SIMticketsystem.md, 50-Strategien/Zeiterfassung.md.
  • Testrezept: Wegwerf-Postgres plus echtes Backend-Image mit gemountetem src in eigenem Docker-Netz ohne veröffentlichten Port (Server hat keine Firewall).