From 59dc70f62f65439f7b6342e1a3efbba8f69a40f4 Mon Sep 17 00:00:00 2001 From: Theo Tappe Date: Wed, 20 May 2026 14:04:24 +0200 Subject: [PATCH] update about text and elevate about button --- .../win/tap_tap/papertrader/pages/About.kt | 54 +++++-------------- .../win/tap_tap/papertrader/pages/Page.kt | 12 ++--- 2 files changed, 18 insertions(+), 48 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/About.kt b/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/About.kt index fec0e69..25fe969 100644 --- a/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/About.kt +++ b/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/About.kt @@ -10,50 +10,16 @@ import win.tap_tap.papertrader.components.LanguageSelect fun Texts.getAbout(): String { return when (selectedLanguage()) { -// Languages.ENGLISH -> """ -//#### The Vision -// -//This paper trading platform was designed to bridge the gap between "responsible investing" and the fun of the market without the actual risk of losing capital. -//To do that you can compete against your friends in Challenges, to see who can generate the highest return with a given cash on the markets. -//The app supports Android, Web (via WebAssembly and JS) and Desktop. -// -//#### Motivation -// -// I am Theo Tappe, currently studying informatics and wanted to learn KMP and having some fun with friends using the app. -// -//#### Technologies Used -// -//- **Kotlin Multiplatform (KMP)**: an open-source technology that allows you to use a single codebase for all supported platforms including the server while still running natively -//- **K3S (Kubernetes)**: lightweight Kubernetes distribution for managing the docker server -//- **AlpacaAPI**: an trading API where the server gets all the stock data from -//- **Ktor**: asynchronous framework for datatransfer between server and client -//- **NixOS**: the operating system K3S runs on which is defined declaratively and therefore reproducable and reliable -//- **Proxmox**: type 1 hypervisor that allows to run multiple services on my personal server -//- **SqlDelight**: typsafe API to interact with a sqlight database -// -//#### Roll of Technologies -// -//- **KMP**: -// - Native Performance: KMP compiles to native binaries ensuring that the app stays responsive. -// - Shared Code: All of the frontend code is shared between the supportet platforms, so that the project can be implemented by a single developer. -// - Shared Data: All Data-Transfer-Objects are shared between the frontend and backend which reduces bugs. -//- **Server Managing**: -// - **Proxmox**: has multple virtual maschines and one runs NixOS with Kubernetes -// - **NixOS**: Operating System of the kubernetes (single-node) cluster, with high maintalibility and ... in mind -// - **K3S**: Manages multliple servers with this backend, nextcloud and vaultwarden among other things -//- **Backend**: -// - **Ktor**: handles all the network traffic and data serialisation -// - **SqlDelight**: Typesafe API which is used to store all data -//- **Frontend / KMP**: -// - **Jetpack Compose**: UI implementation which is shared accross all supportet -//""" - - Languages.ENGLISH -> """ + Languages.ENGLISH -> + """ #### Motivation This application was developed by Theo Tappe as a comprehensive technical showcase for my application and to have some fun with friends. It demonstrates a full-stack approach, combining cross-platform development with a robust, automated infrastructure. +#### Links + +All code can be found on my gitlab instance: https://gitlab.tap-tap.win/root/taptappapertrader #### Frontend Architecture @@ -102,13 +68,17 @@ This minimizes "it works on my machine" issues and ensures a stable production e The entire stack is hosted on a Proxmox VE cluster. This allows me to manage an internal network including TrueNAS for storage, OPNsense for networking and NixOS for deploying. """ - - Languages.GERMAN -> """ + Languages.GERMAN -> + """ #### Motivation Diese Anwendung wurde von Theo Tappe als umfassendes technisches Showcase für meine Bewerbung sowie als Freizeitprojekt für Freunde entwickelt. Sie demonstriert einen Full-Stack-Ansatz, der moderne plattformübergreifende Entwicklung mit einer robusten, automatisierten Infrastruktur kombiniert. +#### Links + +Der gesamt Code kann auf meiner Gitlab Instanz und kann hier gefunden werden: https://gitlab.tap-tap.win/root/taptappapertrader + #### Frontend-Architektur - **Native Performance via KMP**: @@ -162,4 +132,4 @@ fun About() { LanguageSelect() ButtonSpacer() Markdown(texts.getAbout()) -} \ No newline at end of file +} diff --git a/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/Page.kt b/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/Page.kt index 8ebef7e..96243cd 100644 --- a/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/Page.kt +++ b/composeApp/src/commonMain/kotlin/win/tap_tap/papertrader/pages/Page.kt @@ -6,16 +6,14 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.ChevronLeft import androidx.compose.material.icons.rounded.Refresh -import androidx.compose.material3.FilledIconButton -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text +import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.ktor.util.reflect.* import win.tap_tap.papertrader.LocalBackStack +import win.tap_tap.papertrader.components.AppText import win.tap_tap.papertrader.components.AppTextLink import win.tap_tap.papertrader.components.ButtonSpacer import win.tap_tap.papertrader.routes.Routes @@ -77,10 +75,12 @@ fun Page( ButtonSpacer() } if (!curNavKey.instanceOf(Routes.About::class)) { - AppTextLink("About", onClick = { + ElevatedButton(onClick = { backStack.add(Routes.About) viewModel?.reset() - }) + }) { + AppText("About") + } ButtonSpacer() } if (!curNavKey.instanceOf(Routes.PrivacyPolicy::class)) {