feat: noveria.net coming soon landingpage with galaxy theme
CI - Build & Test / Lint & Build (push) Successful in 8s
CI - Build & Test / Lint & Build (push) Successful in 8s
This commit is contained in:
@@ -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"
|
||||||
@@ -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
@@ -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
@@ -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 & 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>© 2026 Noveria</p>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+21
@@ -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";
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user