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