feat: noveria.net coming soon landingpage with galaxy theme
CI - Build & Test / Lint & Build (push) Successful in 8s

This commit is contained in:
2026-06-14 15:52:31 +02:00
parent e389d94efd
commit 2732df9795
5 changed files with 295 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
name: CI - Build & Test
run-name: 🔍 CI ${{ gitea.ref_name }} by @${{ gitea.actor }}
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
lint:
name: Lint & Build
runs-on: linux
steps:
- name: Checkout
uses: actions/checkout@v4
- name: HTML Validate
run: |
echo "Checking HTML structure..."
if grep -q "<!DOCTYPE html>" index.html; then
echo "✅ HTML5 doctype present"
else
echo "❌ Missing HTML5 doctype"
exit 1
fi
- name: CSS Check
run: |
echo "Checking CSS..."
if grep -q "@media" css/style.css; then
echo "✅ Responsive styles present"
else
echo "⚠️ No responsive styles found"
fi
- name: Nginx Config Test
run: |
echo "Checking nginx conf..."
docker run --rm -v $PWD/nginx.conf:/tmp/nginx.conf:ro nginx:1.27-alpine nginx -t -c /tmp/nginx.conf 2>&1 || true
- name: Build Docker Image
run: |
docker build -t noveria-landing:ci .
echo "✅ Build successful"
+5
View File
@@ -0,0 +1,5 @@
FROM nginx:1.27-alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY index.html /usr/share/nginx/html/
COPY css/ /usr/share/nginx/html/css/
EXPOSE 80
+188
View File
@@ -0,0 +1,188 @@
/* ═══════════════════════════════════════════════
Noveria Landing Galaxy Theme
═══════════════════════════════════════════════ */
:root {
--bg: #080a0f;
--tx: #e8eaf0;
--tx-2: #a5adba;
--tx-3: #687181;
--accent: #8b7cf6;
--accent-glow: rgba(139, 124, 246, .35);
--grad: linear-gradient(135deg, #7c6cff, #b557f6);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
height: 100%;
overflow: hidden;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, sans-serif;
color: var(--tx);
background: var(--bg);
}
/* ═══ Galaxy Background ═══ */
.galaxy {
position: fixed;
inset: 0;
z-index: 0;
background:
radial-gradient(80% 60% at 50% 40%, rgba(139, 124, 246, .08), transparent 60%),
radial-gradient(60% 50% at 80% 80%, rgba(181, 87, 246, .06), transparent 55%),
radial-gradient(50% 40% at 20% 20%, rgba(124, 108, 255, .05), transparent 50%),
var(--bg);
}
.stars, .stars2, .stars3 {
position: absolute;
inset: 0;
background: transparent;
}
.stars {
background-image:
radial-gradient(1px 1px at 10% 15%, rgba(255,255,255,.8), transparent),
radial-gradient(1px 1px at 25% 45%, rgba(255,255,255,.6), transparent),
radial-gradient(1.5px 1.5px at 40% 10%, rgba(200,190,255,.9), transparent),
radial-gradient(1px 1px at 55% 70%, rgba(255,255,255,.7), transparent),
radial-gradient(1px 1px at 70% 30%, rgba(255,255,255,.5), transparent),
radial-gradient(1.5px 1.5px at 85% 55%, rgba(180,170,255,.8), transparent),
radial-gradient(1px 1px at 15% 80%, rgba(255,255,255,.6), transparent),
radial-gradient(1px 1px at 60% 85%, rgba(255,255,255,.4), transparent),
radial-gradient(1px 1px at 90% 20%, rgba(255,255,255,.7), transparent);
}
.stars2 {
background-image:
radial-gradient(1px 1px at 5% 25%, rgba(255,255,255,.9), transparent),
radial-gradient(1.5px 1.5px at 20% 60%, rgba(220,210,255,.8), transparent),
radial-gradient(1px 1px at 35% 35%, rgba(255,255,255,.5), transparent),
radial-gradient(1px 1px at 50% 15%, rgba(255,255,255,.6), transparent),
radial-gradient(1px 1px at 65% 55%, rgba(255,255,255,.7), transparent),
radial-gradient(1.5px 1.5px at 80% 75%, rgba(200,190,255,.8), transparent),
radial-gradient(1px 1px at 95% 40%, rgba(255,255,255,.5), transparent),
radial-gradient(1px 1px at 45% 90%, rgba(255,255,255,.4), transparent);
animation: twinkle 4s ease-in-out infinite alternate;
}
.stars3 {
background-image:
radial-gradient(1px 1px at 8% 65%, rgba(255,255,255,.6), transparent),
radial-gradient(1px 1px at 18% 15%, rgba(255,255,255,.5), transparent),
radial-gradient(1.5px 1.5px at 30% 80%, rgba(210,200,255,.7), transparent),
radial-gradient(1px 1px at 48% 45%, rgba(255,255,255,.8), transparent),
radial-gradient(1px 1px at 62% 25%, rgba(255,255,255,.4), transparent),
radial-gradient(1px 1px at 75% 65%, rgba(255,255,255,.6), transparent),
radial-gradient(1px 1px at 88% 8%, rgba(255,255,255,.7), transparent),
radial-gradient(1.5px 1.5px at 12% 48%, rgba(190,180,255,.8), transparent);
animation: twinkle 6s ease-in-out infinite alternate-reverse;
}
@keyframes twinkle {
0% { opacity: .5; }
100% { opacity: 1; }
}
/* ═══ Content ═══ */
.hero {
position: relative;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
padding: 2rem;
}
.hero-content {
text-align: center;
animation: fade-up .8s ease-out;
}
@keyframes fade-up {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}
.hero-title {
font-family: 'Space Grotesk', Inter, sans-serif;
font-size: clamp(2.5rem, 8vw, 5rem);
font-weight: 700;
letter-spacing: .06em;
background: var(--grad);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
filter: drop-shadow(0 0 28px var(--accent-glow));
margin-bottom: .5rem;
}
.hero-subtitle {
font-size: clamp(1rem, 2.5vw, 1.35rem);
color: var(--tx-2);
letter-spacing: .04em;
margin-bottom: 2rem;
}
.status-badge {
display: inline-block;
padding: .6rem 1.8rem;
border-radius: 99px;
border: 1px solid rgba(139, 124, 246, .25);
background: rgba(139, 124, 246, .08);
color: var(--accent);
font-size: .85rem;
font-weight: 600;
letter-spacing: .08em;
text-transform: uppercase;
box-shadow: 0 0 32px rgba(139, 124, 246, .12);
margin-bottom: 2rem;
animation: pulse-badge 3s ease-in-out infinite;
}
@keyframes pulse-badge {
0%, 100% { box-shadow: 0 0 24px rgba(139, 124, 246, .08); }
50% { box-shadow: 0 0 40px rgba(139, 124, 246, .20); }
}
.links {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
}
.link {
color: var(--tx-3);
text-decoration: none;
font-size: .9rem;
transition: color .2s;
}
.link:hover { color: var(--tx); }
.sep {
color: var(--tx-3);
font-size: .9rem;
}
/* ═══ Footer ═══ */
.footer {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 1;
text-align: center;
padding: 1rem;
font-size: .75rem;
color: var(--tx-3);
}
/* ═══ Responsive ═══ */
@media (max-width: 768px) {
.hero { padding: 1rem; }
.hero-title { font-size: clamp(1.8rem, 12vw, 3.5rem); }
.hero-subtitle { font-size: 1rem; }
}
+36
View File
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Noveria Coming Soon</title>
<meta name="description" content="Noveria Tools, Infrastruktur & KI-Lösungen. Coming soon.">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!-- Galaxy Background -->
<div class="galaxy">
<div class="stars"></div>
<div class="stars2"></div>
<div class="stars3"></div>
</div>
<!-- Content -->
<main class="hero">
<div class="hero-content">
<h1 class="hero-title">Noveria</h1>
<p class="hero-subtitle">Tools, Infrastruktur &amp; KI-Lösungen</p>
<div class="status-badge">Coming Soon</div>
<div class="links">
<a href="https://nexus.noveria.net" class="link">Nexus Dashboard</a>
<span class="sep">·</span>
<a href="https://git.noveria.net" class="link">Git</a>
</div>
</div>
</main>
<footer class="footer">
<p>&copy; 2026 Noveria</p>
</footer>
</body>
</html>
+21
View File
@@ -0,0 +1,21 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# Cache static assets
location /css/ {
expires 7d;
add_header Cache-Control "public, immutable";
}
}