From 32da947fb9fa9330cd0844d9130ebe4eedfc76e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 28 Feb 2026 11:01:13 +0100 Subject: [PATCH 01/10] Migrate to zensical --- .github/workflows/build.yaml | 10 ++-- .github/workflows/documentation.yaml | 6 +- docs/README.md | 10 ++-- docs/mkdocs.yml | 32 ----------- docs/pages/assets/turnierplan.css | 46 ---------------- docs/pages/{img => images}/favicon.ico | Bin docs/pages/{img => images}/logo-192.png | Bin docs/pages/index.md | 6 +- docs/requirements.txt | 2 +- docs/zensical.toml | 70 ++++++++++++++++++++++++ 10 files changed, 89 insertions(+), 93 deletions(-) delete mode 100644 docs/mkdocs.yml delete mode 100644 docs/pages/assets/turnierplan.css rename docs/pages/{img => images}/favicon.ico (100%) rename docs/pages/{img => images}/logo-192.png (100%) create mode 100644 docs/zensical.toml diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e13ff301..586b75ad 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -89,22 +89,22 @@ jobs: id-token: write steps: - uses: actions/checkout@v5 - - name: "Set up Python 3.12" + - name: "Set up Python 3.x" uses: actions/setup-python@v5 with: - python-version: "3.12" + python-version: "3.x" - name: "Install requirements" run: "python3 -m pip install -r requirements.txt" working-directory: "docs" - name: "Build documentation" - run: "python3 -m mkdocs build" + run: "zensical build --clean" working-directory: "docs" - name: "Setup Pages" uses: actions/configure-pages@v5 - - name: Upload artifact + - name: "Upload artifact" uses: actions/upload-pages-artifact@v3 with: path: "docs/site" - - name: Deploy to GitHub Pages + - name: "Deploy to GitHub Pages" id: deployment uses: actions/deploy-pages@v4 diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml index 977cc976..15df5328 100644 --- a/.github/workflows/documentation.yaml +++ b/.github/workflows/documentation.yaml @@ -12,13 +12,13 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v5 - - name: "Set up Python 3.12" + - name: "Set up Python 3.x" uses: actions/setup-python@v5 with: - python-version: "3.12" + python-version: "3.x" - name: "Install requirements" run: "python3 -m pip install -r requirements.txt" working-directory: "docs" - name: "Build documentation" - run: "python3 -m mkdocs build" + run: "zensical build --clean" working-directory: "docs" diff --git a/docs/README.md b/docs/README.md index c8f9dfa2..d46df637 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,16 +1,16 @@ ## turnierplan.NET · Documentation -This directory contains the source markdown files and mkdocs configuration for the publically available turnierplan.NET documentation: [https://docs.turnierplan.net](https://docs.turnierplan.net). +This directory contains the turnierplan.NET documentation. The content files use an extended markdown format and are build into static HTML using [zensical](https://zensical.org). The documentation is hosted at [docs.turnierplan.net](https://docs.turnierplan.net). -In order to build the documentation locally, you must first install Python and [mkdocs](https://www.mkdocs.org): +In order to build the documentation locally, you must first install Python and `zensical`: ``` pip install -r requirements.txt ``` -Next, you can either view the rendered documentation using the mkdocs-build-in server or you can generate the static website files: +Next, you can either view the rendered documentation using the zensical-built-in server or you can generate the static website files: ``` -python3 -m mkdocs serve # starts a local web server on port 8000 -python3 -m mkdocs build # generates static web site artifacts into the 'site' directory +python3 -m zensical serve # starts a local web server on port 8000 +python3 -m zensical build # generates static web site artifacts into the 'site' directory ``` diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml deleted file mode 100644 index b144ae2f..00000000 --- a/docs/mkdocs.yml +++ /dev/null @@ -1,32 +0,0 @@ -site_name: "turnierplan.NET" -site_author: "turnierplan.NET" -site_url: "https://docs.turnierplan.net" -site_description: "The administrator and user documentation for turnierplan.NET" - -repo_url: "https://github.com/turnierplan-NET/turnierplan.NET" -edit_uri: "blob/main/docs/pages/" - -copyright: "Copyright © 2026 Elias Hörner" - -docs_dir: "pages" - -theme: - name: mkdocs - color_mode: auto - user_color_mode_toggle: true - nav_style: dark - navigation_depth: 4 - locale: en - -nav: - - Home: "index.md" - - Installation: "installation.md" - - About: - - Releases: "https://github.com/turnierplan-NET/turnierplan.NET/releases" - - License: "https://github.com/turnierplan-NET/turnierplan.NET/blob/main/LICENSE" - -extra_css: - - "assets/turnierplan.css" - -markdown_extensions: - - admonition: diff --git a/docs/pages/assets/turnierplan.css b/docs/pages/assets/turnierplan.css deleted file mode 100644 index ac947a92..00000000 --- a/docs/pages/assets/turnierplan.css +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Some style improvements for the footer - */ - -footer hr { - opacity: 0.2; -} - -footer p { - font-size: 0.8em; - margin-bottom: 0.3em; -} - -/* - * Remove the sidebar on the homepage, copied from the mkdocs.org documentation - * => https://github.com/mkdocs/mkdocs/blob/2862536793b3c67d9d83c33e0dd6d50a791928f8/docs/css/extra.css#L48 - */ - -body.homepage > div.container > div.row > div.col-md-3 { - display: none; -} - -body.homepage > div.container > div.row > div.col-md-9 { - margin-left: 0; - flex: 0 0 100%; - max-width: 100%; -} -/* - * Some additional style changes for the homepage - */ - -body.homepage h1 { - margin-top: 2em; - margin-bottom: 0.7em; - text-align: center; - font-weight: bold; -} - -body.homepage > div.container p:first-of-type { - text-align: center; -} - -body.homepage > div.container img:first-of-type { - padding: unset; - border: unset; -} diff --git a/docs/pages/img/favicon.ico b/docs/pages/images/favicon.ico similarity index 100% rename from docs/pages/img/favicon.ico rename to docs/pages/images/favicon.ico diff --git a/docs/pages/img/logo-192.png b/docs/pages/images/logo-192.png similarity index 100% rename from docs/pages/img/logo-192.png rename to docs/pages/images/logo-192.png diff --git a/docs/pages/index.md b/docs/pages/index.md index b063cdca..bd136a83 100644 --- a/docs/pages/index.md +++ b/docs/pages/index.md @@ -1,9 +1,13 @@ +--- +icon: lucide/rocket +--- + # turnierplan.NET **turnierplan.NET** ist a free and open-source web application for football tournaments
- +

diff --git a/docs/requirements.txt b/docs/requirements.txt index 016bb16d..32b234e8 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1 @@ -mkdocs +zensical==0.0.24 diff --git a/docs/zensical.toml b/docs/zensical.toml new file mode 100644 index 00000000..14b88aab --- /dev/null +++ b/docs/zensical.toml @@ -0,0 +1,70 @@ +[project] + +site_name = "turnierplan.NET Documentation" +site_author = "turnierplan.NET" +site_url = "https://docs.turnierplan.net/" +site_description = "The administrator and user documentation for turnierplan.NET" + +repo_url = "https://github.com/turnierplan-NET/turnierplan.NET" +edit_uri = "blob/main/docs/pages/" + +copyright = "Copyright © 2026 Elias Hörner, turnierplan.NET" + +docs_dir = "pages" + +nav = [ + { "Getting Started" = "index.md" }, + { "Installation" = "installation.md" }, + { "Installation 2" = [ + "test/index.md", + { "Installation" = "installation3.md" }, + { "Installation" = "installation4.md" }, + ]} +] + +[project.theme] + +favicon = "images/favicon.ico" +language = "en" + +features = [ + "content.action.edit", + "content.code.annotate", + "content.code.copy", + "content.footnote.tooltips", + # "content.tabs.link", + # "content.tooltips", + "navigation.expand", + "navigation.footer", + "navigation.indexes", + "navigation.instant", + "navigation.instant.prefetch", + "navigation.path", + "navigation.sections", + "navigation.top", + "navigation.tracking", + "search.highlight", + # "toc.follow", + # "toc.integrate", +] + +[[project.theme.palette]] +scheme = "default" +accent = "green" +toggle.icon = "lucide/sun" +toggle.name = "Switch to dark mode" + +[[project.theme.palette]] +scheme = "slate" +accent = "green" +toggle.icon = "lucide/moon" +toggle.name = "Switch to light mode" + +[project.theme.font] +text = "Inter" +code = "Jetbrains Mono" +# TODO: Don't load fonts from Google + +[project.theme.icon] +logo = "lucide/trophy" + From 5acf06b623de79848cf48538ef967d189704bf64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 28 Feb 2026 16:51:43 +0100 Subject: [PATCH 02/10] Disable font loading --- docs/zensical.toml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/zensical.toml b/docs/zensical.toml index 14b88aab..680c38ac 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -26,6 +26,7 @@ nav = [ favicon = "images/favicon.ico" language = "en" +font = false features = [ "content.action.edit", @@ -60,11 +61,6 @@ accent = "green" toggle.icon = "lucide/moon" toggle.name = "Switch to light mode" -[project.theme.font] -text = "Inter" -code = "Jetbrains Mono" -# TODO: Don't load fonts from Google - [project.theme.icon] logo = "lucide/trophy" From cad1a7756a76888904c1efa4b579566a66429f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 28 Feb 2026 17:52:44 +0100 Subject: [PATCH 03/10] Add repo name --- docs/zensical.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/zensical.toml b/docs/zensical.toml index 680c38ac..fb8a43a2 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -5,6 +5,7 @@ site_author = "turnierplan.NET" site_url = "https://docs.turnierplan.net/" site_description = "The administrator and user documentation for turnierplan.NET" +repo_name = "turnierplan-NET/turnierplan.NET" repo_url = "https://github.com/turnierplan-NET/turnierplan.NET" edit_uri = "blob/main/docs/pages/" From cfc466d68591ff19160a7ea2decbfe6da71a43f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 28 Feb 2026 18:32:37 +0100 Subject: [PATCH 04/10] Add temporary overview page --- docs/pages/index.md | 15 +++++++++------ docs/zensical.toml | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/pages/index.md b/docs/pages/index.md index bd136a83..4aa15f57 100644 --- a/docs/pages/index.md +++ b/docs/pages/index.md @@ -1,16 +1,19 @@ --- -icon: lucide/rocket +icon: lucide/library-big --- -# turnierplan.NET +# Overview -**turnierplan.NET** ist a free and open-source web application for football tournaments +turnierplan.NET is an **open-source tournament planning application** ([GitHub](github.com/turnierplan-NET/turnierplan.NET)) for football clubs and anyone else who wants to invite teams, create schedules and report match outcomes. -
- +
+- :fontawesome-brands-html5: __HTML__ for content and structure +- :fontawesome-brands-js: __JavaScript__ for interactivity +- :fontawesome-brands-css3: __CSS__ for text running out of boxes +- :fontawesome-brands-internet-explorer: __Internet Explorer__ ... huh?
-
+ ## Getting Started diff --git a/docs/zensical.toml b/docs/zensical.toml index fb8a43a2..58df9405 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -9,12 +9,12 @@ repo_name = "turnierplan-NET/turnierplan.NET" repo_url = "https://github.com/turnierplan-NET/turnierplan.NET" edit_uri = "blob/main/docs/pages/" -copyright = "Copyright © 2026 Elias Hörner, turnierplan.NET" +copyright = "Copyright © 2026 Elias Hörner" docs_dir = "pages" nav = [ - { "Getting Started" = "index.md" }, + { "Overview" = "index.md" }, { "Installation" = "installation.md" }, { "Installation 2" = [ "test/index.md", From dbf99c708e084e4af2a26f358c7db7fd71b9c906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 28 Feb 2026 18:36:33 +0100 Subject: [PATCH 05/10] Config fix --- docs/zensical.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zensical.toml b/docs/zensical.toml index 58df9405..99cb905e 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -34,8 +34,8 @@ features = [ "content.code.annotate", "content.code.copy", "content.footnote.tooltips", - # "content.tabs.link", - # "content.tooltips", + "content.tabs.link", + "content.tooltips", "navigation.expand", "navigation.footer", "navigation.indexes", From 0e0ddf2a2624be622b57a74e10977f4f53f472ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 28 Feb 2026 18:41:40 +0100 Subject: [PATCH 06/10] Readme updates --- README.md | 14 +++----------- docs/README.md | 2 +- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 8f184447..d84097d9 100644 --- a/README.md +++ b/README.md @@ -6,21 +6,13 @@ ## Introduction -**turnierplan.NET** is mostly written in C# using [.NET](https://dotnet.microsoft.com/). This includes the core logic, the backend API and database connection as well as all publicly visible web pages. In addition, it serves the *turnierplan.NET portal*, the client application for authenticated users, based on the [Angular](https://angular.dev/) framework. Some screenshots can be seen in the [section at the end](#screenshots). +**turnierplan.NET** is mostly written in C# using [.NET](https://dotnet.microsoft.com/). This includes the core logic, the backend API and database connection as well as all publicly visible web pages. In addition, it serves the *turnierplan.NET portal*, the client application for authenticated users, based on the [Angular](https://angular.dev/) framework. + +Visit the **turnierplan.NET** documentation using the following link: [docs.turnierplan.net](https://docs.turnierplan.net). If you want to install **turnierplan.NET** on your server, please visit the [Installation guide](https://docs.turnierplan.net/installation). > [!NOTE] > The user interface is currently only available in German 🇩🇪 -## Installation - -If you want to install **turnierplan.NET** on your server, please visit the [Installation guide](https://docs.turnierplan.net/installation). - -## Documentation - -Visit the **turnierplan.NET** documentation using the following link: [docs.turnierplan.net](https://docs.turnierplan.net) - -The documentation sources are located in the `docs` directory. See the [docs readme](docs/README.md) for further information on how to edit and build the documentation. - ## Development This section describes how to set up the development environment. First, you need to install the following tools installed on your machine: diff --git a/docs/README.md b/docs/README.md index d46df637..ba869c23 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,7 @@ In order to build the documentation locally, you must first install Python and ` pip install -r requirements.txt ``` -Next, you can either view the rendered documentation using the zensical-built-in server or you can generate the static website files: +Next, you can either view the rendered documentation using the zensical built-in server or you can generate the static website files: ``` python3 -m zensical serve # starts a local web server on port 8000 From 3b56769ee1c24a28b6b5f38b512dcf82755eb314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 28 Feb 2026 20:23:36 +0100 Subject: [PATCH 07/10] Better logo --- docs/pages/images/logo-192.png | Bin 6160 -> 0 bytes docs/pages/images/logo-64.png | Bin 0 -> 3702 bytes docs/zensical.toml | 5 +---- 3 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 docs/pages/images/logo-192.png create mode 100644 docs/pages/images/logo-64.png diff --git a/docs/pages/images/logo-192.png b/docs/pages/images/logo-192.png deleted file mode 100644 index 478d9cad3648837a2e2ce6458a88edb32fbc5ce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6160 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 Q;7C7EQ__B1_RuQyf96V2^8f$< diff --git a/docs/pages/images/logo-64.png b/docs/pages/images/logo-64.png new file mode 100644 index 0000000000000000000000000000000000000000..ae427211bee1bc282a53c4f68f5db0d54c3ee433 GIT binary patch literal 3702 zcma)9dpwi-AAjbSND*C7KWoA%vDvH`a~<_e+G?o-uZ_i%r5T-6`Fi2+2v5Tk;}8 zc2sl`T{+T`ikzrOEsFGeMyXEc{9eC5p3V1pe?IT`=kxts_Oi!=xL!>~M+E=?HJ1$p zFX-D&_9!bspJ!?# z#3P358WC_B1&{E@x})6Lj$kBh!&VOHy_M)g-WpA|q#$f4*Fa68i{~UoA9FXhyZsFxFd@L!m*}UQxw8R1#ZouP;p)a=P%CC36F^6@z^*d zQXmkR3NWTDP6X1-($W%%LL<>=6Uf4Z8^`34geFX`zKmjqg8*{L92%QPV=>_}PEt6F z&%+}S5Dxzu8G}7b&g6c{9=ZplkiJQg>S^)D{7@K25u@~jA(&!JDp zPaz{gI>-Q-JT7E!_Ja^8q*dWpi$Tni?&9RQ*35G4S`)OX*|e>!aySo~5TpkX zXi(X?P*>s+Yt8=#2L1~;t?dmBBP1|GD61{bg+Yn{{b>|l_ii9F;_ra0LUg`t zBz&1PsHW&?{b`?oZy2OuZjSs;C-7%XHfC^Z3K_?v@#x_6X=d!~>AacK%#lu$%^HqQ zVn*N*LK6x|CGqJzgpCiM!=!;6HUxymT3T8oWg|+beIc4YePyyn{vcyL-NCpGG%k&X4l^j1Mdb-d9MC=jYF#|So=T-b z7ZeAFmIy6^33A|QI2zhe>wfeSM1m0Gj}7#FmmxLH@yZV}hqvi!ElmhJI61Q~2F; zw^Ns5D=LodIeG4wc7G@Jd8S@eVtvnXm&2v!bMmh=mn$a0g1}O(gNLv|;oEcHrs`bJ z?yeo+Hjd@qYZwq?5BZ_Dy4zCD$C+rovx*pap7Y))iguNVb zYu)^y{Zn+BYs?myYs1Ly{HVAmF;A`^t&bW#&8|DN*L1F)Y8|#VZ=~u>%Zv`U*g*uCG;3v8UMiwKAM}3!^YmmotF2%i3bxw@vw4J}C0Q&Kq%ia*k z1%Sl{vIpkkwQ>Xily18a?0tmUw~hzxUg@vhl2mx{VlnbwC8o}*YI9wsDU58oQsKP% z6&F7>Wlxl{zHo&)O38s@zhOhjsYp#$pS_-z_+#Eu#amgsB>D5qsG2CMBVo(B!RBt} z`Kn56SLSuM(9`i3i?C1T|Qwq|(O+gZY=tNz0WdIvHVS$oxs*m+yp!PyhN7Vf&zMp?_iBItwlk#)tYFfifD_(qXW#u+!XAK7V6+d`- z+eEMDNOfV@IaYY~o;T=c{btQK!RC!l8w(KSm!=A%J*8&7eH~ZSDxq9Fdwm_e>d&@3 zJnoTX5~wL?yVMM;{CqpVE6US){3M}&(Qtr%l4c}XN3uS+`-3Cvl2Vvo$-)uUzGq@W zZ``2*8(V3ulpLgaks%QzFF0+oTr!q#{GxD^r0~{WK9?n?`jxZ;p~N80l3YCoOhp;^ z!~DV>(KQ>i+O=Ri4OpnTaYwUUsnWY3uZ?P6OFVuP&)-%R|68_b#X9j8>qx(n1k^ma zl}CO2llDq3qqLT!SHU)3P&{yaQL(v~Y2Ix);5}?CEkm{FF(sfwqP!QCSvsdri;r1zDJ%=l6e<8U z)s-IcG=4|)$0djEU)~MrXd2onC`m(mLqCn`7hrpe8Vg_PPMC?yjSAda-dZHt_jH*D zm7cl+%hS&BzExQ|$A8nMPC>T*(2)hZNAG`X`X#~2GtI~0Z3cd<$ulfBOoK9^ABFW& zZM-8qlsB<2m6M^-o4i3;8a;@voK!fJcl24e#;+PDo z)H=DVQ-l?l>sj78tdXa=j4{;Qz3=tg9o_rlH|m+#?lNR%)Stjj@;?(^6+CF^oC*## z7{9@gOA0kAs%a4gzTUqnZAZ&fqDJ;dpS0B@>Csm0FRSymEI*Dh?y&C##roW{Y@Km& zwAG&0z}N?B7pu7%HM)x4G&%37#i+wR{VQs>AHFA9E(r-kPrgd4**|QTBL8UMVcR~J zzq(cXcR?d^RIz70d-Eh)nA5{~tm`^qJz~%q>lIj`bK}Judz7)?e=G> Date: Sat, 7 Mar 2026 19:15:39 +0100 Subject: [PATCH 08/10] Language -> de --- README.md | 2 +- docs/zensical.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d84097d9..7053eafe 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Visit the **turnierplan.NET** documentation using the following link: [docs.turnierplan.net](https://docs.turnierplan.net). If you want to install **turnierplan.NET** on your server, please visit the [Installation guide](https://docs.turnierplan.net/installation). > [!NOTE] -> The user interface is currently only available in German 🇩🇪 +> The user interface and documentation are currently only available in German 🇩🇪 ## Development diff --git a/docs/zensical.toml b/docs/zensical.toml index 39d9936c..c6cb991e 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -27,7 +27,7 @@ nav = [ favicon = "images/favicon.ico" logo = "images/logo-64.png" -language = "en" +language = "de" font = false features = [ From 38bf73db585b8389eee002ab4ed2ba674c9ecdaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 7 Mar 2026 19:48:28 +0100 Subject: [PATCH 09/10] Home page in de --- docs/pages/index.md | 28 ++++++++++++++++++---------- docs/zensical.toml | 17 ++++++----------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/docs/pages/index.md b/docs/pages/index.md index 4aa15f57..a90d4d2c 100644 --- a/docs/pages/index.md +++ b/docs/pages/index.md @@ -1,20 +1,28 @@ --- -icon: lucide/library-big +icon: lucide/house --- -# Overview +# Startseite -turnierplan.NET is an **open-source tournament planning application** ([GitHub](github.com/turnierplan-NET/turnierplan.NET)) for football clubs and anyone else who wants to invite teams, create schedules and report match outcomes. +turnierplan.NET ist eine **Open-Source Webanwendung zur Organisation von Turnieren** in Fußballvereinen ([GitHub](https://github.com/turnierplan-NET/turnierplan.NET)). -
-- :fontawesome-brands-html5: __HTML__ for content and structure -- :fontawesome-brands-js: __JavaScript__ for interactivity -- :fontawesome-brands-css3: __CSS__ for text running out of boxes -- :fontawesome-brands-internet-explorer: __Internet Explorer__ ... huh? +
+- :lucide-land-plot: Flexible Spielpläne +- :lucide-shield-user: Benutzerverwaltung +- :lucide-globe: Öffentliche Ansicht für Besucher +- :lucide-file-text: Export von PDF-Dokumenten +- :lucide-settings: Zahlreiche Konfigurationsmöglichkeiten +- :lucide-mail: Verwaltung von Turnieranmeldungen
+## Made in Germany +turnierplan.NET wird hauptsächlich von Fußballfreunden aus dem nordöstlichen Baden-Württemberg, Deutschland verwendet und maintained 🇩🇪. -## Getting Started +Aus diesem Grund sind die Benutzeroberfläche sowie die Dokumentation aktuell ausschließlich in deutscher Sprache verfügbar. Zudem sind die verwendeten Begriffe und Funktionen speziell für die hierzulande üblichen Turniere und Veranstaltungen ausgelegt. Verbesserungsvorschläge sind jederzeit gerne gesehen und können im [Repo](https://github.com/turnierplan-NET/turnierplan.NET) hinterlassen werden. -To set up an instance of **turnierplan.NET** on your own server, visit the [Installation](installation.md) guide. +Falls turnierplan.NET dennoch für deinen Verein / deine Organisation infrage kommt: Der Quelltext und die Container-Images sind unter der [AGPL-3.0](https://github.com/turnierplan-NET/turnierplan.NET/blob/main/LICENSE) lizenziert und dementsprechend frei verwendbar. Mögliche Vorgehensweisen zum Erstellen eines eigenen Setups sind in der [Installationsanleitung](installation.md) beschrieben. + +## Technische Dokumentation + +Der Großteil der Anwendung ist in C# geschrieben und basiert auf dem [ASP.NET Core](https://dotnet.microsoft.com/en-us/apps/aspnet) Framework. Die primäre Datenbank, welche von turnierplan.NET verwendet wird, ist [PostgreSQL](https://www.postgresql.org/). Bilddateien werden außerhalb der Datenbank als lokale Dateien oder in einem cloud-basierten Blob-Storage gespeichert. Sämtliche administrative Aufgaben wie das Anlegen von Nutzern oder das Planen und Durchführen von Turnieren werden mit dem turnierplan.NET *Portal* erledigt. Dies ist eine [SPA](https://de.wikipedia.org/wiki/Single-Page-Webanwendung) basierend auf dem [Angular](https://angular.dev/) Framework. Öffentlich sichtbare HTML-Seiten werden allerdings direkt von der ASP.NET-Anwendung gerendert und bereitgestellt. diff --git a/docs/zensical.toml b/docs/zensical.toml index c6cb991e..a3a01cbc 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -1,9 +1,9 @@ [project] -site_name = "turnierplan.NET Documentation" +site_name = "turnierplan.NET Dokumentation" site_author = "turnierplan.NET" site_url = "https://docs.turnierplan.net/" -site_description = "The administrator and user documentation for turnierplan.NET" +site_description = "Admin- und Benutzerdokumentation für turnierplan.NET" repo_name = "turnierplan-NET/turnierplan.NET" repo_url = "https://github.com/turnierplan-NET/turnierplan.NET" @@ -14,13 +14,8 @@ copyright = "Copyright © 2026 Elias Hörner" docs_dir = "pages" nav = [ - { "Overview" = "index.md" }, - { "Installation" = "installation.md" }, - { "Installation 2" = [ - "test/index.md", - { "Installation" = "installation3.md" }, - { "Installation" = "installation4.md" }, - ]} + { "Startseite" = "index.md" }, + { "Installation" = "installation.md" } ] [project.theme] @@ -55,10 +50,10 @@ features = [ scheme = "default" accent = "green" toggle.icon = "lucide/sun" -toggle.name = "Switch to dark mode" +toggle.name = "In dunklen Modus wechseln" [[project.theme.palette]] scheme = "slate" accent = "green" toggle.icon = "lucide/moon" -toggle.name = "Switch to light mode" +toggle.name = "In hellen Modus wechseln" From d7b2c61e1c87d3889a40f90a6d1360504581ba64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=B6rner?= Date: Sat, 7 Mar 2026 19:51:28 +0100 Subject: [PATCH 10/10] Add navigation structure --- docs/pages/configuration.md | 7 ++ docs/pages/getting-started.md | 7 ++ docs/pages/installation.md | 198 +--------------------------------- docs/zensical.toml | 4 +- 4 files changed, 22 insertions(+), 194 deletions(-) create mode 100644 docs/pages/configuration.md create mode 100644 docs/pages/getting-started.md diff --git a/docs/pages/configuration.md b/docs/pages/configuration.md new file mode 100644 index 00000000..9c8d2c10 --- /dev/null +++ b/docs/pages/configuration.md @@ -0,0 +1,7 @@ +--- +icon: lucide/wrench +--- + +# Konfiguration + +Anleitung für Konfiguration diff --git a/docs/pages/getting-started.md b/docs/pages/getting-started.md new file mode 100644 index 00000000..33d5927f --- /dev/null +++ b/docs/pages/getting-started.md @@ -0,0 +1,7 @@ +--- +icon: lucide/rocket +--- + +# Erste Schritte + +Anleitung für Erste Schritte diff --git a/docs/pages/installation.md b/docs/pages/installation.md index c9bf6655..d3e2594e 100644 --- a/docs/pages/installation.md +++ b/docs/pages/installation.md @@ -1,195 +1,7 @@ -# Installation - -**turnierplan.NET** comes as a pre-built container image which can be deployed with minimal configuration. The image is available on GitHub: [ghcr.io/turnierplan-net/turnierplan](https://github.com/turnierplan-NET/turnierplan.NET/pkgs/container/turnierplan) - -## Getting Started - -In the simplest case, you can configure the container to use an in-memory data store. Note that this in-memory store is only meant for quick testing and is obviously not suitable for a production environment. - -```shell -docker run -p 80:8080 -e Database__InMemory="true" ghcr.io/turnierplan-net/turnierplan:latest -``` - -You should see the following output. The credentials of the initial admin user are displayed in the container logs. You can now open up http://localhost in your browser and log in using those credentials. - -``` - __ ___ __ - /\ \__ __ /\_ \ /\ \__ - \ \ ,_\ __ __ _ __ ___ /\_\ __ _ __ _____\//\ \ __ ___ ___ __\ \ ,_\ - \ \ \/ /\ \/\ \/\`'__\/' _ `\/\ \ /'__`\/\`'__\/\ '__`\\ \ \ /'__`\ /' _ `\ /' _ `\ /'__`\ \ \/ - \ \ \_\ \ \_\ \ \ \/ /\ \/\ \ \ \/\ __/\ \ \/ \ \ \L\ \\_\ \_/\ \L\.\_/\ \/\ \ __/\ \/\ \/\ __/\ \ \_ - \ \__\\ \____/\ \_\ \ \_\ \_\ \_\ \____\\ \_\ \ \ ,__//\____\ \__/.\_\ \_\ \_\/\_\ \_\ \_\ \____\\ \__\ - \/__/ \/___/ \/_/ \/_/\/_/\/_/\/____/ \/_/ \ \ \/ \/____/\/__/\/_/\/_/\/_/\/_/\/_/\/_/\/____/ \/__/ - \ \_\ - \/_/ v2025.4.0 - -info: Turnierplan.ImageStorage.Local.LocalImageStorage[0] - Using the following directory for local image storage: '/var/turnierplan/images' -info: Turnierplan.App.DatabaseMigrator[0] - An initial user was created: You can log in using "admin" and the password "53fe6bac-1050-4801-bb11-be2dbd479d66". IMMEDIATELY change this password when running in a production environment! -info: Microsoft.Hosting.Lifetime[14] - Now listening on: http://[::]:8080 -info: Microsoft.Hosting.Lifetime[0] - Application started. Press Ctrl+C to shut down. -info: Microsoft.Hosting.Lifetime[0] - Hosting environment: Production -info: Microsoft.Hosting.Lifetime[0] - Content root path: /app -``` - -## Persisting Data - -The application stores the following data in the `/var/turnierplan` directory: - -- `/var/turnierplan/identity/jwt-signing-key.bin` - The SHA512 signature key used to sign and verify JWT tokens. -- `/var/turnierplan/images/**` - If not configured otherwise (see [section below](#storing-images)), this folder will contain all uploaded image files. - -Therefore, there should always be a volume mapping for this path. - -## Environment Variables - -For a basic installation, the following environment variables must be set: - -| Environment Variable | Description | -|-------------------------------|--------------------------------------------------------------| -| `Turnierplan__ApplicationUrl` | The URL used to access the website. | -| `Database__ConnectionString` | The PostgreSQL connection string with read/write permission. | - -The following environment variables can be set if you want to enable specific features or modify default behavior: - -| Environment Variable | Description | Default | -|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------| -| `ApplicationInsights__ConnectionString` | Can be set if you wish that your instance sends telemetry data to [Azure Application Insights](https://learn.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview). | - | -| `Identity__AccessTokenLifetime` | Defines the lifetime of issued JWT access tokens. | `00:03:00` | -| `Identity__RefreshTokenLifetime` | Defines the lifetime of issued JWT refresh tokens. | `1.00:00:00` | -| `Turnierplan__InstanceName` | The instance name is displayed in the header/footer of the public pages. If not specified, the string `turnierplan.NET` will be shown instead. | - | -| `Turnierplan__LogoUrl` | The URL of the custom logo to be displayed in the header of the public pages. If not specified, the turnierplan.NET logo will be shown instead. | - | -| `Turnierplan__ImprintUrl` | The URL of your external imprint page if you want it to be linked on the public pages. | - | -| `Turnierplan__PrivacyUrl` | The URL of your external privacy page if you want it to be linked on the public pages. | - | -| `Turnierplan__ImageMaxSize` | The maximum allowed file size when uploading an image file. The default value equates to 8 MiB (8 · 1024 · 1024) | `8388608` | -| `Turnierplan__ImageQuality` | Uploaded images are compressed using the `webp` format with the specified quality. A value of `100` will result in lossless compression being uesd. | `80` | - -!!! note - The token lifetimes must be specified as .NET `TimeSpan` strings. For example `00:03:00` means 3 minutes or `1.00:00.00` means 1 day. - -## Docker Compose - -A minimal recommended configuration for a production environment is shown in the following docker compose example: - -```yaml -services: - turnierplan.database: - image: postgres:latest - environment: - - POSTGRES_PASSWORD=P@ssw0rd - - POSTGRES_DB=turnierplan - volumes: - - turnierplan-database-data:/var/lib/postgresql/data - networks: - - turnierplan - restart: unless-stopped - - turnierplan.app: - image: ghcr.io/turnierplan-net/turnierplan:latest - depends_on: - - turnierplan.database - environment: - - Turnierplan__ApplicationUrl=http://localhost - - Database__ConnectionString=Host=turnierplan.database;Database=turnierplan;Username=postgres;Password=P@ssw0rd - volumes: - - turnierplan-app-data:/var/turnierplan - networks: - - turnierplan - restart: unless-stopped - ports: - - '80:8080' - -volumes: - turnierplan-database-data: - turnierplan-app-data: - -networks: - turnierplan: -``` - -!!! tip - It is recommended to not use the latest tag. Rather, pin your docker services to a specific image version. - -Feel free to modify the environment variables or add additional ones as described in the [environment variables](#environment-variables) section above. +--- +icon: lucide/server +--- -## Storing Images - -By default, all uploaded image files are stored in the `/var/turnierplan/images` directory. Whilst this is a very simple solution, it also means that the turnierplan.NET backend will serve all image files which can potentially lead to high load on the application server. Alternatively, you can configure the application to save image files to an external storage service. This way, clients can load the images directly from the external service. - -!!! warning - The differnt implementations do not necessarily use the same folder structure to organizie the files. Because of this, migrating from one image storage implementation to another can be difficult - so choose wisely! - -The following implementations are currently available: - -- **Local** - The default, which saves images in a local folder as described above -- **AWS S3** (or compatible) -- **Azure Blob Storage** - -### Configuring AWS S3 - -To store uploaded images in an AWS S3 or S3-compatible bucket, add the following environment variables to your deployment: - -| Environment Variable | Description | -|---------------------------------|--------------------------------------------------| -| `ImageStorage__Type` | The image storage type, **must** be `S3`. | -| `ImageStorage__RegionEndpoint` | The AWS region endpoint, such as `eu-central-1`. | -| `ImageStorage__ServiceUrl` | The service URL when using a non-AWS S3 bucket. | -| `ImageStorage__AccessKey` | The access key identifier. | -| `ImageStorage__AccessKeySecret` | The access key secret. | -| `ImageStorage__BucketName` | The name of the bucket. | - -The access key must have permissions to create, read and delete objects. - -The `RegionEndpoint` and `ServiceUrl` variables are *mutually exclusive*. Use the former if you are using an AWS S3 bucket and use the latter if you use a S3-compatible bucket from a third party. - -### Configuring Azure Blob Storage - -To store uploaded images in an [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs/) container, add the following environment variables to your deployment: - -| Environment Variable | Description | -|------------------------------------|----------------------------------------------| -| `ImageStorage__Type` | The image storage type, **must** be `Azure`. | -| `ImageStorage__StorageAccountName` | The name of the storage account. | -| `ImageStorage__ContainerName` | The name of the blob container. | - -By default, a [DefaultAzureCredential](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.defaultazurecredential?view=azure-dotnet) will be used. Therefore, if you use Azure Managed Identities, you won't have to do any further configuration. In addition, this implementation supports two additional means of authentication listed below. - -When using Entra ID based authentication, the managed identity / app registration must have permission to create/read/delete blobs in the storage account. This can be achieved by assigning the [Storage Blob Data Contributor](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/storage#storage-blob-data-contributor) role. - -#### Access key authentication - -Refer to the [documentation](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?tabs=azure-portal) on how to view and manage the access keys. - -The following environment variables must be set to enable access key authentication: - -| Environment Variable | Description | -|-------------------------------|--------------------------------------------------| -| `ImageStorage__UseAccountKey` | Set to `true` to use account key authentication. | -| `ImageStorage__AccountKey` | The value of the account key. | - -#### Client secret authentication - -If you have an Entra ID app registration with the necessary permissions on the storage account, you can set the following environment variables to enable client secret authentication: - -| Environment Variable | Description | -|---------------------------------|---------------------------------------------------------| -| `ImageStorage__UseClientSecret` | Set to `true` to use client credentials authentication. | -| `ImageStorage__TenantId` | The tenant id where the app registration resides. | -| `ImageStorage__ClientId` | The client id of the *app registration*. | -| `ImageStorage__ClientSecret` | The value of the client secret. | - -## Troubleshooting - -Below are troubleshooting steps for some issues you might encounter during installation. - -### Connecting over HTTP - -If you are connecting to a remote (non-`localhost`) turnierplan.NET server via HTTP, you should see a *401 Unauthorized* error after logging in with your valid credentials. This is because turnierplan.NET uses secure cookies by default. You can set the `Identity__UseInsecureCookies` environment variable to `true` to change this behavior. +# Installation -!!! danger - Using HTTP is obviously not the way to go if you are connecting over the internet. For local setups this might be fine, though it is still discouraged. Most importantly, it is **not officially supported** because some parts of the client application rely on HTTPS-only browser APIs to work properly (such as clipboard or crypto). +Anleitung für Installation diff --git a/docs/zensical.toml b/docs/zensical.toml index a3a01cbc..430693f9 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -15,7 +15,9 @@ docs_dir = "pages" nav = [ { "Startseite" = "index.md" }, - { "Installation" = "installation.md" } + { "Installation" = "installation.md" }, + { "Konfiguration" = "configuration.md" }, + { "Erste Schritte" = "getting-started.md" } ] [project.theme]