From e7ffe773d721dc639f68b6420896fa4f4812b390 Mon Sep 17 00:00:00 2001
From: NickiCloud
Date: Wed, 2 Sep 2026 21:32:02 +0200
Subject: [PATCH] fix(svg): escape xml characters in productivity badge [skip
ci]
---
README.md | 57 +++++--------------
heatmap.svg | 24 ++++----
productivity.svg | 10 ++--
.../Services/StatsCalculator.cs | 4 +-
src/ProfileManager/Services/SvgGenerator.cs | 12 +++-
5 files changed, 45 insertions(+), 62 deletions(-)
diff --git a/README.md b/README.md
index 4578b06..e6877fb 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@
-
+
@@ -25,7 +25,6 @@
[](https://mudblazor.com/)
[](https://www.jetbrains.com/rider/)
-[](https://pop.system76.com/)
[](https://www.debian.org/)
[](https://www.docker.com/)
[](https://www.webcore-consulting.de)
@@ -42,7 +41,7 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
- 💻 **Fokus:** C#, .NET 10, Cross-Platform Desktop mit **Avalonia UI**, moderne Web-Apps mit **Blazor / MudBlazor** und modulare Microservices.
- 🏢 **Team & Consulting:** Softwareentwickler bei **WebCore Consulting** – Entwicklung von Management-Tools, Kundenportalen und Security-Services.
-- 🐧 **Entwicklungsumgebung:** Vollständiger Linux-Workflow mit **JetBrains Rider auf Pop!_OS** – maximale Produktivität ohne Windows-Overhead.
+- 🐧 **Entwicklungsumgebung:** Vollständiger Linux-Workflow mit **JetBrains Rider auf Fedora** – maximale Produktivität ohne Windows-Overhead.
- 🏰 **Self-Hosted Homelab:** Eigener Debian-Rootserver mit Docker-Containern: Gitea & Gitea Actions, Mailcow Enterprise Suite, Nginx Reverse Proxy mit Let's Encrypt, gehärtet durch UFW & fail2ban.
- 🎮 **Gaming Corner:** Wenn der Build grün ist: Redstone-Komplexe in **Minecraft**, taktische Runden in **Rainbow Six Siege** oder Grinden in **Warframe**.
- 🦊 **Branding:** Lila Fuchs (Purple Fox) – steht für Agilität, Eleganz, Scharfsinn und sauberen Code.
@@ -64,11 +63,6 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
-#### 📌 Zuletzt aktualisierte persönliche Projekte:
-
-- 🚀 [**.profile**](https://git.webcore-consulting.dev/NickiCloud/.profile) – 🦊 Gitea-Profil & dynamische Aktivitäts-Statistiken mit .NET 10
- `C#` • 🕒 *Aktualisiert am 02.09.2026*
-
@@ -115,11 +109,11 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
> *Echtzeit-Feed der letzten Aktionen und Commits über alle privaten & Team-Repositories.*
-- ⚡ **feat: add live commit radar, activity feed and homelab telemetry [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 2 Minuten*
-- ⚡ **feat: add team telemetry dashboard, byte-level language analytics and tabs [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 6 Minuten*
-- ⚡ **fix(svg): remove utf-8 bom and add xml declaration for gitea typesniffer [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 14 Minuten*
-- ⚡ **chore(profile): update activity heatmap & stats (22 contributions) [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 21 Minuten*
-- ⚡ **Initial profile setup** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 22 Minuten*
+- ⚡ **feat: add productivity biorhythm clock, developer achievements and quote [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 15 Minuten*
+- ⚡ **feat: add live commit radar, activity feed and homelab telemetry [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 18 Minuten*
+- ⚡ **feat: add team telemetry dashboard, byte-level language analytics and tabs [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 22 Minuten*
+- ⚡ **fix(svg): remove utf-8 bom and add xml declaration for gitea typesniffer [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 30 Minuten*
+- ⚡ **chore(profile): update activity heatmap & stats (22 contributions) [skip ci]** auf [`NickiCloud/.profile`](https://git.webcore-consulting.dev/NickiCloud/.profile) • 🕒 *vor 37 Minuten*
@@ -142,7 +136,7 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
| 🏆 **Streak Master** | `Gold` | Mindestens 4 Tage ununterbrochen aktiv gecodet | **4 Tage** ✅ |
| 💾 **Code Sovereign** | `Diamond` | Über 1,5 MB Code in Gitea verwaltet | **1,9 MB** ✅ |
| ⚡ **Zero-Dependency** | `Master` | Reines .NET 10 BCL ohne fremde NuGet-Pakete | **100% Native** ✅ |
-| 🌙 **Night-Owl Veteran** | `Elite` | Hohe nächtliche Coding-Aktivität | **26,3% Nachts** ✅ |
+| 🌙 **Night-Owl Veteran** | `Elite` | Hohe nächtliche Coding-Aktivität | **21,1% Nachts** ✅ |
| 🏰 **Homelab Overlord** | `Legendary` | Self-Hosted Debian, Docker, Gitea, Mailcow | **Vollautonom** ✅ |
@@ -157,32 +151,11 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
-🛡️ Tab 5: Homelab, Server-Infrastruktur & Telemetrie
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 🌐 WebCore & HomeLab Architecture │
-│ │
-│ [ Internet / Cloudflare ] │
-│ │ │
-│ ▼ │
-│ [ Debian 12 Host ] ─── [ UFW & fail2ban Security Wall ] │
-│ │ │
-│ ▼ │
-│ [ Nginx Reverse Proxy (SSL/TLS Termination) ] │
-│ │ │
-│ ┌───────┼─────────────────────────┬──────────────┐ │
-│ ▼ ▼ ▼ ▼ │
-│ [Gitea] [Act-Runner] [Mailcow] [Services] │
-│ (Git) (C# / .NET 10 Actions) (E-Mail) (WebCore) │
-└─────────────────────────────────────────────────────────────┘
-```
| Service | Host / Umgebung | Funktion | Status |
| :--- | :--- | :--- | :---: |
| 🦊 **Gitea Service** | `git.webcore-consulting.dev` | Versionsverwaltung, API & Git LFS | `🟢 ONLINE` |
-| ⚡ **Gitea Act-Runner** | Docker `catthehacker/ubuntu:act` | Autonome CI/CD-Pipeline (.NET 10) | `🟢 AKTIV` |
-| ✉️ **Mailcow Suite** | Docker Stack / Debian 12 | Enterprise Mail (DKIM, SPF, DMARC) | `🟢 ONLINE` |
+| ✉️ **Mailcow Suite** | Docker Stack / Debian 13 | Enterprise Mail (DKIM, SPF, DMARC) | `🟢 ONLINE` |
| 🛡️ **Nginx Proxy** | Reverse Proxy Host | SSL/TLS 1.3 Offloading & HSTS | `🟢 AKTIV` |
| 🔒 **Security Wall** | UFW Firewall & fail2ban | SSH & HTTP Brute-Force Abwehr | `🟢 SCHARF` |
@@ -191,13 +164,13 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
-🎮 Tab 6: Gaming Battlestation & Loadouts
+🎮 Tab 5: Gaming Battlestation & Loadouts
| Game | Fokus & Rolle | Lieblingselement / Operator |
| :--- | :--- | :--- |
| ⛏️ **Minecraft** | Technical Automation & Redstone | Automatisierte Farmen, Create Mod, Server-Hosting |
| 🎯 **Rainbow Six Siege** | Tactical Anchor & Area Denial | Smoke, Mute, Thermite, Thatcher |
-| ⚔️ **Warframe** | High-Level Survival & Grinding | Mesa Prime, Wisp, Volt |
+| ⚔️ **Warframe** | High-Level Survival & Grinding | Harrow, Ash, Oberon |
@@ -209,7 +182,7 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
| :--- | :---: | :--- |
| 📝 **Markdown Editor Pro** | `Avalonia UI` • `C#` | Desktop-Editor mit Live-Rendering, Math-Support und Theme-Engine. |
| 💧 **CloudDrop** | `ASP.NET Core` • `Docker` | Self-hosted File-Sharing Service für schnelle Uploads & temporäre Links. |
-| 💳 **KasseApp** | `C#` • `SQLite` • `Avalonia` | Modulares Kassensystem mit Offline-Synchronisation für Events & Vereine. |
+| 💳 **KasseApp** | `C#` • `PostgreSQL` • `Avalonia` | Modulares Kassensystem mit Offline-Synchronisation für Events & Vereine. |
| 🥤 **DrinkReminder** | `C#` • `Avalonia UI` | Schicker Desktop- & Mobile-Helfer für gesunde Hydration im Entwickleralltag. |
---
@@ -219,9 +192,9 @@ Ich bin **Nicki (Nicklas)**, angehender Softwareentwickler mit fundiertem Fokus
```csharp
var nicki = new Developer
{
- Drink = "Kühles Spezi oder Club-Mate",
- Workstation = "Pop!_OS on Linux Kernel",
- IDE = "JetBrains Rider 2024+",
+ Drink = "Wasser",
+ Workstation = "Fedora on Linux Kernel",
+ IDE = "JetBrains Rider",
Team = "WebCore Consulting",
Motto = "Measure twice, refactor once, ship autonomously."
};
diff --git a/heatmap.svg b/heatmap.svg
index 76b594c..3487580 100644
--- a/heatmap.svg
+++ b/heatmap.svg
@@ -74,7 +74,7 @@
🦊 NickiCloud • Persönliche Aktivität
- 26 Commits im letzten Jahr
+ 27 Commits im letzten Jahr
Sep
@@ -1173,7 +1173,7 @@
01.09.2026: 9 Commits
- 02.09.2026: 10 Commits
+ 02.09.2026: 11 Commits
03.09.2026: 0 Commits
@@ -1192,7 +1192,7 @@
📦
- 26
+ 27
Jahres-Beiträge
@@ -1209,28 +1209,28 @@
-
- C#: 57,4%
+
+ C#: 57,7%
-
- HTML: 39,2%
+
+ HTML: 39,0%
-
+
CSS: 2,2%
-
+
JavaScript: 0,4%
-
+
PowerShell: 0,4%
- C# 57,4%
+ C# 57,7%
- HTML 39,2%
+ HTML 39,0%
CSS 2,2%
diff --git a/productivity.svg b/productivity.svg
index 52314bc..dc2c1ea 100644
--- a/productivity.svg
+++ b/productivity.svg
@@ -46,7 +46,7 @@
⏱️ Coding Biorhythmus • Aktivitäts-Phasen (CET)
- 🌙 Night-Owl (Höchste Produktivität am Abend & nachts)
+ 🌙 Night-Owl (Produktiv am Abend und nachts)
@@ -69,15 +69,15 @@
🌆 Abend
(18:00 - 24:00)
-
- 68,4%
+
+ 73,7%
🌙 Nacht
(00:00 - 06:00)
-
- 26,3%
+
+ 21,1%
diff --git a/src/ProfileManager/Services/StatsCalculator.cs b/src/ProfileManager/Services/StatsCalculator.cs
index bfcf2be..ed939e6 100644
--- a/src/ProfileManager/Services/StatsCalculator.cs
+++ b/src/ProfileManager/Services/StatsCalculator.cs
@@ -184,8 +184,8 @@ public static class StatsCalculator
};
string archetype = (nightCount + eveningCount >= morningCount + afternoonCount)
- ? "🌙 Night-Owl (Höchste Produktivität am Abend & nachts)"
- : "⚡ Day-Runner (Fokus während der regulären Tagesstunden)";
+ ? "🌙 Night-Owl (Produktiv am Abend und nachts)"
+ : "⚡ Day-Runner (Fokus am Tag)";
var productivity = new ProductivityStats
{
diff --git a/src/ProfileManager/Services/SvgGenerator.cs b/src/ProfileManager/Services/SvgGenerator.cs
index b5889ed..db206a6 100644
--- a/src/ProfileManager/Services/SvgGenerator.cs
+++ b/src/ProfileManager/Services/SvgGenerator.cs
@@ -387,7 +387,7 @@ public static class SvgGenerator
sb.AppendLine(" ");
sb.AppendLine(" ⏱️ Coding Biorhythmus • Aktivitäts-Phasen (CET)");
- string badgeText = prod.DevArchetype;
+ string badgeText = XmlEscape(prod.DevArchetype);
sb.AppendLine($" ");
sb.AppendLine($" ");
sb.AppendLine($" {badgeText}");
@@ -429,6 +429,16 @@ public static class SvgGenerator
return sb.ToString();
}
+ private static string XmlEscape(string? text)
+ {
+ if (string.IsNullOrEmpty(text)) return string.Empty;
+ return text.Replace("&", "&")
+ .Replace("<", "<")
+ .Replace(">", ">")
+ .Replace("\"", """)
+ .Replace("'", "'");
+ }
+
private static void RenderMetricCard(StringBuilder sb, int x, int y, int w, int h, string icon, string value, string label)
{
sb.AppendLine($" ");