diff --git a/scripts/build.py b/scripts/build.py index 677d50c..0328ae8 100644 --- a/scripts/build.py +++ b/scripts/build.py @@ -50,13 +50,19 @@ "jobTitle": AUTHOR["role"], "description": ( "Chief Technology Officer und Senior Engineering Leader mit über 25 " - "Jahren IT-Erfahrung. Schwerpunkte: Engineering-Governance, " - "Plattformarchitektur und Modernisierung komplexer Systemlandschaften." + "Jahren IT-Erfahrung. Verbindet technische Strategie und " + "Engineering-Governance mit operativer Plattformarbeit, " + "Modernisierung komplexer Systemlandschaften und der Einführung " + "AI-gestützter Engineering-Praktiken. Maintainer mehrerer " + "Open-Source-Projekte, Initiator des internen RFC-Prozesses und " + "des unternehmensweiten Trainingsprogramms für agentische " + "Entwicklung." ), "url": f"{SITE_BASE}/", "address": { "@type": "PostalAddress", "addressLocality": "Leipzig", + "postalCode": "04229", "addressCountry": "DE", }, "worksFor": { @@ -65,6 +71,8 @@ "url": "https://www.netresearch.de/", "address": { "@type": "PostalAddress", + "streetAddress": "Nonnenstraße 11d", + "postalCode": "04229", "addressLocality": "Leipzig", "addressCountry": "DE", }, @@ -85,19 +93,49 @@ {"@type": "Language", "name": "Englisch", "alternateName": "en"}, ], "knowsAbout": [ + # Leadership & methodology + "Engineering Leadership", "Engineering Governance", + "Technical Strategy", + "Architecture Decision Records", + "RFC Process", + "Curriculum Design", + "Mentoring and Coaching", + "Organizational Change Management", + "Stakeholder Communication", + "Presales and Technical Advisory", + # Architecture "Platform Architecture", "Technical Modernization", - "Architecture Decisions", - "RFC Process", + "API Design", + "Distributed Systems", + # AI-era engineering + "AI-assisted Engineering", + "Agentic Development", + "Prompt Engineering", + "Model Context Protocol", + "Skill Marketplace Engineering", + # Security & compliance "Information Security", - "Compliance", + "ISO/IEC 27001-aligned ISMS Documentation", + "BSI IT-Grundschutz", + "Cloud Compliance (BSI C5)", "Disaster Recovery", "Business Continuity", + "Supply-Chain Security", + # Operations & platforms "Continuous Integration", "Continuous Delivery", "DevOps", - "Open Source", + "Job Scheduling", + "Cron and DAG-based Workflow Engines", + "Identity and Access Management", + "LDAP and Active Directory", + "Reverse Proxy Architecture (Traefik)", + "Matrix / Synapse Operations", + "Composer Registry Operations", + "Open Source Maintainership", + # Stack "TYPO3", "Magento", "OroCommerce", @@ -116,8 +154,6 @@ "Concourse CI", "Proxmox", "AWS", - "AI-assisted Engineering", - "Agentic Development", ], "hasOccupation": { "@type": "Occupation", @@ -125,9 +161,14 @@ "occupationLocation": {"@type": "City", "name": "Leipzig"}, "experienceRequirements": "25+ years IT, 10+ years CTO", "skills": ( - "Engineering governance, platform architecture, technical " - "modernization, security and compliance documentation, " - "AI-assisted engineering practices" + "Technical strategy and engineering governance, " + "platform architecture and modernization of complex system " + "landscapes, information security and compliance " + "documentation (BSI IT-Grundschutz, BSI C5, ISMS), " + "AI-assisted and agentic engineering practices, " + "open-source maintainership, curriculum design and " + "mentoring, cross-functional stakeholder communication, " + "organizational change management." ), }, "sameAs": [AUTHOR["linkedin"], AUTHOR["github"]], @@ -228,13 +269,26 @@ def parse_source(path: Path) -> Variant: def render_md(body: str) -> str: + # `abbr` extension wraps every occurrence of a defined token in + # — WCAG 3.1.4 AAA Abbreviations. md = markdown.Markdown( - extensions=["extra", "smarty", "sane_lists", "attr_list"], + extensions=["extra", "smarty", "sane_lists", "attr_list", "abbr"], output_format="html5", ) return md.convert(body) +def load_abbreviations() -> str: + """Return the contents of `src/_abbreviations.md` (or '' if absent). + + The block uses Markdown's `abbr` extension syntax: each line is + `*[KEY]: Expansion`. We append it to every CV body before rendering so + every occurrence of KEY in the body becomes KEY. + """ + path = SRC / "_abbreviations.md" + return path.read_text(encoding="utf-8") if path.exists() else "" + + def load_inline_css() -> str: """Load assets/style.css and rewrite font URLs for inlining into HTML. @@ -283,6 +337,7 @@ def render_html( all_variants: list[Variant], build_iso: str, inline_css: str, + abbr_block: str = "", ) -> str: tpl = env.get_template("cv.html.j2") breadcrumb = variant_breadcrumb(variant) @@ -294,6 +349,7 @@ def render_html( updated_iso=build_iso, breadcrumb=breadcrumb, ) + body_md_with_abbr = variant.body_md + "\n\n" + abbr_block # Asset paths are relative to the HTML file. Both index.html and cv-*.de.html # sit at the root of public/ alongside assets/, so plain "assets/..." works # for every page; "../assets/..." would escape the project subpath on Pages. @@ -306,7 +362,7 @@ def render_html( og_locale=variant.front.get("og_locale", "de_DE"), author=AUTHOR, jsonld=json.dumps(jsonld, ensure_ascii=False), - body=render_md(variant.body_md), + body=render_md(body_md_with_abbr), pdf_filename=variant.pdf_filename, meta_links=build_meta_links(variant, all_variants), updated_human=variant.front["updated"], @@ -401,11 +457,15 @@ def main() -> int: lstrip_blocks=True, ) - build_iso = datetime.now(timezone.utc).strftime("%Y-%m-%d") + # ISO 8601 datetime with explicit UTC offset — required for schema.org + # dateModified validation (date-only "YYYY-MM-DD" gets flagged). + now = datetime.now(timezone.utc).replace(microsecond=0) + build_iso = now.isoformat() inline_css = load_inline_css() + abbr_block = load_abbreviations() for v in variants: - html = render_html(env, v, variants, build_iso, inline_css) + html = render_html(env, v, variants, build_iso, inline_css, abbr_block) out = PUBLIC / v.html_filename out.write_text(html, encoding="utf-8") print(f"wrote {out.relative_to(ROOT)}") diff --git a/src/_abbreviations.md b/src/_abbreviations.md new file mode 100644 index 0000000..bc11aeb --- /dev/null +++ b/src/_abbreviations.md @@ -0,0 +1,35 @@ + + +*[AAA]: Web Content Accessibility Guidelines, höchste Konformitätsstufe +*[AD]: Active Directory +*[AI]: Artificial Intelligence (Künstliche Intelligenz) +*[API]: Application Programming Interface +*[AWS]: Amazon Web Services +*[BCP]: Business Continuity Planning +*[BSI]: Bundesamt für Sicherheit in der Informationstechnik +*[C5]: Cloud Computing Compliance Criteria Catalogue (BSI) +*[CI/CD]: Continuous Integration / Continuous Delivery +*[CMS]: Content Management System +*[Concourse CI]: Concourse Continuous Integration +*[CRM]: Customer Relationship Management +*[CTO]: Chief Technology Officer +*[DAG]: Directed Acyclic Graph +*[DevOps]: Development and Operations +*[DR]: Disaster Recovery +*[DR/BCP]: Disaster Recovery / Business Continuity Planning +*[EVB-IT]: Ergänzende Vertragsbedingungen für die Beschaffung von IT-Leistungen +*[IAM]: Identity and Access Management +*[ISMS]: Informationssicherheits-Managementsystem +*[IT]: Informationstechnik +*[LDAP]: Lightweight Directory Access Protocol +*[MCP]: Model Context Protocol (Anthropic-Standard für Tool-Integration) +*[OSS]: Open Source Software +*[ÖPNV]: Öffentlicher Personennahverkehr +*[Proxmox]: Proxmox Virtual Environment, Linux-basierte Virtualisierungsplattform +*[RFC]: Request for Comments — strukturierter Architektur- oder Entscheidungsvorschlag +*[SDK]: Software Development Kit +*[SQL]: Structured Query Language +*[TER]: TYPO3 Extension Repository +*[TUGLE]: TYPO3 User Group Leipzig diff --git a/src/cv-executive.de.md b/src/cv-executive.de.md index a169268..d0d8ba7 100644 --- a/src/cv-executive.de.md +++ b/src/cv-executive.de.md @@ -24,7 +24,9 @@ Erfahrung in Enterprise-, Public-Sector-, E-Commerce-, CMS- und Integrationsumfe - Modernisierung komplexer Legacy-, CMS-, Commerce- und Integrationslandschaften - Security-, Compliance-, Risiko-, Disaster-Recovery- und Business-Continuity-Dokumentation - Einführung strukturierter AI-unterstützter Engineering-Praktiken -- Open-Source-Arbeit, technische Dokumentation und Entwickler-Enablement +- Open-Source-Maintainership, technische Dokumentation und Entwickler-Enablement +- Curriculum-Design, Mentoring und unternehmensinterne Trainingsprogramme +- Stakeholder-Kommunikation, Presales-Beratung, Change-Management ## Berufserfahrung @@ -64,7 +66,14 @@ Ausbildung mit Schwerpunkt Web, Datenbanken, Hardware, Netzwerk und Support. ## Open Source -Langjähriger Open-Source-Hintergrund mit Beiträgen im phpMyAdmin- und TYPO3-Ökosystem. Schwerpunkt auf pragmatischer Softwareentwicklung, Wartbarkeit, Dokumentation und Zusammenarbeit in gewachsenen technischen Communities. +Langjähriger Open-Source-Hintergrund mit Beiträgen seit 2005. Schwerpunkt auf pragmatischer Softwareentwicklung, Wartbarkeit, Dokumentation und Zusammenarbeit in gewachsenen technischen Communities. + +- **phpMyAdmin** (2005–2015) — Core-Beiträge zu MySQL-Administration, PHP-Backend und Dokumentation +- **TYPO3-Ökosystem** — Beiträge zu Documentation Tooling (`phpDocumentor/guides`, TYPO3-Documentation-Infrastruktur, `codesnippet`, `t3docs-ci-deploy`); öffentliche Claude-Code-Skills (`typo3-extension-analyzer-skill`, `typo3-update-issues`, `dxp-frontend`); aktiv in der TYPO3 User Group Leipzig (TUGLE) +- **Maintainer / Hauptbeiträger** — `netresearch/ldap-manager` (Go, LDAP-Operations-Tooling), `netresearch/ofelia` (Docker-basierter Job-Scheduler), `netresearch/go-cron` (DAG-Engine, Cron-Erweiterungen), `netresearch/claude-code-marketplace` (öffentlicher Skill-Marketplace) +- **Sonstige OSS** — Beiträge u.a. zu `hybridauth/hybridauth`, `repowise-dev/repowise`, `gofiber/cli`, `Seagate/cloudfuse`, `matrix-docker-ansible-deploy`, `traefik`, `weaviate`, `ddev` +- **Eigene Repos** — `kidsync` (Privacy-First Co-Parenting App, Kotlin, E2EE), `wow-quickroute` (Lua), `typo3-extension-analyzer-skill` +- GitHub: **github.com/CybotTM** (40+ public repos, aktiv seit 2010) ## Technologiefelder diff --git a/src/cv-technical.de.md b/src/cv-technical.de.md index a95ecb6..7c71f2b 100644 --- a/src/cv-technical.de.md +++ b/src/cv-technical.de.md @@ -35,9 +35,12 @@ Ausgewählte Beiträge: - Governance und technische Weiterentwicklung einer zentralen Engineering-Plattform - Modernisierung von Delivery-, Build-, Release- und Backup-Prozessen -- Einführung strukturierter Architekturentscheidungen und technischer RFC-Prozesse +- Einführung strukturierter Architekturentscheidungen und technischer RFC-Prozesse (Initiator des unternehmensweiten T3-RFC-Verfahrens) +- Curriculum-Design und persönliche Durchführung eines mehrwöchigen Trainingsprogramms „Best Practices für agentische Entwicklung" für das Engineering-Team +- Aufbau einer internen AI-Tooling-Plattform (Skill-Marketplace, eigene Composer-Distribution) - Betriebs- und Incident-Unterstützung in kritischem Kundenumfeld - Technische Beratung in Presales, Roadmaps und Modernisierungsprogrammen +- Aufbau und Pflege einer internen technischen Wissensbasis (50+ Artikel zu Engineering-, Sicherheits- und AI-Themen seit 2020) ### phpMyAdmin (2005–2015) @@ -61,7 +64,15 @@ Ausbildung Fachinformatik Systemintegration mit Schwerpunkt Web, Datenbanken, Ha ## Open Source -Langjährige Beiträge im phpMyAdmin- und TYPO3-Ökosystem mit Fokus auf technische Dokumentation, Tooling und wartbare Entwicklungsprozesse. +Langjährige Beiträge in mehreren Ökosystemen mit Fokus auf wartbare Entwicklungsprozesse, technische Dokumentation und nachhaltige Maintainership. + +- **phpMyAdmin** (2005–2015) — Core-Beiträge zu MySQL/SQL-Funktionalität, PHP-Backend, Dokumentation +- **TYPO3-Ökosystem** — Beiträge zu Documentation Tooling (`phpDocumentor/guides`, `codesnippet`, `t3docs-ci-deploy`, `t3docs-search-indexer`), Extension-Tooling und Skills (`typo3-extension-analyzer-skill`, `typo3-update-issues`, `dxp-frontend`); aktiv in der TYPO3 User Group Leipzig (TUGLE) +- **Maintainership** — `netresearch/ldap-manager` (Go, LDAP-Operations), `netresearch/ofelia` (Docker-Job-Scheduler), `netresearch/go-cron` (DAG-Engine, `@triggered`-Erweiterungen), `netresearch/claude-code-marketplace` +- **Matrix-Ökosystem** — Beiträge zu `matrix-docker-ansible-deploy` +- **Sonstige OSS** — Beiträge u.a. zu `hybridauth/hybridauth`, `repowise-dev/repowise`, `gofiber/cli`, `Seagate/cloudfuse`, `traefik`, `weaviate`, `ddev`, `raybeam`, `ocf-scheduler` +- **Eigene Repos** — `kidsync` (Privacy-First Co-Parenting App, Kotlin, E2EE), `wow-quickroute` (Lua), `typo3-extension-analyzer-skill` +- GitHub: **github.com/CybotTM** (40+ public repos, aktiv seit 2010) ## Sprachen