SKILL.md 18 KB


name: vision4it-dokumente

description: Use this skill whenever creating customer-facing documents for vision4it GmbH — Angebote, Kurzkonzepte, Kundenanleitungen, or Managed-Services-Angebote. Triggers include any request to write an "Angebot", "Kurzkonzept", "Anleitung" for a customer, or any .docx/document in the vision4it corporate design. Also use when the vision4it branding, colors, logo, footer/Impressum data, or the lowercase spelling rule ("vision4it") are relevant. Covers document structure, Deckblatt layout, Phasentabelle format, and the build workflow with the docx library, including PDF export as delivery format.

SKILL: vision4it Kundendokumente (Angebote, Kurzkonzepte, Anleitungen)

Zweck

Diese Anleitung beschreibt, wie professionelle Kundendokumente im vision4it-Corporate-Design erstellt werden — Angebote/Kurzkonzepte (Deckblatt + Konzept) sowie Kundenanleitungen — im Stil des GSS-Angebots (German Security Service GmbH, Terminal-Server-Infrastrukturprojekt). Der gleiche Look wurde bereits für Autohaus Elegance (Managed Services) und das JTL/Reonic-Kurzkonzept (Solar-Kunde) wiederverwendet.

Zielgruppe: Jede Claude-Instanz, die Kundendokumente für die vision4it GmbH erstellt.


Schreibweise (WICHTIG)

"vision4it" wird IMMER klein geschrieben — auch am Satzanfang, in Überschriften, Fußzeilen und im Firmennamen "vision4it GmbH". Niemals "Vision4IT", "Vision4it" oder "VISION4IT" schreiben. Einzige Ausnahme: das Logo selbst (Grafik).

Kontext vision4it

  • Firma: vision4it GmbH, Rommerskirchen (NRW), MSP für KMU im Rheinland, ~10 Mitarbeiter
  • Standard-Stack (taucht oft in Konzepten auf): Proxmox/Ceph, OPNsense, TacticalRMM, PMG/Rspamd, Exchange on-premises, 3CX, UniFi, Hudu (Doku), FileMaker
  • Grundsatz: ausschließlich Self-Hosted-Lösungen, keine Cloud-Abhängigkeiten
  • Stundensatz (Referenz aus früheren Angeboten): 120 €/h netto
  • Sprache der Dokumente: Deutsch, professionell, sachlich, kundengerecht

Verbindliche Firmenangaben (Fußzeilen, Impressumsblöcke):

vision4it GmbH · Siemensstraße 8 · 41542 Dormagen
Tel. 02133 8688890 · office@vision4it.de · vision4it.de
Geschäftsführer: Matthias Gehlhaar, Phillip Gehlhaar
Amtsgericht Mönchengladbach, HRB 22650 · USt-IdNr. DE369304034

Technischer Workflow

  1. SKILL.md des docx-Skills lesen: /mnt/skills/public/docx/SKILL.md (Pflicht vor Codebeginn)
  2. Branding-Assets aus dem Git-Repo holen (Logo, Farben, ggf. Fonts):

    git clone --depth 1 https://3f386caf463c4b46eb3d8a37bbaa59f792cde016@git.services.vision4it.de/vision4it/vision4it-branding.git /home/claude/branding
    

    Danach verfügbar:

    • /home/claude/branding/logo/logo.png — Standard-Logo (transparent, für helle Seiten)
    • /home/claude/branding/logo/logo-white.png — weiße Variante (für dunkles Deckblatt)
    • /home/claude/branding/colors.md — verbindliche Farbpalette
    • /home/claude/branding/fonts/ — Font-Dateien (nur für PDF-Workflows relevant)

Der Token in der URL ist ein dedizierter Nur-Lese-Token (Benutzer "claude"), der ausschließlich dieses öffentliche Repo sehen kann. Falls der Clone fehlschlägt (Netzwerk/Auth): ohne Logo weiterarbeiten, Firmenname typografisch setzen (wie im Template) und Matthias auf das Problem hinweisen.

  1. Arbeitsverzeichnis anlegen: mkdir -p /home/claude/<kunde>
  2. docx-Library prüfen/installieren: npm list -g docx || npm install -g docx
  3. Build-Script(s) in Node.js erstellen (siehe Template unten):
    • build_deckblatt.js → Deckblatt (eigene Datei oder erste Section)
    • build_doc.js → Kurzkonzept (nummerierte Kapitel)
    • Alternativ: ein Script mit mehreren Sections (Deckblatt = Section 1 ohne Kopf-/Fußzeile)
  4. Generieren: node build_doc.js
  5. Validieren (Pflicht): python3 /mnt/skills/public/docx/scripts/office/validate.py <datei>.docx (Pfade unter /mnt/skills/ gelten für die claude.ai-Umgebung; falls dort nicht vorhanden, Validierung/Rendering mit verfügbaren Mitteln sinngemäß durchführen)
  6. Fertige Datei dem Nutzer bereitstellen — mit dem in der jeweiligen Umgebung verfügbaren Datei-Tool (claude.ai: nach /mnt/user-data/outputs/ kopieren und present_files; Cowork: SendUserFile; sonst sinngemäß)

Ausgabeformat: PDF

Kundendokumente können als .docx, als PDF oder als beides geliefert werden.

Wann welches Format:

  • PDF — Standard für den Versand an Kunden: Layout und Schriften sind fest eingebettet, nichts verrutscht, nicht versehentlich editierbar. Im Zweifel PDF.
  • .docx — wenn Matthias das Dokument selbst weiterbearbeiten will, oder auf ausdrücklichen Wunsch. Bei Angeboten sinnvoll: beides liefern.

Erzeugung — IMMER über den docx-Weg: Es gibt KEINE separate PDF-Vorlage. Das Dokument wird wie beschrieben mit der docx-Library gebaut und anschließend konvertiert:

# claude.ai-Umgebung:
python3 /mnt/skills/public/docx/scripts/office/soffice.py --headless --convert-to pdf <datei>.docx
# andere Umgebungen mit LibreOffice:
soffice --headless --convert-to pdf <datei>.docx

So bleibt eine einzige Design-Quelle (das Template); LibreOffice bettet die verwendeten Schriften ins PDF ein. Kein direktes PDF-Generieren mit reportlab o. ä. für diese Dokumenttypen — das würde eine zweite, abweichende Design-Welt schaffen.

Pflichtprüfung am PDF (ersetzt/ergänzt den Rendering-Check):

  • Seitenzahl plausibel, kein Überlauf (leere Seite = Spacer-Problem auf dem Deckblatt)
  • pdftotext <datei>.pdf - | grep -o 'Vision4IT\|Vision4it\|VISION4IT' | wc -l → muss 0 sein
  • Firmenangaben (Siemensstraße 8, HRB 22650) im PDF-Text vorhanden

Dateinamen: identisch zum docx, nur Endung .pdf (z. B. Angebot_Kurzkonzept_<Kunde>.pdf).

Für andere PDF-Aufgaben (Formulare ausfüllen, PDFs zusammenführen, Wasserzeichen) gilt der allgemeine pdf-Skill der Umgebung (claude.ai: /mnt/skills/public/pdf/), nicht diese Anleitung.


Corporate Design (Farben)

// vision4it Farbpalette (Hex ohne #, wie von docx-Library erwartet)
const C_DARK   = "1A1A1A";  // Haupttext, Überschriften, dunkle Flächen (Deckblatt)
const C_GREEN  = "13A983";  // Akzentfarbe (Linien, Hervorhebungen, Status-Elemente)
const C_GREY   = "5C5C5C";  // Sekundärtext, Untertitel, Metadaten
const C_LIGHT  = "F4F4F4";  // Helle Hintergrundflächen (Tabellen-Header, Infoboxen)
const C_BORDER = "D0D0D0";  // Tabellenrahmen, Trennlinien

Regeln:

  • Grün (13A983) sparsam als Akzent einsetzen — Linien unter Überschriften, Kennzahlen, Summenzeilen. Nicht als Flächenfarbe für Fließtext-Hintergründe.
  • Deckblatt IMMER hell/weiß (druckfreundlich!) — KEINE vollflächig dunklen Deckblätter, die sind auf Bürodruckern nicht praktikabel. Kontrast über Typografie und Teal-Akzente.
  • Kein übermäßiges Bold im Fließtext.

Dokumentstruktur

Deckblatt (hell, druckfreundlich)

  • Weißer Hintergrund — nie vollflächig dunkel (Druckkosten, Qualität auf Bürodruckern)
  • Logo in Originalfarben (logo.png) OBEN RECHTS (alignment: RIGHT), groß (~247×60)
  • Kicker in Teal mit Sperrsatz (z. B. "ANGEBOT & KURZKONZEPT"), darunter großer dunkler Titel
  • Teal-Linie unter dem Untertitel als Akzent
  • Dokumenttyp: „Angebot" bzw. „Kurzkonzept"
  • Projekttitel (z. B. „IT-Infrastruktur Terminal-Server-Umgebung")
  • Kundenname + Standort
  • Datum, ggf. Angebotsnummer / Version
  • Kontaktblock vision4it GmbH (unten)
  • Keine Kopf-/Fußzeile auf dem Deckblatt (eigene Section)

Innenseiten: Kopf & Fuß

  • Logo klein (~124×30) OBEN RECHTS auf der ersten Innenseite
  • Fußzeile ZWEIZEILIG mit den vollständigen Firmenangaben (Block oben) in 7 pt Grau, plus Angebotsnummer und Seitenzahl. Nie nur "vision4it GmbH · Seite X" — die vollständigen Angaben sind Pflicht.

Kurzkonzept (nummerierte H1-Kapitel)

Bewährte Gliederung aus dem GSS-Dokument (an Scope anpassen, nicht sklavisch kopieren):

  1. Ausgangslage / Ist-Zustand
  2. Zielsetzung
  3. Ziel-Architektur (Netz, Server, Virtualisierung)
  4. Netzwerk & Segmentierung (VLANs, Firewall, NAC/RADIUS)
  5. Server-Rollen (DC, Terminal Server, Exchange, Fileserver, Fachanwendungen)
  6. Sicherheit (Firewall-Regelwerk, Logging, Auditing)
  7. Backup & Monitoring (TacticalRMM, Backup-Konzept)
  8. Drucken (z. B. Pull-Printing) — falls relevant
  9. Fernzugriff / VPN
  10. E-Mail / Kollaboration
  11. Endgeräte-Management (GPO, TacticalRMM, BitLocker, kein lokaler Admin, USB gesperrt)
  12. Nächste Schritte (Bullets: Begehung, Detail-Design, Bestellung, Rollout, Schulung, Übergabe)
  13. Zeitplan & Aufwand (Phasentabelle + Kalenderzeit)

Bei Managed-Services-Verträgen (wie Autohaus Elegance): Service-Beschreibung statt Projekt-Phasenplan — Leistungsumfang, SLA/Reaktionszeiten, monatlicher Preis, Laufzeit.

Phasentabelle (Projektangebote)

Format wie bei GSS (Positionen mit Stunden, Zwischensumme, Puffer, Gesamtsumme):

Pos Leistung Stunden
1 Vorbereitung & Planung
2 Hardware-Aufbau & Basis-Infrastruktur
3 Server-Rollen
4 Sicherheit & Monitoring
5 Migration & Rollout
6 Übergabe & Dokumentation (Hudu, Hypercare, Abnahme)
Zwischensumme
7 Projektpuffer (15 %)
Gesamt Dienstleistung … h

Dazu immer:

  • Kalenderzeit (z. B. „8–10 Wochen bei einem Techniker mit ~70 % Auslastung")
  • Nicht enthalten: Anfahrt, Hardware-Lieferzeit, laufender Wartungsvertrag, spätere Erweiterungen

Preise nur nennen, wenn Matthias es explizit will — es gab Fälle, in denen die Preis-/Phasensektion nachträglich entfernt werden musste. Im Zweifel nachfragen.


Code-Template (Node.js, docx-Library)

Vollständiges, geprüftes Referenz-Script: templates/build_angebot_beispiel.js im Branding-Repo — erzeugt ein komplettes Angebot (helles Deckblatt mit Logo rechts, Kurzkonzept, Phasentabelle, Firmenangaben-Fußzeile). Am besten dieses Script kopieren und Inhalte austauschen, statt von Null zu starten. Der Ausschnitt unten zeigt nur die Grundstruktur:

const fs = require('fs');
const {
  Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
  AlignmentType, HeadingLevel, BorderStyle, WidthType, ShadingType,
  PageNumber, Header, Footer, VerticalAlign, LevelFormat
} = require('docx');

// vision4it Farben
const C_DARK = "1A1A1A", C_GREEN = "13A983", C_GREY = "5C5C5C",
      C_LIGHT = "F4F4F4", C_BORDER = "D0D0D0";

// --- Helpers ---------------------------------------------------------------
const noBorder = { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
const noBorders = { top: noBorder, bottom: noBorder, left: noBorder, right: noBorder };

const cell = (children, opts = {}) => new TableCell({
  borders: opts.borders || noBorders,
  width: opts.width ? { size: opts.width, type: WidthType.DXA } : undefined,
  shading: opts.shade ? { fill: opts.shade, type: ShadingType.CLEAR } : undefined,
  margins: opts.margins || { top: 60, bottom: 60, left: 80, right: 80 },
  verticalAlign: opts.valign,
  columnSpan: opts.colSpan,
  children: Array.isArray(children) ? children : [children],
});

const H1 = (text) => new Paragraph({
  heading: HeadingLevel.HEADING_1,
  spacing: { before: 320, after: 160 },
  children: [new TextRun({ text, bold: true, color: C_DARK, size: 28 })],
});

const H2 = (text) => new Paragraph({
  heading: HeadingLevel.HEADING_2,
  spacing: { before: 240, after: 120 },
  children: [new TextRun({ text, bold: true, color: C_DARK, size: 24 })],
});

const P = (text) => new Paragraph({
  spacing: { after: 120 },
  children: [new TextRun({ text, size: 22, color: C_DARK })],
});

const Bullet = (text) => new Paragraph({
  numbering: { reference: "bullets", level: 0 },
  spacing: { after: 60 },
  children: [new TextRun({ text, size: 22, color: C_DARK })],
});

// --- Dokument --------------------------------------------------------------
const doc = new Document({
  numbering: {
    config: [{
      reference: "bullets",
      levels: [{
        level: 0, format: LevelFormat.BULLET, text: "\u2022",
        alignment: AlignmentType.LEFT,
        style: { paragraph: { indent: { left: 720, hanging: 360 } } },
      }],
    }],
  },
  sections: [
    // Section 1: Deckblatt (ohne Kopf-/Fußzeile)
    {
      properties: { page: { margin: { top: 1134, bottom: 1134, left: 1134, right: 1134 } } },
      children: [
        // Branding-Block, Titel, Kunde, Datum — mit Tabellen/Paragraphs layouten
      ],
    },
    // Section 2: Kurzkonzept (mit Fußzeile + Seitenzahlen)
    {
      properties: { page: { margin: { top: 1134, bottom: 1134, left: 1134, right: 1134 } } },
      footers: {
        default: new Footer({
          children: [new Paragraph({
            alignment: AlignmentType.RIGHT,
            children: [
              new TextRun({ text: "vision4it GmbH  |  Seite ", size: 16, color: C_GREY }),
              new TextRun({ children: [PageNumber.CURRENT], size: 16, color: C_GREY }),
            ],
          })],
        }),
      },
      children: [
        H1("1. Ausgangslage"),
        P("…"),
        // weitere Kapitel …
      ],
    },
  ],
});

Packer.toBuffer(doc).then(buffer => {
  fs.writeFileSync("/home/claude/Kurzkonzept_<Kunde>.docx", buffer);
  console.log("OK");
});

Logo einbinden (ImageRun)

Logo-Fakten (aus Logo_vision4it_rgb_2023.pdf extrahiert):

  • Seitenverhältnis 4,12 : 1 (828 × 201 px nativ, Rasterquelle — nicht größer als ~7 cm Breite in Druckdokumenten verwenden, sonst wird es unscharf)
  • Empfohlene Maße: Deckblatt { width: 247, height: 60 }, Kopfzeile { width: 124, height: 30 }
  • CI-Schriften im Logo: Design System 500R (Schriftzug), Presario Text (Tagline) — beide kommerziell; Fließtext in Dokumenten trotzdem Calibri/Arial.

    const { ImageRun } = require('docx');
    
    const logoBuffer = fs.readFileSync('/home/claude/branding/logo/logo.png'); // Standard: farbiges Logo
    
    new Paragraph({
    alignment: AlignmentType.LEFT,
    children: [new ImageRun({
    data: logoBuffer,
    transformation: { width: 206, height: 50 }, // Seitenverhältnis 4.12:1 einhalten!
    type: 'png',
    })],
    });
    
  • Überall logo.png (farbig). logo-white.png nur für dunkle digitale Anwendungen (Präsentations-Titelfolien, Website), NICHT für Druck-Deckblätter.

Hinweise:

  • A4, 2 cm Ränder (1134 DXA).
  • Umlaute/Sonderzeichen im Script als Unicode-Escapes nur wo nötig — UTF-8 funktioniert direkt.
  • Bei Bullets: indent nicht zusätzlich zur numbering-Referenz setzen (Konflikt, bekannter Bug aus früherer Session).
  • Tabellen mit C_LIGHT-Header-Zeile und C_BORDER-Rahmen; Summenzeilen bold, ggf. grüner Akzent.

Dokumenttyp: Kundenanleitung

Für Schritt-für-Schritt-Anleitungen an Endanwender (z. B. RDP-Zugang, VPN einrichten, E-Mail auf dem Handy). Gleiche Farben, gleiche Fußzeile mit Firmenangaben, Logo oben rechts — und IMMER mit Deckblatt (gleicher Aufbau wie beim Angebot, eigene Section ohne Word-Fußzeile). Auf dem Deckblatt: Kicker "ANLEITUNG" in Teal statt "ANGEBOT & KURZKONZEPT", Titel = Thema (z. B. "RDP-Verbindung einrichten"), Untertitel = Zielgruppe/System, Metadaten-Tabelle mit Kunde, Datum, Version — ohne Angebots-Nr. In der Innenseiten-Fußzeile entfällt die Angebots-Nr. ebenfalls; stattdessen Dokumenttitel + Seitenzahl.

Oberste Regel: KURZ UND KNAPP. Zielgruppe sind Endanwender, keine Techniker. Erfahrungswert: Eine frühere RDP-Anleitung wurde als zu ausführlich zurückgewiesen — lieber 1–2 Seiten, die jemand wirklich liest, als 5 Seiten Vollständigkeit.

Struktur (nach dem Deckblatt):

  1. Kurzer Einleitungssatz (was erreicht der Anwender mit dieser Anleitung)
  2. Infobox (C_LIGHT-Hintergrund, dünner Rahmen): die konkreten Verbindungsdaten / Zugangsinfos als Label-Wert-Tabelle (Server-IP, Benutzername-Schema o. ä.)
  3. Voraussetzungen: max. 3–4 Bullets
  4. Schritt-für-Schritt: nummerierte Schritte, je Schritt EIN Satz Anweisung, optional ein kurzer Hinweis. Keine Screenshots-Platzhalter, keine Theorie-Exkurse.
  5. Bei Problemen: kleine Tabelle Problem → Lösung (max. 4–5 Zeilen), darunter ein Satz: "Weitere Hilfe: vision4it Support, Tel. 02133 8688890, office@vision4it.de"

Sprachliche Regeln:

  • Anwender werden gesiezt ("Öffnen Sie...", "Geben Sie ... ein")
  • Imperativ, aktiv, ein Schritt = eine Handlung
  • Fachbegriffe nur wenn nötig, dann in einem Halbsatz erklärt
  • Platzhalter für kundenspezifische Werte klar markieren: [IHR BENUTZERNAME]

Dateiname: Anleitung_<Thema>_<Kunde>.docx


Dokumenttyp: Managed-Services-Angebot

Wie Angebot/Kurzkonzept, aber: Service-Beschreibung statt Projekt-Phasenplan. Abschnitte: Leistungsumfang (Bullets pro Service-Baustein), Reaktionszeiten/SLA, monatlicher Preis, Laufzeit & Kündigung, Nicht enthalten. Referenz: Autohaus Elegance (IT Essential, 1.200 €/Monat).


Checkliste vor Abgabe

  • docx-SKILL.md gelesen
  • Branding-Repo geclont, farbiges Logo eingebunden
  • Farben exakt aus der Palette (kein Blau, kein Apfelgrün 7CB342 aus Altdokumenten — aktueller Standard ist Dunkelgrau/Teal aus dem Logo)
  • Deckblatt als eigene Section ohne Word-Fußzeile, hell/weiß, Logo oben rechts, Firmenangaben-Block unten auf der Seite
  • Fußzeile Innenseiten: vollständige Firmenangaben (Adresse, GF, HRB, USt-IdNr.)
  • Kapitel durchnummeriert, Nummerierung konsistent (bei Löschungen neu durchzählen!)
  • Phasentabelle: Zwischensumme + 15 % Puffer + Gesamtsumme
  • Kalenderzeit-Angabe und „Nicht enthalten"-Block vorhanden
  • validate.py erfolgreich durchgelaufen
  • Rendern (soffice → pdftoppm) und Seitenzahl/Überlauf prüfen; bei PDF-Lieferung die Pflichtprüfungen aus dem PDF-Abschnitt durchführen — Spacer-Höhen auf dem Deckblatt sind die häufigste Überlauf-Ursache
  • Datei dem Nutzer bereitgestellt (Datei-Tool der jeweiligen Umgebung)
  • Bei Unsicherheit über Preisnennung: Matthias fragen

Bekannte Varianten (Referenzprojekte)

Projekt Typ Besonderheit
GSS German Security Service Infrastruktur-Projekt Vollständiger Phasenplan, 221 h, Dual EPYC/ZFS/VLAN/NAC
Autohaus Elegance Managed Services Service-Beschreibung statt Phasenplan, 1.200 €/Monat IT Essential
Solar-Kunde (JTL/Reonic) Konzept + Middleware Kurzkonzept ohne Preissektion (nachträglich entfernt), Hosting-Produkte separat