--- 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. --- # 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): ```bash 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. 3. Arbeitsverzeichnis anlegen: `mkdir -p /home/claude/` 4. `docx`-Library prüfen/installieren: `npm list -g docx || npm install -g docx` 5. 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) 6. Generieren: `node build_doc.js` 7. **Validieren (Pflicht):** `python3 /mnt/skills/public/docx/scripts/office/validate.py .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) 8. 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äß) --- ## Corporate Design (Farben) ```javascript // 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: ```javascript 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_.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. ```javascript 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__.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 — 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 |