Compare commits

..

41 Commits

Author SHA1 Message Date
c19ae8a982 Update .gitea/workflows/create-presentation.yml
Some checks failed
build-debian-package / Build the debian package (push) Failing after 12s
2026-04-18 11:59:51 +00:00
26d56c0d24 Update .gitea/workflows/create-presentation.yml
Some checks failed
build-debian-package / Build the debian package (push) Failing after 9s
2026-04-18 11:49:04 +00:00
f5223405a5 Update .gitea/workflows/word-count.yml
Some checks failed
build-debian-package / Build the debian package (push) Failing after 9s
2026-04-18 11:47:18 +00:00
7ab7e9e25d Update .gitea/workflows/create-presentation.yml
Some checks failed
Word Count / count-words (push) Has been cancelled
2026-04-18 11:46:49 +00:00
370942efe1 Update .gitea/workflows/create-presentation.yml
Some checks failed
Word Count / count-words (push) Failing after 30s
2026-04-18 11:42:24 +00:00
490912aaca Delete Defensio/defensio.pdf
Some checks failed
Word Count / count-words (push) Failing after 30s
build-debian-package / Build the debian package (push) Successful in 11s
2026-04-18 11:36:59 +00:00
6d15ab6b0a Fix: Pipeline
Some checks failed
Word Count / count-words (push) Failing after 31s
2026-04-18 11:37:13 +02:00
aa1353adce New: Other ga-pandoc container 2026-04-18 11:37:13 +02:00
bbb2f94944 Test sutom docker-container 2026-04-18 11:37:13 +02:00
f25d6be858 Bilder titel gefixt
Some checks failed
Word Count / count-words (push) Failing after 31s
2026-04-18 02:48:29 +02:00
b2d89e7830 bilder hinzugefügt in der präsi
Some checks failed
Word Count / count-words (push) Failing after 31s
2026-04-18 02:45:51 +02:00
c4d0bb1a9a Merge remote-tracking branch 'origin/main'
Some checks failed
Word Count / count-words (push) Failing after 33s
2026-04-18 02:43:33 +02:00
2aeb5f2f8f bilder 2026-04-18 02:41:00 +02:00
8a150208dd New: Presentationexport
Some checks failed
Word Count / count-words (push) Failing after 32s
2026-04-17 12:55:56 +02:00
6798cbf877 Fix: Gradient 2026-04-17 12:55:45 +02:00
63f9f721a2 Fix: Presentationorder 2026-04-17 12:55:36 +02:00
ea9479628c Testing...
Some checks failed
build-debian-package / Build the debian package (push) Failing after 36s
Word Count / count-words (push) Failing after 1m1s
2026-04-17 10:22:23 +02:00
4ddb7d8904 noch mal angepasst 2026-04-16 23:08:07 +02:00
aa704577ad Use Prebuilt Container
Some checks failed
Word Count / count-words (push) Failing after 1m35s
2026-04-16 23:07:22 +02:00
15eb9d9d5e Install Mermaid CLI
Some checks failed
build-debian-package / Build the debian package (push) Failing after 7m45s
Word Count / count-words (push) Failing after 37s
2026-04-16 22:34:42 +02:00
f11fcb68fe Fix: pipeline
Some checks failed
Word Count / count-words (push) Failing after 35s
2026-04-16 22:24:19 +02:00
37262ff470 comments für bilder hinzugefügt für späteres hinzufügen 2026-04-16 21:52:28 +02:00
8da8374a1b kürzere version der präsi
Some checks failed
Word Count / count-words (push) Failing after 37s
2026-04-16 21:31:38 +02:00
d397f0cd60 Revert addition of presentation to lib folder
Some checks failed
Word Count / count-words (push) Failing after 38s
2026-04-16 21:18:18 +02:00
b450fd6475 Add concise presentation to lib folder
Some checks failed
Word Count / count-words (push) Failing after 34s
2026-04-16 21:17:16 +02:00
6789fa6f9d install texlive as well
Some checks failed
Word Count / count-words (push) Has been cancelled
build-debian-package / Build the debian package (push) Failing after 2m11s
2026-04-16 19:23:12 +02:00
2061cdc218 Test
Some checks failed
build-debian-package / Build the debian package (push) Failing after 3m24s
Word Count / count-words (push) Failing after 36s
2026-04-16 19:16:52 +02:00
6b0c4f7884 Update: Tag
Some checks failed
build-debian-package / Build the debian package (push) Failing after 14s
Word Count / count-words (push) Failing after 40s
2026-04-16 19:13:54 +02:00
ad47997aab New: Pandoc pipeline
Some checks failed
Word Count / count-words (push) Failing after 43s
2026-04-16 19:12:42 +02:00
b337833410 New: use Fork 2026-04-16 19:11:50 +02:00
69d898bc86 Adam Part changes
Some checks failed
Word Count / count-words (push) Failing after 38s
2026-04-16 17:35:03 +02:00
29fda2257b From TD to LR
Some checks failed
Word Count / count-words (push) Failing after 33s
2026-04-16 17:31:41 +02:00
caedd3ba9e Merge branch 'main' of https://git.kocoder.xyz/Diplomarbeit-Absolventenverein/pm
Some checks failed
Word Count / count-words (push) Failing after 36s
2026-04-16 17:30:06 +02:00
710667481b Überarbeitung 2026-04-16 17:29:57 +02:00
2e4353bf8e Update: submodule
Some checks failed
Word Count / count-words (push) Failing after 36s
2026-04-16 16:57:17 +02:00
a38cbd0dfe Refinements des Layouts und individueller Teil Konstantin 2026-04-16 16:56:34 +02:00
9aad0c5394 Neue Änderungen
Some checks failed
Word Count / count-words (push) Failing after 33s
2026-04-16 16:56:10 +02:00
e774cec6d5 Bild Anzeige Fehler angepasst
Some checks failed
Word Count / count-words (push) Failing after 33s
2026-04-16 16:49:26 +02:00
9a0cb1ffa0 Merge branch 'main' of https://git.kocoder.xyz/Diplomarbeit-Absolventenverein/pm
Some checks failed
Word Count / count-words (push) Failing after 43s
2026-04-16 16:43:20 +02:00
4e0861147a Presentation Update 2026-04-16 16:42:43 +02:00
35a0ebd15a New: Artikel und Video 2026-04-16 15:40:04 +02:00
19 changed files with 425 additions and 213 deletions

View File

@@ -0,0 +1,43 @@
name: build-debian-package
on:
push:
tags:
- "doc-*"
jobs:
build:
name: Build the debian package
runs-on: ubuntu-latest
steps:
- name: "Git clone"
run: git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git .
- name: "Git checkout"
run: git checkout "${{ gitea.sha }}"
- name: "Submodules auschecken"
run: git submodule update --init
- uses: docker://git.kocoder.xyz/docker/ga-pandoc:c6eaa45b623c284e80f37434872621defc00f864
working_directory: Defensio
with:
env: TEXINPUTS=.:./libs/awesome-beamer/:./libs/smile/
command: pandoc
args: >-
01_Praesentation_Allgemein.md \
02_Praesentation_Konstantin_Hintermayer.md \
03_Praesentation_Florian_Edlmayer.md \
04_Praesentation_Adam_Gaiswinkler.md \
-t beamer \
--template 00_preamble.tex \
--pdf-engine=pdflatex \
--slide-level=2 \
--number-sections \
--lua-filter ../_extensions/diagram/diagram.lua \
--syntax-definition ../_extensions/razor/razor.xml \
--syntax-definition ../_extensions/nginx/nginx.xml \
-o defensio.pdf
- name: "Create release"
uses: akkuman/gitea-release-action@v1
with:
files: |-
./Defensio/defensio.pdf
./Defensio/Images/*

View File

@@ -1,8 +1,6 @@
name: Word Count
on:
push:
branches: [ "main", "master" ]
pull_request:
branches: [ "main", "master" ]

2
.gitmodules vendored
View File

@@ -1,6 +1,6 @@
[submodule "Defensio/libs/awesome-beamer"]
path = Defensio/libs/awesome-beamer
url = https://codeberg.org/LukasPietzschmann/awesome-beamer
url = https://git.kocoder.xyz/kocoded/awesome-beamer
[submodule "Defensio/libs/smile"]
path = Defensio/libs/smile
url = https://codeberg.org/LukasPietzschmann/smile

34
Artikel_Schulhomepage.md Normal file
View File

@@ -0,0 +1,34 @@
# AlumniHub Die neue digitale Plattform des Absolventenvereins
Im Rahmen ihrer Diplomarbeit an der HTL SZU Ungargasse haben **Konstantin Hintermayer**, **Florian Edlmayer** und **Adam Gaiswinkler** (5BHITN, Schuljahr 2025/26) eine moderne Webanwendung für den Absolventenverein entwickelt: den **AlumniHub**.
## Worum geht es?
Der Absolventenverein der HTL Ungargasse verwaltet rund 300 Alumni bisher über Excel-Tabellen und abgelaufene Softwarelizenzen. Das Diplomarbeitsteam hat eine zentrale Plattform geschaffen, die Mitgliederverwaltung, Event-Organisation und Kommunikation unter einem Dach vereint.
## Was kann der AlumniHub?
- **Anmeldetool für Treffen** Veranstaltungen erstellen, Einladungen verschicken und Anmeldungen verwalten
- **Hall of Fame** Absolventen können ihre Erfolge präsentieren, inklusive PDF-Export
- **Schwarzes Brett** Ein interaktiver Feed für Neuigkeiten, Events und Jobangebote
- **Premiumbereich** Exklusive Inhalte für Premiummitglieder mit eigenem Freigabe-Workflow
- **LinkedIn-Login** Sichere Anmeldung über OAuth 2.0
- **DSGVO-konform** Datenschutz von Anfang an mitgedacht
## Die Technik dahinter
Die Anwendung basiert auf dem Content-Management-System **Oqtane** mit **ASP.NET Core** und **Blazor**. Gehostet wird das Ganze auf einem Linux-Server mit PostgreSQL-Datenbank betrieben in der Schulinfrastruktur. Gearbeitet wurde agil nach **Scrum** in zweiwöchigen Sprints.
## Das Team
| Name | Schwerpunkt |
| :---------------------- | :----------------------------------------------------------------- |
| Konstantin Hintermayer | Projektleitung, Serverinfrastruktur, Schwarzes Brett, Auswertungen |
| Florian Edlmayer | Premiumbereich, LinkedIn-OAuth, Datenschutz (DSGVO) |
| Adam Gaiswinkler | Anmeldetool, Hall of Fame, CMS-Konfiguration, UI/UX-Design |
**Betreuung:** Ing. Thomas Gürth & Johannes Kreuzer
---
*Das Projektteam bedankt sich bei allen Unterstützern insbesondere beim Absolventenverein als Auftraggeber und bei der Schule für die Bereitstellung der Infrastruktur.*

View File

@@ -2,6 +2,17 @@
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\makeatletter
\newsavebox\pandoc@box
\newcommand*\pandocbounded[1]{% scales image to fit the slide if it's too large
\sbox\pandoc@box{#1}%
\ifdim\wd\pandoc@box>\linewidth
\makebox[\linewidth][c]{\resizebox{\linewidth}{!}{\usebox\pandoc@box}}%
\else
\usebox\pandoc@box
\fi
}
\makeatother
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
@@ -12,7 +23,11 @@
\newcommand{\imagepath}{Images}
\definecolor{orange}{HTML}{f87a01}
\usetheme[german, color, coloraccent=orange]{awesome}
\usetheme[german, color, coloraccent=orange, notoc]{awesome}
\makeatletter
\newcommand{\nonumberson}{\awesome@nonumbersinframetitletrue}
\newcommand{\nonumbersoff}{\awesome@nonumbersinframetitlefalse}
\makeatother
% \usepackage{firamath-otf}
\usepackage{pgfplots}
@@ -52,26 +67,37 @@
\title[AlumniHub]{AlumniHub}
\subtitle{Web-Entwicklung für den Absolventenverein}
\author{Konstantin Hintermayer \\ Adam Gaiswinkler \\ Florian Edlmayer}
\author{Konstantin Hintermayer \\ Florian Edlmayer \\ Adam Gaiswinkler}
\email{}
\institute{Schulzentrum HTL HAK Ungargasse}
\uni{Schulzentrum HTL HAK Ungargasse}
\location{Wien}
\background{background.png}
\background{./Images/images/background/title-slide/background.png}
\logo{\includegraphics[width=3cm]{\imagepath/images/logos/logo.png}}
\date\today
\date{22. April 2026}
\AtBeginSection[]
{
\begin{frame}[noframenumbering,plain]{Agenda}
\tableofcontents[currentsection, hideothersubsections]
\end{frame}
}
\begin{document}
\maketitle
$body$
\end{document}
\begingroup
\nonumberson
\begin{frame}[noframenumbering,plain]{Agenda}
\tableofcontents[currentsection]
\end{frame}
\endgroup
}
\begin{document}
\maketitle
\begingroup
\nonumberson
\begin{frame}[noframenumbering,plain]{Agenda}
\tableofcontents
\end{frame}
\endgroup
$body$
\end{document}

View File

@@ -2,7 +2,37 @@
## Rolle im Projekt
## Infrastruktur & CI/CD
::: columns
:::: column
Aufgabenbereiche:
- Infrastruktur & CI/CD
- Product Owner
- Kundenschnittstelle
- Softwareentwicklung:
- Event Registration
- Black Board
- Report System
- Mass Mailer
::::
:::: column
\begin{tikzpicture}
\clip (0,0) circle (3em);
\node at (0,0) {\includegraphics[width=6em]{./Images/images/konstantin/profile.jpg}};
\draw[accent, line width=3pt] (0,0) circle (3em);
\end{tikzpicture}
::::
:::
## Infrastruktur
::: columns
:::: column
Systemaufbau:
@@ -11,18 +41,47 @@ Systemaufbau:
- NginX
- Asp.Net Core
::::
:::: column
Entwicklungsumgebung:
- Gitea Server
- Wireguard
- Docker
- Transfer: GitHub
- Gitea Actions
::::
:::
## CI/CD
CI:
- Gitea Actions
- Debian Packages (.deb)
- Code-Reviewing:
- KI
- Git-Flow
## Softwarearchitektur
- Open-Closed Principle
- Strategy Pattern
- Dependency Injection
## Technischer Vergleich
Bisherige Erfahrungen:
- Go
- Typescript
- GRPC (interprozess Kommunikation)
Untersuchungsgebiete:
- Typisierung
- Konsistenz
@@ -39,3 +98,5 @@ right
::::
:::
## Fazit

View File

@@ -1,95 +0,0 @@
# Adam Gaiswinkler
## Individueller Teil: Adam Gaiswinkler
**Entwicklung von CMS-Modulen & Frontend-Design**
---
## Ausgangslage & Motivation
- **Ausgangssituation**: Bedarf an einer modernen Plattform für den Absolventenverein der HTL Ungargasse.
- **Persönliche Motivation**:
- Steigende Verantwortung durch Teamverkleinerung (von 6 auf 3 Personen).
- Identifikation mit dem Projekt wuchs deutlich.
- Praktische Anwendung von Blazor & ASP.NET in einem realen Umfeld.
- **Individuelle Ziele**:
- Entwicklung von Oqtane-Modulen (Anmeldetool & Hall of Fame).
- Web-Entwicklung mit Fokus auf responsives und nutzerfreundliches UI/UX.
---
## Eingesetzte Technologien
- **Backend & Core**: C#, ASP.NET Core
- **Frontend**: Blazor (für interaktive Weboberflächen direkt in C#)
- **CMS**: Oqtane Framework
- **Styling**: Bootstrap & Custom CSS
- **Spezielle Tools**: QuestPDF (PDF-Generierung), Gitea (Versionskontrolle)
- **Entwicklungsumgebung**: Visual Studio 2022 & JetBrains Rider (macOS)
---
## Umsetzung: Oqtane Theme
- **Ziel**: Modernes, schlichtes Design im Stil der HTL Ungargasse (szu.at).
- **Technische Highlights**:
- Vollständige Eigenentwicklung der Navigationslogik (über `PageState.Pages`).
- Dynamisches Ausblenden von Systemseiten via LINQ.
- **Responsive Design**: Einsatz von CSS Media Queries und einer komplett CSS-basierten Burger-Menü-Lösung.
- Integration eines `ControlPanels` und Cookie-Consent.
---
## Umsetzung: Hall of Fame (1)
- **Zweck**: Sichtbarmachung von erfolgreichen Absolventinnen und Absolventen.
- **UI & UX**:
- Responsive Kartenübersicht der Personen mit Such- und Sortierfunktion (Echtzeit).
- Detailseite im modernen "Glasmorphismus"-Design.
- **Datenerfassung & Workflow**:
- Rich-Text-Editor zur Eingabe des Werdegangs.
- Bild-Upload-System (Live-Vorschau, max. 5 MB) statt manueller URLs.
- Statusverwaltung ("Entwurf" vs. "Veröffentlicht") inkl. Eigentümerprüfung.
---
## Umsetzung: Hall of Fame (2)
- **PDF-Export**: Dynamische Generierung eines ansprechenden Profil-PDFs mittels *QuestPDF*.
- **Moderation**:
- Integriertes Meldesystem (Reporting) direkt über ein separates Interfaces-Paket angesteuert.
- **Datenbank & Persistenz**:
- Entity Framework Core inkl. Migrationen (`HallOfFame` und `HallOfFameReport` Tabellen).
---
## Umsetzung: Anmeldetool für Treffen
- **Zweck**: Vereinfachung der Planung und Teilnehmerverwaltung.
- **Funktion**:
- Klare, farblich getrennte Zusage- und Absage-Buttons.
- Live-Rückmeldung bei Statusänderung dank Blazor.
- Saubere Trennung von UI-Komponente und Backend-API.
- **UX-Optimierung**:
- Fokus auf Overlay-Darstellung und Mobile-Clipping-Vermeidung.
---
## Herausforderungen & Lösungen
- **Plattformwechsel (Windows zu macOS)**: Oqtane ist stark an Windows gekoppelt; gelöst durch Einsatz von JetBrains Rider.
- **Zeitdruck & Infrastruktur-Ausfälle**:
- Probleme mit Hosting (Hetzner).
- **Lösung**: Entwicklung einer schlanken "Übergangslösung" (Node.js/HTML) im Sommer 2025 zur zeitgerechten Event-Abwicklung.
- **Entity Framework Concurrency Issues**: Gelöst durch Transaktions-Gliederung bei Löschvorgängen (Reports vs. Main Entity).
---
## Learnings
- **Technisch**: Tieferes Verständnis von Version Control (Git), CSS/Flexbox (Responsiveness) und C#/Blazor-Tiefen.
- **Methodisch**: Eine klare Aufgabenaufteilung sowie regelmäßige Team-Meetings sind unerlässlich für den Projekterfolg.
- **Persönlich**: Bedeutsamkeit von Eigeninitiative und Verantwortungsübernahme, gerade in schwierigen Projektphasen.
---
## Fazit & Ausblick
- **Erreichtes**:
- Theme ist final in Oqtane integriert und mobil optimiert.
- Hall of Fame und Anmeldetool sind voll funktionstüchtig.
- **Ausblick**:
- Integration einer umfassenden Teilnehmerlisten-Auswertung (Datenbank).
- Limit-Funktion für maximale Anmeldungen bei Veranstaltungen.
- Automatische E-Mail-Erinnerungen für Events.

View File

@@ -0,0 +1,130 @@
# Florian Edlmayer
## Individueller Teil: Florian Edlmayer
**Datensicherheit, Backup-Systeme & Premium-Bereich**
---
## Ausgangslage & Zielsetzung
- **Ausgangssituation**:
- Keine digitale, sichere Absolventen-Vernetzung.
- **Mein Beitrag**:
- Datenschutz (DSGVO).
- Automatisierte Backups & Restore.
- LinkedIn-Login (OAuth 2.0).
- Premium-Bereich.
- **Nutzen**: Rechtssicherheit, Ausfallsicherheit, hohes Engagement.
---
## Eingesetzte Technologien
- **Framework**: ASP.NET Core & .NET 8
- **Datenbanksystem**: PostgreSQL
- **Authentifizierung**: OAuth 2.0 (LinkedIn)
- **Scripting & Automation**: Bash-Skripte für Linux Cronjobs
---
## DSGVO & Datenschutz
- **Rechtliche Basis**: Einhaltung von DSGVO & DSG.
- **Umsetzung**:
- **Datenschutzerklärung**: Rechtskonform integriert.
- **Datenminimierung**: Nur zwingend benötigte Daten.
- **Vertraulichkeit**: TLS/HTTPS & lokales Austria-Hosting.
- **Betroffenenrechte**: Auskunft & Löschung garantiert.
---
## Backup- & Restore-Systeme (1)
- **Problem**: Datenverlust (Hardware, Software, Cyberangriffe).
- **Lösung**: Vollautomatisiertes Backup-Skript.
```mermaid
graph LR
Start((Start: Cronjob 02:30)) --> Init[Initialisierung]
Init --> Vars[Konfiguration laden]
subgraph Sicherungsphase
Dir[Erstelle Backup-Ordner] --> DB[Datenbank-Backup]
DB --> Files[Dateisystem sichern]
end
Files --> Check{Fehler?}
Check -- Ja --> Mail[Log Error & Abbruch]
Check -- Nein --> Rotate[Lade Backups-Liste]
subgraph Speicherverwaltung
Rotate --> Count{Anzahl > 30?}
Count -- Ja --> Delete[Älteste löschen]
Count -- Nein --> Finish[Abschluss]
Delete --> Finish
end
Finish --> Ende((Ende))
```
---
## Backup- & Restore-Systeme (2)
- **Speichermanagement (Retention)**:
- Automatische Backup-Rotation.
- Limit: Letzte 30 Tage (Speicherplatz-Optimierung).
- **Restore-Skript**:
- Kontrollierter Wiederherstellungsprozess.
- Sicherheitsabfrage vor Überschreiben.
- Backup als "Rückversicherung" vor Import.
- DB-Neuanlage & automatischer Import.
---
## Authentifizierung mit LinkedIn (OAuth 2.0)
- **Ziel**:
- Abbau von Registrierungshürden.
- Keine sensiblen Passwörter im eigenen System.
![Ablauf der OAuth-Authentifizierung](Images/oauth-flow-new.png)
---
## Der Premium-Bereich (1)
**Zweck**: Motivation für aktives Mitglieder-Engagement.
![](../Diplomarbeitsbuch/images/04-Florian/ingenieur-antrag-status.png){width=20em}
![](../Diplomarbeitsbuch/images/04-Florian/ingenieur-antraege-liste.png){width=20em}
---
## Der Premium-Bereich (2)
**Architektur des Premium-Bereich-Moduls:**
```mermaid
graph LR
subgraph Client [WebAssembly]
UI[Benutzeroberfläche] --> SvcC[Service Client]
end
subgraph Server [ASP.NET Core]
SvcC --> Ctrl[API Controller]
Ctrl --> SvcS[Service Schicht]
end
subgraph Data [Datenbank]
SvcS --> EF[EF Core]
EF --> DB[(PostgreSQL)]
end
```
**Datensparsame Mitgliedersuche & Kontaktfunktion:**
![Mitgliedersuche und Kontaktfunktion für Premium-Mitglieder](../Diplomarbeitsbuch/images/04-Florian/premium-mitglieder-suche.png)
---
## Fazit & Ausblick
- **Erreichtes**:
- DSGVO-konformer Datenschutz.
- Hohe Ausfallsicherheit (automatisierte Bash-Backups).
- Barrierefreier Zugang (LinkedIn-Login).
- Echter Mehrwert durch Premium-Funktionen.
- **Ausblick**:
- Weitere OAuth-Anbieter (z.B. Google, Microsoft).
- Ausbau zukünftiger Premium-Features.

View File

@@ -0,0 +1,88 @@
# Adam Gaiswinkler
## Individueller Teil: Adam Gaiswinkler
**Entwicklung von CMSModulen & Frontend-Design**
- Schwerpunkt: Oqtane-Theme, Hall-of-Fame-Modul & Anmeldetool
- Ziel: Moderne, responsive Website für den HTL-Absolventenverein
<!-- BILD: Logo HTL Ungargasse + Vereinslogo nebeneinander -->
---
## Ausgangslage & Motivation
- **Ausgangssituation**: Moderne FrontendPlattform für den Absolventenverein (responsive, neue Features).
- **Persönliche Motivation**:
- TeamVerkleinerung (63) → mehr Verantwortung.
- Projektidentifikation & PraxisBlazor/ASP.NET.
- **Ziele**:
- OqtaneModule (Anmeldetool, HallofFame).
- Responsives UI/UX.
---
## Eingesetzte Technologien
- **TechStack**: Bootstrap+CustomCSS, QuestPDF, Gitea, VS2022wechsel zu VSCode (macOS).
<!-- BILD: Logos der verwendeten Tools (Bootstrap, QuestPDF, Gitea, VS Code) nebeneinander -->
---
## Umsetzung: Oqtane Theme
- EigenNavigation (bootstrap Komponenten haben nicht gepasst ).
- Systemseiten per LINQ ausblenden.
- Responsive CSSMediaQueries + reines CSSBurgerMenu.
- ControlPanel & CookieConsent.
![Theme Burger Ansicht](Images/ThemeBurgerMenu.png)
<!-- BILD: Screenshot der Website-Navigation auf Desktop (volle Menüleiste) -->
<!-- BILD: Screenshot des Burger-Menüs auf Mobile (aufgeklappt) -->
---
## Umsetzung: Hall of Fame
- **KartenGrid**: Responsive Übersicht, LiveSuche & Sortierung **in Echtzeit kein Seitenreload** (Blazor).
- **DetailSeite**: GlasmorphismusDesign (halbtransparente Karten mit Blur-Effekt).
- **Workflow**: RichTextEditor, BildUpload mit **Live-Vorschau** (max5MB), Status (Entwurf/Veröffentlicht) inkl. EigentümerCheck.
- **PDFExport**: Professionelle Profil-PDFs server-seitig mit QuestPDF.
- **Moderation**: Meldesystem über separates InterfacesPaket → saubere Logik-Trennung.
![Screenshot eines generierten PDFs](Images/HallOfFameBeispiel.png)
![Screenshot HallOfFame](Images/HallOfFame.png)
<!-- BILD: Screenshot des Karten-Grids mit mehreren Alumni-Einträgen -->
<!-- BILD: Screenshot der Detailseite (Glasmorphismus-Design) -->
<!-- BILD: Screenshot eines generierten PDFs -->
---
## Umsetzung: Anmeldetool
- Klar getrennte Ja/NeinButtons (grün/rot).
- **LiveFeedback via Blazor**: Statusänderungen sofort sichtbar andere Teilnehmer sehen Updates direkt.
- Mobile-optimiert: kein Overlay-Clipping, sauberes Touch-Handling.
- Saubere Trennung: UI-Komponente & Backend-API getrennt.
<!-- BILD: Screenshot Anmeldetool mit gruenem Ja- und rotem Nein-Button -->
<!-- BILD: Screenshot auf Mobile (Overlay-Ansicht) -->
---
## Herausforderungen & Lösungen
- **Plattformwechsel** Windows → macOS: Oqtane stark an Windows gebunden → **Visual Studio Code** als plattformübergreifende Lösung.
- **Hosting-Ausfall** (Hetzner, Sommer 2025): kurz vor einem Event → schnelle **Node.js/HTML-Übergangslösung** sicherte Event-Anmeldung.
<!-- BILD: Screenshot von Visual Studio Code auf macOS -->
---
## Learnings
- **Technisch**: Git, CSSFlexbox, Blazor.
- **Methodisch**: Aufgabenverteilung, regelmäßige Meetings.
- **Persönlich**: Eigeninitiative & Verantwortung.
---
## Fazit & Ausblick
- Theme final, mobil, Hall of Fame & Anmeldetool funktionsfähig.
- **Erweiterungen**: TeilnehmerAuswertung, AnmeldeLimit, automatische EMailErinnerungen.
<!-- BILD: Gesamtansicht der fertigen Website (Desktop) als Abschluss-Screenshot -->

View File

@@ -1,95 +0,0 @@
# Florian Edlmayer
## Individueller Teil: Florian Edlmayer
**Datensicherheit, Backup-Systeme & Premium-Bereich**
---
## Ausgangslage & Zielsetzung
- **Ausgangssituation**: Fehlen einer sicheren, datenschutzkonformen digitalen Vernetzung der Absolventen der HTL Ungargasse.
- **Mein Beitrag**:
- DSGVO-konforme Datenschutzimplementierung.
- Robuste, automatisierte Backups & Restore-Systeme.
- Externes Login mittels LinkedIn (OAuth 2.0).
- Konzeption und Entwicklung des Premium-Bereichs.
- **Nutzen**: Rechtskonformer Betrieb, hohe Ausfallsicherheit, einfache Nutzung, Förderung des Engagements.
---
## Eingesetzte Technologien
- **Framework**: ASP.NET Core & .NET 8
- **Datenbanksystem**: PostgreSQL
- **Authentifizierung**: OAuth 2.0 (LinkedIn)
- **Scripting & Automation**: Bash-Skripte für Linux Cronjobs
---
## DSGVO & Datenschutz
- **Notwendigkeit**: Einhaltung gesetzlicher Rahmenbedingungen (DSGVO, DSG).
- **Umsetzung**:
- Erstellung und Einbindung einer rechtskonformen Datenschutzerklärung.
- **Datenminimierung**: Es werden nur absolut notwendige Daten für den Vereinszweck erhoben.
- **Vertraulichkeit**: TLS/HTTPS-Verschlüsselung, lokales Hosting der Daten in Österreich (LiveDesign).
- Sicherstellung aller Betroffenenrechte (Auskunft, Löschung).
---
## Backup- & Restore-Systeme (1)
- **Problem**: Schutz der Daten vor Hardwareausfällen, Softwarefehlern oder Cyberangriffen.
- **Lösung: Vollautomatisiertes Backup-Skript**
- **Cronjob** führt Skript nachtschlafend (`02:30 Uhr`) aus.
- Sichert die `PostgreSQL`-Datenbank im Custom-Format (`pg_dump -Fc`).
- Komprimiert den gesamten App-Dateibaum mittels `tar -cvpzf`.
- Alle Backups erhalten UTC-Zeitstempel für ordentliche Strukturierung.
---
## Backup- & Restore-Systeme (2)
- **Retention Management**:
- Automatische Bereinigung alter Backups (Rotation). Nur die neuesten 30 Backups (`RETAIN=30`) bleiben vorhanden, um Speicherplatz zu sparen.
- **Restore-Skript**:
- Kontrollierter Wiederherstellungsprozess.
- Integrierte Sicherheitsabfrage (`ja/nein`) vor dem Überschreiben.
- Umbenennen bestehender Ordner als "Rückversicherung".
- Neuanlage der Datenbank (`dropdb` / `createdb`) & Einspielen via `pg_restore`.
---
## Authentifizierung mit LinkedIn (OAuth 2.0)
- **Ziel**: Reduzierung von Registrierungshürden und Steigerung der Plattformsicherheit (keine Passwörter im eigenen System speichern).
- **Ablauf**:
- Nutzer klickt auf "Via LinkedIn Anmelden".
- Weiterleitung an LinkedIn -> Freigabe durch den Nutzer.
- Oqtane External Login fängt Authorization Code ab, tauscht diesen gegen ein Access Token.
- Automatisches Mapping auf lokales Benutzerkonto mithilfe der definierten *Claims* (Name, System-ID).
---
## Der Premium-Bereich (1)
- **Zweck**: Anreiz für aktives Engagement im Absolventenverein.
- **Ingenieur-Antrags-Workflow**:
- Nutzer können *Ingenieur-Anträge* (PDF) via Oqtane FileManager hochladen (`Entity: EngineerApplication`).
- Nach Prüfung und Freigabe durch Admins (`Approved`) wird automatisch für 12 Monate der Premium-Status vergeben (`UserPremium`).
- **Bibliothek**:
- Premium-Mitglieder können eine Übersicht aller genehmigten Vorzeige-Anträge einsehen.
---
## Der Premium-Bereich (2)
- **Mitgliedersuche & Kontakt**:
- Gezielte, datensparsame Suchfunktion nach anderen Absolventen.
- Die Suche filtert sensible Daten serverseitig heraus, bevor es zum Client geschickt wird.
- **Kontakt-Mechanismus**: In-App Nachrichtensystem *ohne* Preisgabe der persönlichen E-Mail-Adresse. Oqtane übernimmt als Broker die Zustellung.
- **Architektur**:
- Umsetzung über EF Core (Tabellen: `UserPremium`, `EngineerApplication`, `PremiumEvent` wg. Audit-Trails).
- Rollenbasierte Zugriffskontrollen tief in der Service-Schicht (`IsAuthorized`).
---
## Fazit & Ausblick
- **Erreichtes**:
- Sensible Mitglieder-Daten sind DSGVO-konform geschützt.
- Die Betriebssicherheit wird durch fehlerresistente Bash-Backups bewahrt.
- Der nahtlose Login mit LinkedIn reduziert Barrieren stark.
- Der Premium-Bereich samt Ingenieur-Anträgen stiftet echten Mehrwert für die Alumni-Community.
- **Ausblick**: Evaluierung weiterführender OAuth-Anbieter sowie Ausbau der Premium-Pfeiler zur Steigerung der Mitglieds-Dauerhaftigkeit.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

View File

@@ -3,8 +3,8 @@ export TEXINPUTS=".:./libs/awesome-beamer/:./libs/smile/:$TEXINPUTS"
pandoc \
01_Praesentation_Allgemein.md \
02_Praesentation_Konstantin_Hintermayer.md \
03_Praesentation_Adam_Gaiswinkler.md \
04_Praesentation_Florian_Edlmayer.md \
03_Praesentation_Florian_Edlmayer.md \
04_Praesentation_Adam_Gaiswinkler.md \
-t beamer \
--template 00_preamble.tex \
--pdf-engine=pdflatex \

22
Video_Text_Skript.md Normal file
View File

@@ -0,0 +1,22 @@
# Video Text Skript
Anfang: Willkommen zu unserem Video über den AlumniHub. Wir sind Konstantin Hintermayer, Florian Edlmayer und Adam Gaiswinkler und wir haben im Rahmen unserer Diplomarbeit an der HTL SZU Ungargasse eine moderne Webanwendung für den Absolventenverein entwickelt.
Zu beginn unseres Projekts sind wir auf viele Probleme gestoßen. Im Sommer beschäftigten wir uns mit einer Übergangslösung um das kommende Treffen der Absolventen im Jahr 2025 zu ermöglichen. Ein weiteres Problem war unser Team Downsizing von 6 auf 3 Mitglieder. Dadurch mussten wir unsere ursprünglichen Pläne stark überdenken und uns auf das Wesentliche konzentrieren.
Außerdem sind wir immer wieder auf Probleme mit unserer Serverinfrastruktur gestoßen.
Ein zentraler Teil unserer Arbeit ist die kontinuierliche Integration unserer Software. Wir haben uns für Git als Versionsverwaltungssystem entschieden und hosten eine Gitea Instanz. Bei veröffentlichen eines tags wird automatisch ein neues Debian Paket gebaut und in unsererem Debian Package Registry bereitgestellt.Durch diese automatisierung ist die veröffentlichung von neuen Softwareversionen stark vereinfacht worden.
Das Hauptziel des Projektes war es eine moderne Webanwendung für den Absolvenntenverein zu kreieren. Die es ermöglicht einfach Events und treffen zu organisieren mithilfe unseres EventRegistration Moduls. Weiter Funktionen sind die Hall of Fame, wo Absolventen ihre Erfolge präsentieren können, das Schwarze Brett für Neuigkeiten und Jobangebote und der Premiumbereich für exklusive Inhalte. Diese sind im Laufe der Entwicklung hinzugekommen.
Nun wollen wir Ihnen unsere Webanwendung genauer vorstellen.
EventRegistration Modul:
Hall of Fame Modul:
Schwarzes Brett Modul:
Premiumbereich Modul: