feat: landing page — Noveria Operations + Coming Soon
CI - Build & Test / Backend (.NET) (push) Successful in 30s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 19s
CI - Build & Test / Security Check (push) Successful in 3s

This commit is contained in:
2026-06-16 20:59:11 +02:00
parent c496608c86
commit 9f149e1c91
4 changed files with 3185 additions and 2 deletions
+3088
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -40,7 +40,7 @@ onMounted(() => {
</script> </script>
<template> <template>
<RouterView v-if="route.name === 'Login' || route.name === 'Dashboard'" /> <RouterView v-if="route.name === 'Login' || route.name === 'Dashboard' || route.name === 'Landing'" />
<div v-else class="shell"> <div v-else class="shell">
<AppSidebar <AppSidebar
:active-view="activeView" :active-view="activeView"
+2 -1
View File
@@ -11,10 +11,11 @@ import IncidentsView from './views/IncidentsView.vue'
import CalendarView from './views/CalendarView.vue' import CalendarView from './views/CalendarView.vue'
import NexusLayout from './layouts/NexusLayout.vue' import NexusLayout from './layouts/NexusLayout.vue'
import FlowBoard from './views/Dashboard/FlowBoard.vue' import FlowBoard from './views/Dashboard/FlowBoard.vue'
import LandingView from './views/LandingView.vue'
const routes = [ const routes = [
{ path: '/login', name: 'Login', component: LoginView, meta: { public: true } }, { path: '/login', name: 'Login', component: LoginView, meta: { public: true } },
{ path: '/', redirect: '/dashboard' }, { path: '/', name: 'Landing', component: LandingView, meta: { public: true } },
// V2 Dashboard (neues NexusLayout + FlowBoard) // V2 Dashboard (neues NexusLayout + FlowBoard)
{ {
+94
View File
@@ -0,0 +1,94 @@
<script setup lang="ts">
/**
* LandingView Modern, mysterious landing page for Nexus.
* Uses GalaxyBackground as the full-screen backdrop.
* No sidebar, no navigation, no auth gate.
*/
import GalaxyBackground from '../components/background/GalaxyBackground.vue'
</script>
<template>
<div class="landing-root">
<GalaxyBackground />
<div class="landing-content">
<h1 class="headline">Noveria Operations</h1>
<p class="subtitle">Coming Soon</p>
</div>
<footer class="landing-footer">Minh Bao</footer>
</div>
</template>
<style scoped>
.landing-root {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
overflow: hidden;
}
.landing-content {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
animation: fadeIn 1.8s ease-out forwards;
pointer-events: none;
}
.headline {
font-family: 'Space Grotesk', sans-serif;
font-size: clamp(2.5rem, 6vw, 5rem);
font-weight: 500;
letter-spacing: 0.04em;
color: #ece9ff;
text-shadow:
0 0 20px rgba(124, 108, 255, 0.4),
0 0 60px rgba(124, 108, 255, 0.15),
0 0 120px rgba(124, 108, 255, 0.08);
margin: 0;
line-height: 1.1;
}
.subtitle {
font-family: 'Manrope', sans-serif;
font-size: clamp(0.95rem, 1.6vw, 1.25rem);
font-weight: 300;
letter-spacing: 0.3em;
text-transform: uppercase;
color: rgba(168, 163, 214, 0.65);
margin: 0;
}
.landing-footer {
position: absolute;
bottom: 28px;
left: 0;
right: 0;
z-index: 1;
text-align: center;
font-family: 'Manrope', sans-serif;
font-size: 11px;
font-weight: 300;
letter-spacing: 0.15em;
color: rgba(168, 163, 214, 0.35);
pointer-events: none;
}
@keyframes fadeIn {
0% {
opacity: 0;
transform: translateY(16px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
</style>