refactor(frontend): Landing‑Seite als Start gesetzt, Navigation um AppScreen.Landing erweitert und Footer‑Text modernisiert.
This commit is contained in:
parent
f402fbaf19
commit
7b5fd063fb
|
|
@ -20,7 +20,7 @@ fun AppFooter() {
|
|||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Text(
|
||||
text = "© 2025 Meldestelle - Built with Kotlin Multiplatform",
|
||||
text = "© Equest-Events · Entwickelt in Österreich",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
textAlign = TextAlign.Center
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package at.mocode.clients.shared.navigation
|
||||
|
||||
sealed class AppScreen {
|
||||
data object Landing : AppScreen()
|
||||
data object Home : AppScreen()
|
||||
data object Login : AppScreen()
|
||||
data object Ping : AppScreen()
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ fun MainApp() {
|
|||
modifier = Modifier.fillMaxSize(),
|
||||
color = MaterialTheme.colorScheme.background
|
||||
) {
|
||||
var currentScreen by remember { mutableStateOf<AppScreen>(AppScreen.Home) }
|
||||
var currentScreen by remember { mutableStateOf<AppScreen>(AppScreen.Landing) }
|
||||
|
||||
// Resolve AuthTokenManager from Koin
|
||||
val authTokenManager = koinInject<AuthTokenManager>()
|
||||
|
|
@ -57,6 +57,10 @@ fun MainApp() {
|
|||
}
|
||||
|
||||
when (currentScreen) {
|
||||
is AppScreen.Landing -> LandingScreen(
|
||||
onPrimaryCta = { currentScreen = AppScreen.Login },
|
||||
onSecondary = { currentScreen = AppScreen.Home }
|
||||
)
|
||||
is AppScreen.Home -> WelcomeScreen(
|
||||
authTokenManager = authTokenManager,
|
||||
onOpenPing = { currentScreen = AppScreen.Ping },
|
||||
|
|
@ -83,6 +87,117 @@ fun MainApp() {
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun LandingScreen(
|
||||
onPrimaryCta: () -> Unit,
|
||||
onSecondary: () -> Unit
|
||||
) {
|
||||
// Minimal Landing-Layout: Hero → Manifest → Features → Footer
|
||||
Column(modifier = Modifier.fillMaxSize()) {
|
||||
// Hero
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 24.dp, vertical = 40.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp)
|
||||
) {
|
||||
// Wortmarke (Platzhalter)
|
||||
Text(
|
||||
text = "Equest‑Events",
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
color = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
|
||||
Text(
|
||||
text = "Die kompetente Turnier‑Meldestelle.",
|
||||
style = MaterialTheme.typography.headlineLarge
|
||||
)
|
||||
Text(
|
||||
text = "Equest‑Events entwickelt die digitale Infrastruktur des österreichischen Pferdesports – aus der Praxis. Für die Praxis.",
|
||||
style = MaterialTheme.typography.bodyLarge
|
||||
)
|
||||
Row(horizontalArrangement = Arrangement.spacedBy(12.dp)) {
|
||||
Button(onClick = onPrimaryCta) { Text("Anmelden (Pilot‑Partner)") }
|
||||
TextButton(onClick = onSecondary) { Text("Mehr erfahren") }
|
||||
}
|
||||
}
|
||||
|
||||
// Manifest
|
||||
Surface(color = MaterialTheme.colorScheme.surfaceVariant) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 24.dp, vertical = 40.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp)
|
||||
) {
|
||||
Text("Unser Anspruch: Durchdachtes System.", style = MaterialTheme.typography.headlineMedium)
|
||||
Text(
|
||||
"Die Meldestelle ist das Herzstück jedes Turniers. Wenn sie stolpert, stockt der Sport. Wir verstehen den Balanceakt zwischen Veranstaltern, Reitern und den Verbänden.",
|
||||
style = MaterialTheme.typography.bodyLarge
|
||||
)
|
||||
Text(
|
||||
"Deshalb entwickeln wir Equest‑Events nicht am Reißbrett, sondern direkt am Turnier – aus der Sicht der Meldestelle, der Richter, der Zeitnehmer und aller Funktionäre.",
|
||||
style = MaterialTheme.typography.bodyLarge
|
||||
)
|
||||
Text(
|
||||
"Aktuell befindet sich unser System in einer Pilotphase für C‑ und C‑NEU‑Turniere. Wir wachsen organisch – Seite an Seite mit unseren Pilot‑Partnern.",
|
||||
style = MaterialTheme.typography.bodyLarge
|
||||
)
|
||||
Text(
|
||||
"Jedes Feedback fließt direkt in die Entwicklung ein, um eine Lösung zu schaffen, die den realen Bedürfnissen vor Ort entspricht.",
|
||||
style = MaterialTheme.typography.bodyLarge
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Features
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 24.dp, vertical = 40.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(24.dp)
|
||||
) {
|
||||
Text("Die drei Säulen", style = MaterialTheme.typography.headlineMedium)
|
||||
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
|
||||
FeatureCard(
|
||||
number = "01",
|
||||
title = "Regelwerks‑Intelligenz (FEI & ÖTO)",
|
||||
body = "Wir verbinden ÖTO und FEI – und nehmen Ihnen die Validierungs‑Komplexität ab. Von der Lizenzprüfung bis zur korrekten Anwendung der Bestimmungen."
|
||||
)
|
||||
FeatureCard(
|
||||
number = "02",
|
||||
title = "Plattformunabhängig & Offline‑fähig",
|
||||
body = "Stabil auf Laptop und mobil. Dank Offline‑Unterstützung arbeiten Sie nahtlos weiter – selbst wenn die Internetverbindung am Platz abreißt."
|
||||
)
|
||||
FeatureCard(
|
||||
number = "03",
|
||||
title = "Fokus auf den Sport",
|
||||
body = "Wir reduzieren Administration dort, wo es sinnvoll ist – damit sich alle auf das Wesentliche konzentrieren können: den Reitsport."
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Footer
|
||||
at.mocode.clients.shared.commonui.components.AppFooter()
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun FeatureCard(number: String, title: String, body: String) {
|
||||
Surface( tonalElevation = 0.dp ) {
|
||||
Row(modifier = Modifier.fillMaxWidth()) {
|
||||
Column(modifier = Modifier.width(56.dp).padding(top = 6.dp)) {
|
||||
Text(text = number, style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.primary)
|
||||
}
|
||||
Column(modifier = Modifier.weight(1f)) {
|
||||
Text(title, style = MaterialTheme.typography.titleLarge)
|
||||
Spacer(Modifier.height(4.dp))
|
||||
Text(body, style = MaterialTheme.typography.bodyLarge)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun WelcomeScreen(
|
||||
authTokenManager: AuthTokenManager,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user