diff --git a/public/index.html b/public/index.html
index 62b2d4a..1749106 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1,9 +1,9 @@
-
+
- Robert Müller — Software Engineer & Architect
+ Robert Müller — Webseite im Aufbau
@@ -15,7 +15,6 @@
--border-color: rgba(255, 255, 255, 0.08);
--accent-color: #6366f1;
--accent-glow: rgba(99, 102, 241, 0.3);
- --accent-secondary: #06b6d4;
--text-main: #f8fafc;
--text-muted: #94a3b8;
}
@@ -46,7 +45,7 @@
width: 60vw;
height: 60vw;
border-radius: 50%;
- background: radial-gradient(circle, rgba(99, 102, 241, 0.15) 0%, rgba(6, 182, 212, 0.05) 50%, rgba(0,0,0,0) 70%);
+ background: radial-gradient(circle, rgba(99, 102, 241, 0.12) 0%, rgba(6, 182, 212, 0.04) 50%, rgba(0,0,0,0) 70%);
filter: blur(120px);
z-index: 0;
top: -10vw;
@@ -59,7 +58,7 @@
width: 50vw;
height: 50vw;
border-radius: 50%;
- background: radial-gradient(circle, rgba(6, 182, 212, 0.15) 0%, rgba(99, 102, 241, 0.05) 50%, rgba(0,0,0,0) 70%);
+ background: radial-gradient(circle, rgba(6, 182, 212, 0.12) 0%, rgba(99, 102, 241, 0.04) 50%, rgba(0,0,0,0) 70%);
filter: blur(120px);
z-index: 0;
bottom: -10vw;
@@ -81,7 +80,7 @@
border-radius: 24px;
padding: 4rem 3rem;
width: 100%;
- max-width: 650px;
+ max-width: 600px;
text-align: center;
z-index: 10;
box-shadow: 0 30px 60px -15px rgba(0,0,0,0.6);
@@ -89,27 +88,44 @@
}
.container:hover {
- border-color: rgba(99, 102, 241, 0.25);
+ border-color: rgba(99, 102, 241, 0.2);
}
- /* Badge */
- .badge {
- display: inline-block;
- background: rgba(99, 102, 241, 0.08);
+ /* Construction / Under Construction Icon */
+ .icon-wrapper {
+ width: 80px;
+ height: 80px;
+ margin: 0 auto 2rem;
+ background: rgba(99, 102, 241, 0.1);
border: 1px solid rgba(99, 102, 241, 0.3);
+ border-radius: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
color: #a5b4fc;
- padding: 0.4rem 1rem;
- border-radius: 99px;
- font-size: 0.8rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- margin-bottom: 2rem;
+ position: relative;
+ }
+
+ .icon-wrapper::after {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ border-radius: 20px;
+ border: 1px solid var(--accent-color);
+ opacity: 0;
+ transform: scale(0.9);
+ transition: all 0.5s ease;
+ }
+
+ .container:hover .icon-wrapper::after {
+ opacity: 1;
+ transform: scale(1.1);
}
/* Header */
h1 {
- font-size: 3rem;
+ font-size: 2.75rem;
font-weight: 800;
margin-bottom: 0.5rem;
background: linear-gradient(135deg, #ffffff 40%, #a5b4fc 100%);
@@ -119,73 +135,36 @@
}
.subtitle {
- font-size: 1.25rem;
- color: var(--accent-secondary);
+ font-size: 1.1rem;
+ color: var(--text-muted);
font-weight: 600;
margin-bottom: 1.5rem;
- letter-spacing: 0.05em;
+ letter-spacing: 0.15em;
text-transform: uppercase;
}
- /* Dynamic greeting */
+ .divider {
+ width: 60px;
+ height: 2px;
+ background: linear-gradient(90deg, var(--accent-color), #06b6d4);
+ margin: 1.5rem auto;
+ }
+
.greeting {
- font-size: 1.05rem;
+ font-size: 1rem;
color: var(--text-muted);
- margin-bottom: 2rem;
- min-height: 24px;
+ margin-bottom: 1.5rem;
font-style: italic;
}
p.description {
color: var(--text-muted);
- font-size: 1.15rem;
- line-height: 1.75;
+ font-size: 1.1rem;
+ line-height: 1.8;
margin-bottom: 2.5rem;
font-weight: 300;
}
- /* Skills Grid */
- .skills-title {
- font-size: 0.9rem;
- text-transform: uppercase;
- color: var(--text-muted);
- letter-spacing: 0.15em;
- margin-bottom: 1.2rem;
- font-weight: 600;
- }
-
- .skills-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 1rem;
- margin-bottom: 3rem;
- }
-
- .skill-card {
- background: rgba(255, 255, 255, 0.015);
- border: 1px solid var(--border-color);
- border-radius: 12px;
- padding: 1rem;
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- }
-
- .skill-card:hover {
- background: var(--panel-hover);
- border-color: rgba(6, 182, 212, 0.3);
- transform: translateY(-4px);
- }
-
- .skill-card h3 {
- font-size: 0.95rem;
- font-weight: 600;
- margin-bottom: 0.25rem;
- }
-
- .skill-card p {
- font-size: 0.8rem;
- color: var(--text-muted);
- }
-
/* Actions / Button */
.btn {
display: inline-flex;
@@ -194,7 +173,7 @@
background: linear-gradient(135deg, var(--accent-color) 0%, #4f46e5 100%);
color: white;
text-decoration: none;
- padding: 1rem 2.25rem;
+ padding: 0.9rem 2.25rem;
border-radius: 99px;
font-size: 1rem;
font-weight: 600;
@@ -210,15 +189,15 @@
filter: brightness(1.1);
}
- .btn:active {
- transform: translateY(0);
+ .btn svg {
+ margin-right: 8px;
}
/* Footer */
footer {
margin-top: 3rem;
font-size: 0.8rem;
- color: rgba(255,255,255,0.2);
+ color: rgba(255,255,255,0.15);
z-index: 10;
}
@@ -227,9 +206,6 @@
padding: 3rem 1.5rem;
}
h1 { font-size: 2.25rem; }
- .skills-grid {
- grid-template-columns: 1fr;
- }
}
@@ -238,37 +214,34 @@
-
Online
+
+
Robert Müller
-
Software Engineer & Architect
+
Webseite im Aufbau
+
+
...
- Specializing in building robust, high-performance distributed systems, container orchestration, and security-hardened self-hosted platforms. Committed to craftsmanship, optimization, and clean architectures.
+ Herzlich willkommen! Meine neue Internetpräsenz befindet sich aktuell im Aufbau. Bitte schauen Sie zu einem späteren Zeitpunkt noch einmal vorbei. Bei Fragen oder Mitteilungen können Sie mich gerne per E-Mail kontaktieren.
-
Core Competencies
-
-
-
DevOps
-
Docker & Compose
-
-
-
Backend
-
PostgreSQL & Node.js
-
-
-
SysOps
-
Nginx & Linux OS
-
-
-
-
Get In Touch
+
+
+
+
+
+ Kontakt aufnehmen
+
- © 2026 Robert Müller. All rights reserved.
+ © 2026 Robert Müller. Alle Rechte vorbehalten.
@@ -285,7 +258,7 @@
if (typeof formatGreeting === 'function') {
greetingBox.textContent = formatGreeting(timeOfDay, 'Robert Müller');
} else {
- greetingBox.textContent = `Welcome to Robert Müller's portfolio!`;
+ greetingBox.textContent = `Herzlich willkommen!`;
}
});
diff --git a/public/js/utils.js b/public/js/utils.js
index 49f5c0b..a41c601 100644
--- a/public/js/utils.js
+++ b/public/js/utils.js
@@ -4,7 +4,13 @@ function validateEmail(email) {
}
function formatGreeting(timeOfDay, name) {
- return `Good ${timeOfDay}, welcome to ${name}'s portfolio!`;
+ const greetings = {
+ morning: 'Guten Morgen',
+ afternoon: 'Guten Tag',
+ evening: 'Guten Abend'
+ };
+ const greeting = greetings[timeOfDay] || 'Herzlich willkommen';
+ return `${greeting}, herzlich willkommen auf der Webseite von ${name}!`;
}
if (typeof module !== 'undefined' && module.exports) {
diff --git a/tests/unit.test.js b/tests/unit.test.js
index 680a0aa..ec03cb7 100644
--- a/tests/unit.test.js
+++ b/tests/unit.test.js
@@ -11,6 +11,6 @@ test('Unit Tests: validateEmail', (t) => {
test('Unit Tests: formatGreeting', (t) => {
assert.strictEqual(
formatGreeting('evening', 'Robert Müller'),
- "Good evening, welcome to Robert Müller's portfolio!"
+ "Guten Abend, herzlich willkommen auf der Webseite von Robert Müller!"
);
});