Finalized the About page for now

This commit is contained in:
2025-11-29 15:13:47 +01:00
parent 664aed47a6
commit 839b7c9ba5
11 changed files with 410 additions and 96 deletions

View File

@@ -1,6 +1,10 @@
import { Routes } from '@angular/router';
import {AboutComponent} from './pages/about/about.component';
import {ProjectsComponent} from './pages/projects/projects.component';
export const routes: Routes = [
{ path: '', component: AboutComponent },
{ path: 'about', component: AboutComponent},
{ path: 'projects', component: ProjectsComponent},
];

View File

@@ -6,8 +6,9 @@
static readonly FLAG_EN = '/assets/flags/gb.svg';
//logos
static readonly TH_BINGEN_LOGO = '/assets/logos/assyst_gmbh_logo.jpg';
static readonly ASSYST_LOG = '/assets/logos/bingen-logo-white.svg';
static readonly CHAMAELEON_LOGO = '/assets/logos/logo_chamaeleon.svg';
static readonly TH_BINGEN_LOGO = '/assets/logos/bingen-logo-white.svg';
static readonly ASSYST_LOG = '/assets/logos/assyst_gmbh_logo.jpg';
static readonly COLORDIGITAL_LOGO = '/assets/logos/dmixcloud_logo.jpg';
static readonly TERAPORT_LOGO = '/assets/logos/teraport_gmbh_logo.jpg';

View File

@@ -12,8 +12,8 @@
<nav class="nav">
<a routerLink="/about" mat-button>{{ 'TOPBAR.ABOUT' | translate }}</a>
<a routerLink="/projects" mat-button>{{ 'TOPBAR.PROJECTS' | translate }}</a>
<a routerLink="/hobbys" mat-button>{{ 'TOPBAR.HOBBY' | translate }}</a>
<a routerLink="/contact" mat-button>{{ 'TOPBAR.CONTACT' | translate }}</a>
<a routerLink="/projects" mat-button>{{ 'TOPBAR.HOBBY' | translate }}</a>
<a routerLink="/projects" mat-button>{{ 'TOPBAR.CONTACT' | translate }}</a>
</nav>
<span class="spacer"></span>

View File

@@ -38,17 +38,6 @@
<a href="{{UrlConstants.LINKED_IN}}" target="_blank" rel="noopener">LinkedIn</a>
</div>
</div>
<div class="actions">
<a mat-flat-button color="primary" [href]="cvHref" target="_blank" rel="noopener">
<mat-icon>picture_as_pdf</mat-icon>
{{ 'ABOUT.DOWNLOAD_CV' | translate }}
</a>
<a mat-stroked-button routerLink="/projects">
<mat-icon>work_outline</mat-icon>
{{ 'ABOUT.VIEW_PROJECTS' | translate }}
</a>
</div>
</div>
</mat-card>
@@ -77,8 +66,6 @@
<mat-card class="experience">
<h2>{{ 'ABOUT.SECTION.EXPERIENCE' | translate }}</h2>
<div class="xp-list">
@for (entry of xpKeys; track entry) {
<div class="xp-item">
@@ -94,9 +81,6 @@
<div class="head-row">
<strong>{{ (entry.key + '.ROLE') | translate }}</strong>
<span class="time">{{ (entry.key + '.TIME') | translate }}</span>
<div class="company-row">
{{ (entry.key + '.COMPANY') | translate }}
</div>
</div>
<div class="company-row">
@@ -124,32 +108,45 @@
<h2>{{ 'ABOUT.SECTION.PROJECTS' | translate }}</h2>
<div class="xp-list">
@for (entry of projectKeys; track entry) {
<div class="xp-item">
<div class="xp-head">
<strong>{{ 'ABOUT.XP.T1.ROLE' | translate }}</strong>
<span class="time">{{ 'ABOUT.XP.T1.TIME' | translate }}</span>
<div class="head-row">
<strong>{{ (entry.key + '.TITLE') | translate }}</strong>
</div>
<div class="company-row">
{{ (entry.key + '.DESCRIPTION') | translate }}
</div>
<div class="link-row">
<a class="link-with-icon"
href="{{entry.externalLink}}"
target="_blank"
rel="noopener noreferrer">
<mat-icon>open_in_new</mat-icon>
{{ (entry.key + '.LINK_EXTERNAL') | translate }}
</a>
</div>
<div class="link-row">
<a class="link-with-icon"
href="{{entry.internalLink}}"
rel="noopener noreferrer">
<mat-icon>link</mat-icon>
{{ (entry.key + '.LINK_INTERNAL') | translate }}
</a>
</div>
<div class="highlights-noMargin">
<ul>
<li>{{ entry.key + '.HIGHLIGHTS.P1' | translate }}</li>
<li>{{ entry.key + '.HIGHLIGHTS.P2' | translate }}</li>
<li>{{ entry.key + '.HIGHLIGHTS.P3' | translate }}</li>
</ul>
</div>
<div class="xp-sub">{{ 'ABOUT.XP.T1.COMPANY' | translate }}</div>
<ul>
<li>{{ 'ABOUT.XP.T1.P1' | translate }}</li>
<li>{{ 'ABOUT.XP.T1.P2' | translate }}</li>
<li>{{ 'ABOUT.XP.T1.P3' | translate }}</li>
</ul>
</div>
<mat-divider></mat-divider>
<div class="xp-item">
<div class="xp-head">
<strong>{{ 'ABOUT.XP.T2.ROLE' | translate }}</strong>
<span class="time">{{ 'ABOUT.XP.T2.TIME' | translate }}</span>
</div>
<div class="xp-sub">{{ 'ABOUT.XP.T2.COMPANY' | translate }}</div>
<ul>
<li>{{ 'ABOUT.XP.T2.P1' | translate }}</li>
<li>{{ 'ABOUT.XP.T2.P2' | translate }}</li>
</ul>
</div>
@if(entry.key !== projectKeys.at(projectKeys.length-1)?.key)
{
<mat-divider></mat-divider>
}
}
</div>
</mat-card>
@@ -158,30 +155,20 @@
<div class="xp-list">
<div class="xp-item">
<div class="xp-head">
<strong>{{ 'ABOUT.XP.T1.ROLE' | translate }}</strong>
<span class="time">{{ 'ABOUT.XP.T1.TIME' | translate }}</span>
</div>
<div class="xp-sub">{{ 'ABOUT.XP.T1.COMPANY' | translate }}</div>
<ul>
<li>{{ 'ABOUT.XP.T1.P1' | translate }}</li>
<li>{{ 'ABOUT.XP.T1.P2' | translate }}</li>
<li>{{ 'ABOUT.XP.T1.P3' | translate }}</li>
</ul>
</div>
@for (entry of educationKeys; track entry) {
<div class="head-row">
<strong>{{ (entry.key + '.WHERE') | translate }}</strong>
<span class="time">{{ (entry.key + '.WHEN') | translate }}</span>
</div>
<div class="company-row">
{{ (entry.key + '.WHAT') | translate }}
</div>
<mat-divider></mat-divider>
<div class="xp-item">
<div class="xp-head">
<strong>{{ 'ABOUT.XP.T2.ROLE' | translate }}</strong>
<span class="time">{{ 'ABOUT.XP.T2.TIME' | translate }}</span>
</div>
<div class="xp-sub">{{ 'ABOUT.XP.T2.COMPANY' | translate }}</div>
<ul>
<li>{{ 'ABOUT.XP.T2.P1' | translate }}</li>
<li>{{ 'ABOUT.XP.T2.P2' | translate }}</li>
</ul>
@if(entry.key !== educationKeys.at(educationKeys.length-1)?.key)
{
<mat-divider style="margin-top: .5rem; margin-bottom: .5rem"></mat-divider>
}
}
</div>
</div>
</mat-card>

View File

@@ -29,7 +29,7 @@
.lead { opacity:.9; margin: .25rem 0 0.5rem; }
.meta {
display:flex; flex-direction:column; gap:.25rem;
display:flex; flex-direction:column; gap:.25rem; margin-bottom: 0.5rem;
.row {
display:flex; align-items:center; gap:.4rem;
a { color: inherit; }
@@ -37,8 +37,9 @@
}
.actions {
display:flex; gap:.5rem; flex-wrap:wrap; margin-top:.5rem; margin-bottom: 1rem;
display:flex; gap:.5rem; flex-wrap:wrap; margin-top:.5rem;
.mat-icon { margin-right:.25rem; }
}
}
}
@@ -48,11 +49,13 @@
border-radius: 16px;
padding: 5px;
background: var(--app-card-background);
h2 { margin-top: .25rem; margin-left: .25rem; }
.chip-groups {
margin-left: .25rem;
display:grid; gap:1rem;
grid-template-columns: 1fr 1fr;
margin-bottom: .5rem;
h3 { margin: .2rem 0 .4rem; font-size: .95rem; opacity:.85; }
mat-chip-set {
display:flex; flex-wrap:wrap; gap:.4rem;
@@ -146,6 +149,7 @@
height: 48px;
object-fit: contain;
opacity: .9;
border-radius: 10%;
background-color: var(--app-logo-bg);
}
@@ -173,6 +177,27 @@
opacity: .85;
}
.link-row {
grid-row: 2;
grid-column: 2;
margin-top: .1rem;
opacity: .85;
vertical-align: center;
}
.link-with-icon {
display: inline-flex;
align-items: center;
gap: .35rem;
line-height: 1;
}
.link-with-icon mat-icon {
font-size: 18px;
height: 18px;
width: 18px;
}
.highlights {
margin-top: .4rem;
margin-left: .75rem;
@@ -182,3 +207,11 @@
margin: .2rem 0;
}
}
.highlights-noMargin {
margin-top: .4rem;
li {
margin: .2rem 0;
}
}

View File

@@ -6,7 +6,6 @@ import { MatIconModule } from '@angular/material/icon';
import { MatButtonModule } from '@angular/material/button';
import { MatDividerModule } from '@angular/material/divider';
import { TranslateModule } from '@ngx-translate/core';
import {RouterLink} from '@angular/router';
import {UrlConstants} from '../../constants/UrlConstants';
import {AssetsConstants} from '../../constants/AssetsConstants';
@@ -17,7 +16,7 @@ import {AssetsConstants} from '../../constants/AssetsConstants';
imports: [
CommonModule, NgOptimizedImage,
MatCardModule, MatChipsModule, MatIconModule, MatButtonModule, MatDividerModule,
TranslateModule, RouterLink
TranslateModule
],
templateUrl: './about.component.html',
styleUrl: './about.component.scss'
@@ -27,16 +26,20 @@ export class AboutComponent {
xpKeys = [
{
key: 'ABOUT.XP.COMPANY7',
key: 'ABOUT.XP.COMPANY8',
logo: AssetsConstants.TERAPORT_LOGO
},
{
key: 'ABOUT.XP.COMPANY7',
logo: AssetsConstants.COLORDIGITAL_LOGO
},
{
key: 'ABOUT.XP.COMPANY6',
logo: AssetsConstants.COLORDIGITAL_LOGO
},
{
key: 'ABOUT.XP.COMPANY5',
logo: AssetsConstants.COLORDIGITAL_LOGO
logo: AssetsConstants.ASSYST_LOG
},
{
key: 'ABOUT.XP.COMPANY4',
@@ -48,7 +51,7 @@ export class AboutComponent {
},
{
key: 'ABOUT.XP.COMPANY2',
logo: AssetsConstants.ASSYST_LOG
logo: AssetsConstants.TH_BINGEN_LOGO
},
{
key: 'ABOUT.XP.COMPANY1',
@@ -56,10 +59,52 @@ export class AboutComponent {
},
{
key: 'ABOUT.XP.COMPANY0',
logo: AssetsConstants.TH_BINGEN_LOGO
logo: AssetsConstants.CHAMAELEON_LOGO
}
];
projectKeys = [
{
key: 'ABOUT.PROJECT.P2',
externalLink: 'https://andreas-dahm.eu/',
internalLink: 'projects'
},
{
key: 'ABOUT.PROJECT.P1',
externalLink: 'https://store.steampowered.com/app/1532640/El_Mucho/',
internalLink: 'projects'
},
{
key: 'ABOUT.PROJECT.P0',
externalLink: 'https://itch.io/c/6628860/lobos-collection',
internalLink: 'projects'
}
];
educationKeys = [
{
key: 'ABOUT.EDUCATION.E6'
},
{
key: 'ABOUT.EDUCATION.E5'
},
{
key: 'ABOUT.EDUCATION.E4'
},
{
key: 'ABOUT.EDUCATION.E3'
},
{
key: 'ABOUT.EDUCATION.E2'
},
{
key: 'ABOUT.EDUCATION.E1'
},
{
key: 'ABOUT.EDUCATION.E0'
}
]
primarySkills = [
'ABOUT.SKILLS.JAVA',
'ABOUT.SKILLS.SPRING',
@@ -74,6 +119,7 @@ export class AboutComponent {
toolset = [
'ABOUT.TOOLS.GIT',
'ABOUT.TOOLS.GITHUB',
'ABOUT.TOOLS.GITLAB',
'ABOUT.TOOLS.JENKINS',
'ABOUT.TOOLS.K8S',
'ABOUT.TOOLS.POSTGRES',

View File

@@ -1 +1 @@
<p>projects works!</p>
<p>Working in progress!</p>

View File

@@ -27,7 +27,9 @@
"SKILLS": "Fähigkeiten & Stack",
"PRIMARY": "Schwerpunkte",
"TOOLSET": "Toolset",
"EXPERIENCE": "Erfahrung"
"EXPERIENCE": "Erfahrung",
"PROJECTS": "Projekte",
"EDUCATION": "Ausbildung"
},
"SKILLS": {
"JAVA": "Java 8/Java 21+",
@@ -42,6 +44,7 @@
"TOOLS": {
"GIT": "Git",
"GITHUB": "Github",
"GITLAB": "Gitlab",
"JENKINS": "Jenkins",
"K8S": "Kubernetes / k3d",
"POSTGRES": "PostgreSQL",
@@ -49,7 +52,7 @@
"GRAFANA": "Grafana/Prometheus"
},
"XP": {
"COMPANY7": {
"COMPANY8": {
"COMPANY": "Teraport GmbH",
"ROLE": "Senior Software Developer / Architect",
"TIME": "Feb. 2024 heute",
@@ -59,7 +62,7 @@
"P3": "Entwicklung eines Kostenanalysetools mit dem Namen MIDO."
}
},
"COMPANY6": {
"COMPANY7": {
"COMPANY": "ColorDigital GmbH",
"ROLE": "Lead Software Developer",
"TIME": "März 2023 Dez. 2023",
@@ -69,7 +72,7 @@
"P3": "Zusammenarbeit mit Partnern und Kund:innen bei der Integration ihrer Systeme in die DMIx-Cloud."
}
},
"COMPANY5": {
"COMPANY6": {
"COMPANY": "ColorDigital GmbH",
"ROLE": "Senior Software Developer",
"TIME": "März 2021 März 2023",
@@ -79,7 +82,7 @@
"P3": "Entwicklung von „PAX“, einem Tool für den Datenaustausch zwischen der DMIx-Cloud und PLM/ERP-Systemen, inkl. CI/CD-Integration."
}
},
"COMPANY4": {
"COMPANY5": {
"COMPANY": "Assyst GmbH",
"ROLE": "Teamleitung",
"TIME": "Sep. 2015 Feb. 2021",
@@ -89,7 +92,7 @@
"P3": "Steuerung strategischer Initiativen im Bereich 3D-Softwareentwicklung."
}
},
"COMPANY3": {
"COMPANY4": {
"COMPANY": "Assyst GmbH",
"ROLE": "Software Engineer",
"TIME": "Apr. 2010 Feb. 2021",
@@ -99,7 +102,7 @@
"P3": "Mitarbeit an nationalen und internationalen Forschungsprojekten (EU7 und ZIM)."
}
},
"COMPANY2": {
"COMPANY3": {
"COMPANY": "Assyst GmbH",
"ROLE": "Praktikum und Diplomarbeit",
"TIME": "Apr. 2009 Apr. 2010",
@@ -109,7 +112,7 @@
"P3": "Erfolgreiche Umsetzung des Diplomthemas in Vidya."
}
},
"COMPANY1": {
"COMPANY2": {
"COMPANY": "TH Bingen (University of Applied Sciences)",
"ROLE": "Tutor für Grundlagen der Java-Programmierung",
"TIME": "Apr. 2008 Aug. 2008",
@@ -119,7 +122,7 @@
"P3": "Unterstützung bei praktischen Programmierübungen."
}
},
"COMPANY0": {
"COMPANY1": {
"COMPANY": "TH Bingen (University of Applied Sciences)",
"ROLE": "Wissenschaftliche Hilfskraft",
"TIME": "Okt. 2007 Apr. 2008",
@@ -128,6 +131,88 @@
"P2": "Implementierung einer Java-basierten Schnittstelle zu Microsoft Excel.",
"P3": "Integration des MIT-Exhibit-Frameworks und Vorbereitung für die CeBIT 2008."
}
},
"COMPANY0": {
"COMPANY": "Chamaeleon AG",
"ROLE": "Ausbildung Fachinformatiker Anwendungsentwicklung",
"TIME": "Jul. 2002 Jun. 2005",
"HIGHLIGHTS": {
"P1": "Entwicklung in PERL, PHP und ASP.",
"P2": "Portierung, Wartung und Reengineering von bestender Software.",
"P3": "Regelmäßige Durchführung von Systemtests und Qualitätskontrollen, sowie deren Dokumentation."
}
}
},
"PROJECT": {
"P2": {
"TITLE": "Playground",
"DESCRIPTION": "Dieses Projekt ist, wie der Name schon sagt, ein persönlicher Playground, der im Laufe der Zeit wachsen soll. Es präsentiert verschiedene private Projekte, an denen ich arbeite, und dokumentiert deren Fortschritt, zentrale Ideen und wichtige Meilensteine.",
"LINK_EXTERNAL": "andreas-dahm.eu",
"LINK_INTERNAL": "Projektdetails",
"HIGHLIGHTS": {
"P1": "Einsatz moderner Technologien und CI/CD-Pipelines (Angular 20+, Spring Boot 4, GitHub).",
"P2": "Präsentation persönlicher Projekte und kontinuierliche Verbesserung algorithmischer Fähigkeiten.",
"P3": "Vertiefung von JavaScript/TypeScript-, Angular- und Spring-Boot-Kenntnissen durch praktisches Arbeiten."
}
},
"P1": {
"TITLE": "El Mucho",
"DESCRIPTION": "Dies ist mein erstes veröffentlichtes Spiel auf Steam. Ich habe es gemeinsam mit meinem Bruder entwickelt und damit eines meiner persönlichen Ziele erreicht: ein eigenes Videospiel zu erstellen und zu veröffentlichen.",
"LINK_EXTERNAL": "Steam Store",
"LINK_INTERNAL": "Projektdetails",
"HIGHLIGHTS": {
"P1": "Veröffentlichung eines Spiels auf Steam und Integration der Steam-API.",
"P2": "Konzeption, Planung und vollständige Entwicklung eines eigenen Spiels.",
"P3": "Implementierung komplexer Algorithmen wie einer eigenen A*-Pfadfindungslogik und Spiel-KI."
}
},
"P0": {
"TITLE": "Game Jams",
"DESCRIPTION": "Dieser Bereich zeigt einige meiner bisherigen Game-Jam-Beiträge. Game Jams sind eine großartige Möglichkeit, neue Spielideen auszuprobieren und schnell zu überprüfen, ob ein Game-Loop funktioniert. Die engen Zeitvorgaben fördern den Fokus, es ist faszinierend, was man in so kurzer Zeit alles schaffen kann.",
"LINK_EXTERNAL": "Itch.io Sammlung",
"LINK_INTERNAL": "Projektdetails",
"HIGHLIGHTS": {
"P1": "Planung eines realistischen Projektumfangs mit einem Team, der innerhalb von 48 Stunden umsetzbar ist.",
"P2": "Lernen, fokussiert und effizient unter strengen Zeitvorgaben zu arbeiten.",
"P3": "Die Freude zu erleben, in kurzer Zeit ein spielbares Projekt zu erstellen und andere damit spielen zu sehen."
}
}
},
"EDUCATION": {
"E6": {
"WHERE": "FH Bingen (University of Applied Sciences)",
"WHEN": "2006 - 2010",
"WHAT": "Diplom (FH), Angewandte Informatik (Schnitt 1.4)"
},
"E5": {
"WHERE": "FH Koblenz (University of Applied Sciences)",
"WHEN": "2005 - 2006",
"WHAT": "1 Semester Ingenieurinformatik"
},
"E4": {
"WHERE": "BBS Montabaur",
"WHEN": "2002 - 2005",
"WHAT": "Ausbildung zum Fachinformatiker Anwendungsentwicklung"
},
"E3": {
"WHERE": "BBS Andernach - Höhere Berufsbachschule (Informatik)",
"WHEN": "2000 - 2002",
"WHAT": "Fachhochschulreife"
},
"E2": {
"WHERE": "BBS Andernach - Berufsfachschule Technik (E-Technik)",
"WHEN": "1998 - 2000",
"WHAT": "Realschulabschluss"
},
"E1": {
"WHERE": "Hauptschule Hinter Burg Mayen (Albert Schweitzer Realschule plus)",
"WHEN": "1995 - 1998 ",
"WHAT": "Hauptschulabschluss"
},
"E0": {
"WHERE": "Albert Schweitzer Realschule Mayen",
"WHEN": "1993 - 1995",
"WHAT": "Kein Abschluss. Wechsel zur Hauptschule"
}
}
}

View File

@@ -27,7 +27,9 @@
"SKILLS": "Skills & Stack",
"PRIMARY": "Core",
"TOOLSET": "Toolset",
"EXPERIENCE": "Experience"
"EXPERIENCE": "Experience",
"PROJECTS": "Projects",
"EDUCATION": "Education"
},
"SKILLS": {
"JAVA": "Java 8/Java 21+",
@@ -41,14 +43,16 @@
},
"TOOLS": {
"GIT": "Git",
"GITHUB": "GITHUB",
"GITHUB": "Github",
"GITLAB": "Gitlab",
"JENKINS": "Jenkins",
"K8S": "Kubernetes / k3d",
"POSTGRES": "PostgreSQL",
"MONGO": "MongoDB",
"GRAFANA": "Grafana/Prometheus"
},
"XP": {
"COMPANY7": {
"COMPANY8": {
"COMPANY": "Teraport GmbH",
"ROLE": "Senior Software Developer / Architect",
"TIME": "Feb. 2024 now",
@@ -58,17 +62,17 @@
"P3": "Development of a cost analysis tool called MIDO."
}
},
"COMPANY6": {
"COMPANY7": {
"COMPANY": "ColorDigital GmbH",
"ROLE": "Lead Software Developer",
"TIME": "Mar. 2023 Dec. 2023",
"HIGHLIGHTS": {
"P1": "Planning a new cloud architecture to migrate a large legacy monolith to a modern microservice-based platform.",
"P2": "Led the development team of three to four backend engineers.",
"P3": "Collaborated with partners and customers on integrating their systems with the DMIx"
"P3": "Collaborated with partners and customers on integrating their systems with the DMIx."
}
},
"COMPANY5": {
"COMPANY6": {
"COMPANY": "ColorDigital GmbH",
"ROLE": "Senior Software Developer",
"TIME": "Mar. 2021 Mar. 2023",
@@ -78,7 +82,7 @@
"P3": "Development of 'PAX', a tool for data exchange between the DMIx cloud and customer PLM/ERP systems, including CI/CD integration."
}
},
"COMPANY4": {
"COMPANY5": {
"COMPANY": "Assyst GmbH",
"ROLE": "Team leadership",
"TIME": "Sep. 2015 Feb. 2021",
@@ -88,7 +92,7 @@
"P3": "Managed strategic initiatives in 3D software development."
}
},
"COMPANY3": {
"COMPANY4": {
"COMPANY": "Assyst GmbH",
"ROLE": "Software engineer",
"TIME": "Apr. 2010 Feb. 2021",
@@ -98,7 +102,7 @@
"P3": "Participated in national and international research projects (EU7 and ZIM)."
}
},
"COMPANY2": {
"COMPANY3": {
"COMPANY": "Assyst GmbH",
"ROLE": "Internship and Diploma",
"TIME": "Apr. 2009 Apr. 2010",
@@ -108,8 +112,8 @@
"P3": "Successfully implemented the diploma topic in Vidya."
}
},
"COMPANY1": {
"COMPANY": "TH bingen (University of Applied Sciences)",
"COMPANY2": {
"COMPANY": "TH Bingen (University of Applied Sciences)",
"ROLE": "Tutorial for fundamentals of Java programming",
"TIME": "Apr. 2008 Aug. 2008",
"HIGHLIGHTS": {
@@ -118,8 +122,8 @@
"P3": "Provided assistance during practical programming exercises."
}
},
"COMPANY0": {
"COMPANY": "TH bingen (University of Applied Sciences)",
"COMPANY1": {
"COMPANY": "TH Bingen (University of Applied Sciences)",
"ROLE": "Research Asssitent",
"TIME": "Oct. 2007 Apr. 2008",
"HIGHLIGHTS": {
@@ -128,6 +132,78 @@
"P3": "Integration of the MIT Exhibit framework and preparation for CeBIT 2008."
}
}
},
"PROJECT": {
"P2": {
"TITLE": "Playground",
"DESCRIPTION": "This project is, as the name suggests, a personal playground that will grow over time. It showcases various private projects Im working on and documents their progress, key ideas, and milestones.",
"LINK_EXTERNAL": "andreas-dahm.eu",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Using modern technologies and CI/CD pipelines (Angular 20+, Spring Boot 4, GitHub).",
"P2": "Showcasing personal projects and improving algorithmic skills over time.",
"P3": "Deepening knowledge in JavaScript/TypeScript, Angular, Spring Boot and related technologies through hands-on practice."
}
},
"P1": {
"TITLE": "El Mucho",
"DESCRIPTION": "This is my first published game on Steam. I developed it together with my brother, fulfilling one of my personal goals: creating and releasing my own video game.",
"LINK_EXTERNAL": "Steam Store",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Publishing a game on Steam and integrating the Steam API.",
"P2": "Designing, planning and developing a complete game from scratch.",
"P3": "Implementing complex algorithms, including a custom A* pathfinding system and game AI logic."
}
},
"P0": {
"TITLE": "Game Jams",
"DESCRIPTION": "This section showcases several of my past game jam creations. Game jams are a great way to explore new game ideas and quickly validate whether a game loop works. The tight time constraints force you to focus, and its always exciting to see what can be achieved within such a short timeframe.",
"LINK_EXTERNAL": "Itch.io Collection",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Planning a realistic project scope with a team that can be built within 48 hours.",
"P2": "Learning to stay focused and work effectively under strict time constraints.",
"P3": "Experiencing the joy of creating a playable game in a short timeframe and seeing others enjoy it."
}
}
},
"EDUCATION": {
"E6": {
"WHERE": "FH Bingen (University of Applied Sciences)",
"WHEN": "2006 2010",
"WHAT": "Diploma (FH), Applied Computer Science (final grade 1.4)"
},
"E5": {
"WHERE": "FH Koblenz (University of Applied Sciences)",
"WHEN": "2005 2006",
"WHAT": "1 semester of Engineering Informatics"
},
"E4": {
"WHERE": "BBS Montabaur",
"WHEN": "2002 2005",
"WHAT": "Apprenticeship as IT Specialist for Application Development"
},
"E3": {
"WHERE": "BBS Andernach Higher Vocational School (Computer Science)",
"WHEN": "2000 2002",
"WHAT": "University entrance qualification (Fachhochschulreife)"
},
"E2": {
"WHERE": "BBS Andernach Vocational School for Technology (Electrical Engineering)",
"WHEN": "1998 2000",
"WHAT": "Secondary school certificate (Realschulabschluss)"
},
"E1": {
"WHERE": "Hauptschule Hinter Burg Mayen (Albert Schweitzer Realschule Plus)",
"WHEN": "1995 1998",
"WHAT": "Lower secondary school certificate (Hauptschulabschluss)"
},
"E0": {
"WHERE": "Albert Schweitzer Realschule Mayen",
"WHEN": "1993 1995",
"WHAT": "No degree (transferred to lower secondary school)"
}
}
}
}

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Konstruktion_Kopie" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 216 120" style="enable-background:new 0 0 216 120;" xml:space="preserve">
<style type="text/css">
.st0{fill:#58585A;}
.st1{fill:#007CBF;}
</style>
<g>
<g>
<path class="st0" d="M0.8,108.8V108c0-6.7,3.5-10.6,8.1-10.6c2,0,3.5,0.7,5,2l-2,3.4c-0.7-0.7-1.6-1.5-2.9-1.5c-2.3,0-4,2.6-4,7
v0.3c0,4.5,1.6,7,4.1,6.9c1.3,0,2.1-0.7,2.9-1.6l2,3.1c-1.2,1.4-3,2.3-5.3,2.3C4,119.3,0.8,115.5,0.8,108.8z"/>
<path class="st0" d="M16.7,90.5h4.1v10.2c1-1.8,2.4-3.3,4.9-3.3c3.3,0,5.3,2.5,5.3,6.6v15h-4.1v-13.9c0-2.6-1.1-4-2.9-4
s-3.1,1.5-3.1,4v13.8h-4.1V90.5z"/>
<path class="st0" d="M33.9,112.9v-0.4c0-4.5,2.5-6.8,6.2-6.8c1.5,0,2.7,0.4,3.9,0.8v-1.3c0-2.7-1.5-4-3.8-4c-1.7,0-3.2,0.8-4,1.3
l-1.3-3.4c1.7-0.9,3.6-1.6,5.9-1.6c2.3,0,4.1,0.7,5.3,1.9c1.3,1.3,2,3.2,2,5.7v13.8H44v-2.5c-1,1.8-2.6,2.9-4.7,2.9
C36.2,119.3,33.9,116.9,33.9,112.9z M44,112.4v-2.9c-0.8-0.4-1.9-0.6-2.9-0.6c-2,0-3.1,1.4-3.1,3.6v0.2c0,2.2,1.1,3.4,2.7,3.5
C42.5,116.1,44,114.4,44,112.4z"/>
<path class="st0" d="M51.9,97.7h4.1v2.9c1-1.9,2.5-3.3,4.8-3.3c2.1,0,3.7,1.1,4.6,3c1.1-1.6,2.6-3,5.1-3c3.1,0,5.4,2.2,5.4,6.6v15
h-4.1v-13.8c0-2.7-1-4-2.8-4c-1.8,0-3,1.5-3,4.1v13.8h-4.2v-13.8c0-2.7-1-4-2.7-4c-1.8,0-3,1.6-3,4.1v13.8h-4.1V97.7z"/>
<path class="st0" d="M78.9,112.9v-0.4c0-4.5,2.5-6.8,6.2-6.8c1.5,0,2.7,0.4,3.9,0.8v-1.3c0-2.7-1.5-4-3.8-4c-1.7,0-3.2,0.8-4,1.3
l-1.3-3.4c1.7-0.9,3.6-1.6,5.9-1.6c2.3,0,4.1,0.7,5.3,1.9c1.3,1.3,2,3.2,2,5.7v13.8H89v-2.5c-1,1.8-2.6,2.9-4.7,2.9
C81.3,119.3,78.9,116.9,78.9,112.9z M89,112.4v-2.9c-0.8-0.4-1.9-0.6-2.9-0.6c-2,0-3.1,1.4-3.1,3.6v0.2c0,2.2,1.1,3.4,2.7,3.5
C87.5,116.1,89,114.4,89,112.4z"/>
<path class="st0" d="M96.2,108.7v-0.6c0-6.7,3.3-10.8,7.6-10.8c4.7,0,7.3,4.2,7.3,10.8c0,0.2,0,1,0,1.9h-10.7
c0.3,3.7,2.2,5.6,4.6,5.6c1.6,0,2.8-0.9,3.9-2l1.9,3.1c-1.8,1.6-3.7,2.5-6.1,2.5C99.9,119.3,96.2,115.5,96.2,108.7z M107.1,107
c-0.1-3.6-1.3-6.1-3.3-6.1c-1.9,0-3.3,2.2-3.5,6.1H107.1z"/>
<path class="st0" d="M114.4,90.5h4.1v28.4h-4.1V90.5z"/>
<path class="st0" d="M122,108.7v-0.6c0-6.7,3.3-10.8,7.6-10.8c4.7,0,7.3,4.2,7.3,10.8c0,0.2,0,1,0,1.9h-10.7
c0.3,3.7,2.2,5.6,4.6,5.6c1.6,0,2.8-0.9,3.9-2l1.9,3.1c-1.8,1.6-3.7,2.5-6.1,2.5C125.8,119.3,122,115.5,122,108.7z M132.9,107
c-0.1-3.6-1.3-6.1-3.3-6.1c-1.9,0-3.3,2.2-3.5,6.1H132.9z"/>
<path class="st0" d="M139.4,108.7v-0.7c0-6.5,3.4-10.7,8-10.7c4.6,0,8,4.1,8,10.6v0.7c0,6.5-3.4,10.6-8,10.6
C142.7,119.3,139.4,115.2,139.4,108.7z M151.2,108.6v-0.4c0-4.3-1.6-7.1-3.9-7.1c-2.3,0-3.9,2.8-3.9,7.1v0.4
c0,4.3,1.6,7.1,3.9,7.1C149.7,115.7,151.2,112.8,151.2,108.6z"/>
<path class="st0" d="M158.7,97.7h4.1v2.9c1-1.8,2.4-3.3,4.9-3.3c3.3,0,5.3,2.5,5.3,6.6v15h-4.1v-13.9c0-2.6-1.1-4-2.9-4
s-3.1,1.5-3.1,4v13.8h-4.1V97.7z"/>
</g>
<g>
<path class="st0" d="M189.3,96l-6.5,22.9h3.9l1.4-5.1h6.1l1.4,5.1h4.1L193.1,96H189.3z M193.2,110.2H189l2.1-7.7L193.2,110.2z"/>
<path class="st0" d="M208.3,106.1v3.5h3.5v5.4c-0.5,0.3-1.3,0.5-2,0.5c-3.1,0-5.1-3-5.1-7.8v-0.4c0-4.6,2-7.7,5-7.7
c1.3,0,2.4,0.5,3.3,1.5l0.2,0.2l2.2-3.3l-0.2-0.1c-1.6-1.4-3.4-2-5.6-2c-5.4,0-9,4.6-9,11.4v0.4c0,7,3.4,11.4,8.9,11.4
c2,0,3.9-0.6,5.9-1.9l0.1-0.1v-11.1H208.3z"/>
</g>
</g>
<g>
<path class="st0" d="M92.2,50.7C93.8,33,107.1,18,125.4,14.9c21.7-3.6,42.3,11.1,45.9,32.8c0.2,1.3,0.4,2.6,0.5,4
c0.4-5.3-0.4-9.6-0.4-9.6c-4.8-27-30.5-45.1-57.6-40.6C101.4,3.6,90.9,10,83.4,18.9c0.6-4.6,0.4-10.2-1.9-7.8
c-3.2,3.3-13.2,6.4-16.5,7.1c0,0,0,0,0,0c-8.5,1.9-15.8,9-18.9,21.8c-3,12.1-14.5,20.2-14.6,20.3l0,0c7,8,26.7-3.2,26.9-3.3
l0.9,1.8c-0.2,0.1-8.5,4.8-18.4,5.9c0,0,10.7,5.2,32-3.5c0,0,0,0,0,0c0,0,0.4-0.2,1.1-0.5c0.2-0.1,0.4-0.2,0.7-0.3c0,0,0,0,0,0
C78.2,58.8,86.4,54.6,92.2,50.7z M64,40.9c-4.7,1.3-9.7-1.5-11-6.2c-1.3-4.7,1.5-9.7,6.2-11c4.7-1.3,9.7,1.5,11,6.2
C71.5,34.6,68.7,39.6,64,40.9z"/>
</g>
<path class="st1" d="M89.3,21.2c-0.4-2.3-1-4.5-1.7-6.7c-1.5,1.4-2.9,2.9-4.2,4.4c0.6-4.6,0.4-10.2-1.9-7.8
c-3.2,3.3-13.2,6.4-16.5,7.1c0,0,0,0,0,0c-8.5,1.9-15.8,9-18.9,21.8c-3,12.1-14.5,20.2-14.6,20.3l0,0c7,8,26.7-3.2,26.9-3.3l0.9,1.8
c-0.2,0.1-8.5,4.8-18.4,5.9c0,0,0.7,0.3,1.9,0.7c2.7,0.6,5.4,0.9,8.2,0.9c2.5,0,5.5-0.3,8.9-1C79.7,60.7,92.7,41.5,89.3,21.2z
M53,34.6c-1.3-4.7,1.5-9.7,6.2-11c4.7-1.3,9.7,1.5,11,6.2c1.3,4.7-1.5,9.7-6.2,11C59.2,42.2,54.3,39.4,53,34.6z"/>
<path class="st1" d="M65.7,35.7c1.5-0.4,2.3-1.6,2-3.5c-0.1-1-1.1-2.4-3.3-2.1c-2.2,0.4-2.1,2.2-1.8,3.5
C62.9,34.8,64.2,36.1,65.7,35.7z"/>
<path class="st1" d="M171.3,47.8c-3.6-21.7-24.2-36.4-45.9-32.8c-18.3,3-31.6,18.1-33.2,35.8c0.2-0.2,0.5-0.3,0.7-0.5
c0.8,0.3,2.6,0.5,5,0.6c-0.1,1.5-0.8,4.2-4.1,6.4C92,58.5,91,59.4,89,59.9c-3.3,0.8-6.8,2.9-7.3,3.7c-0.5,0.8-0.4,1-0.1,1.5
c0.5,0.6,1.3,1,5.6,0.6c2.9-0.2,4.8-0.6,5.4-0.6c0.6-0.1,0.7-0.7,0.9-1.4c0.9-3.4,15.2-6.8,16.2-10.8c0.2-0.7,0.2-1.5,0.2-2.2
c4.4-0.2,9.2-0.7,13.9-1.2c-0.4,0.7-0.7,1.4-0.9,2.1c-0.9,3.1-0.1,6.7,0.7,9.1c-4.1,1.1-6.4,2.8-6.4,3.8c0,1,3.8,1.5,6.9,1.4
c2.3-0.1,5.1-0.1,5.6-0.7c0.4-0.4,0.6-0.7,0.1-1.9c-0.3-0.6-1.7-4.1,0.5-8.1c1.7-3,2.8-3.8,9.6-7.1c2.4-1.2,4.5-2.1,6.4-2.9
c3.1-0.5,6.5-0.6,9.2,0.4c3.6,1.3,5.5,3.8,6.2,7.9c0.8,4.3-2.6,9.3-6.6,9.9l-1-1.9c3.5-0.6,5.8-3.9,5.3-7.4c-0.6-3.9-3-6.9-8.8-6.6
c-2.8,0.2-4.2,1-6.4,2.6c-10.7,9.1,0.6,24.8,12.4,21.9c11.5-2.9,14.6-12.7,15.1-20.2C171.6,50.4,171.5,49.1,171.3,47.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -27,12 +27,16 @@ $dark-theme: mat.define-theme((
--app-fg: #{mat.get-theme-color($light-theme, on-surface)};
--app-card-background: #fafafa;
--app-logo-bg: #313131;
--link-color: #38a7ff;
--link-color-hover: #66bfff;
}
.dark {
--app-bg: #{mat.get-theme-color($dark-theme, surface-container-low)};
--app-fg: #{mat.get-theme-color($dark-theme, on-surface)};
--app-card-background: #313131;
--app-logo-bg: #313131;
--link-color: #6dbcff;
--link-color-hover: #9ad2ff;
}
/* ---- global background and tests ---- */
@@ -69,3 +73,15 @@ body {
box-shadow 220ms ease,
fill 220ms ease;
}
/* links */
a {
color: var(--link-color);
text-decoration: none;
font-weight: 500;
&:hover {
color: var(--link-color-hover);
text-decoration: underline;
}
}