feat: reworked portfolio

This commit is contained in:
2026-04-17 23:40:29 +02:00
parent b0e7a71a0c
commit d34b2aa669
71 changed files with 11627 additions and 5197 deletions
+78 -69
View File
@@ -1,76 +1,85 @@
<div class="container">
<div class="card profile">
<main class="page-shell imprint-page">
<section class="panel legal-hero">
<a class="back-link" routerLink="">
<fa-icon [icon]="faArrowLeft"></fa-icon>
<span>Back to portfolio</span>
</a>
<h1>Imprint</h1>
<p class="eyebrow">Legal</p>
<h1>Imprint & Privacy</h1>
<p class="legal-intro">
Legal disclosure for this website under Austrian law, in particular Section 5 ECG (E-Commerce Act) and Section 25 Austrian Media Act.
</p>
</section>
<h2>Information according to §5 ECG</h2>
<section class="legal-grid">
<article class="panel legal-card">
<p class="eyebrow">Provider</p>
<p class="legal-provider-name">{{ global.firstname }} {{ global.lastname }}</p>
<p class="legal-row">{{ global.address.street }} {{ global.address.houseNumber }}</p>
<p class="legal-row">{{ global.address.zip }} {{ global.address.city }}</p>
<p class="legal-row">{{ global.address.country }}</p>
</article>
{{ globalFields.firstname }} {{ globalFields.lastname }} <br>
{{ street }} {{ houseNumber }} <br>
{{ zip }} {{ city }} <br>
{{ country }} <br>
<article class="panel legal-card">
<p class="eyebrow">Contact</p>
<p class="legal-row">
Phone:
<a href="tel:{{ global.hrefContactPhone }}">{{ global.contactPhone }}</a>
</p>
<p class="legal-row">
E-mail:
<a [href]="contactSafeMail">{{ global.contactMail }}</a>
</p>
<p class="legal-row">
Abuse:
<a [href]="abuseSafeMail">{{ global.abuseMail }}</a>
</p>
</article>
</section>
<br>
<h4>Contact:</h4>
Phone: <b><u><a href="tel:{{globalFields.hrefContactTel}}">{{ globalFields.contactPhone }}</a></u></b> <br>
E-Mail: <b><u><a [href]="contactSafeMail">{{ globalFields.contactMail }}</a></u></b>
<br>
<h4>Abuse Contact:</h4>
E-Mail: <b><u><a [href]="abuseSafeMail">{{ abuseMail }}</a></u></b>
<br>
<h2>Disclaimer:</h2>
<h3>Liability for links</h3>
Our website contains links to external third-party websites over whose content we have no influence. Therefore, we
cannot accept any liability for this third-party content. The respective provider or operator of the pages is
always responsible for the content of the linked pages. The linked pages were checked for possible legal
violations at the time of linking. Illegal content was not recognizable at the time of linking. However, permanent
monitoring of the content of the linked pages is not reasonable without concrete evidence of an infringement. If
we become aware of any legal infringements, we will remove such links immediately.
<br>
<br>
<h3>Copyright</h3>
The content and works created by the site operators on these pages are subject to German copyright law.
Duplication, processing, distribution and any form of commercialization of such material beyond the scope of the
copyright law shall require the prior written consent of its respective author or creator. Downloads and copies of
this site are only permitted for private, non-commercial use. Insofar as the content on this site was not created
by the operator, the copyrights of third parties are respected. In particular, third-party content is identified
as such. Should you nevertheless become aware of a copyright infringement, please inform us accordingly. If we
become aware of any infringements, we will remove such content immediately.
<br>
<br>
<h3>Data privacy</h3>
The use of our website is generally possible without providing personal data. Insofar as personal data (e.g. name,
address or e-mail addresses) is collected on our website, this is always done on a voluntary basis as far as
possible. This data will not be passed on to third parties without your express consent.
We would like to point out that data transmission over the Internet (e.g. when communicating by e-mail) may be
subject to security vulnerabilities. Complete protection of data against access by third parties is not possible.
We hereby expressly prohibit the use of contact data published within the scope of the imprint obligation by third
parties for sending unsolicited advertising and information material. The operators of the website expressly
reserve the right to take legal action in the event of the unsolicited sending of advertising information, such as
spam e-mails.
<div class="max60">
<div id="short-desc" class="hover-items" routerLink="">
<fa-icon [icon]="faArrowRight"></fa-icon>
<a>
<u>
<h2>Back</h2>
</u>
</a>
<fa-icon [icon]="faArrowLeft"></fa-icon>
</div>
<section class="panel legal-copy">
<div class="legal-block">
<h2>Scope of Website</h2>
<p>This website is a personal portfolio and a contact point for software engineering and related digital services.</p>
</div>
</div>
</div>
<div class="legal-block">
<h2>Media Disclosure (Section 25 Austrian Media Act)</h2>
<p>
Media owner and publisher: {{ global.firstname }} {{ global.lastname }}. Editorial policy: Information about projects, technical
services, and professional activities in software development.
</p>
</div>
<div class="legal-block">
<h2>Liability for Content and External Links</h2>
<p>
Great care is taken when creating and maintaining this website. However, no liability is accepted for external websites linked from
this page. The respective operators are solely responsible for linked content.
</p>
</div>
<div class="legal-block">
<h2>Copyright</h2>
<p>
All content on this website (including text, images, and layout) is protected by copyright law. Any use beyond statutory exceptions
requires prior written permission.
</p>
</div>
<div class="legal-block">
<h2>Privacy (GDPR / DSGVO)</h2>
<p>
This website can generally be used without submitting personal data. If you contact me by e-mail, your data is processed only to
handle your request and is not shared without a valid legal basis.
</p>
<p>
You may exercise your data subject rights (access, rectification, erasure, restriction, objection) via the contact details listed
above.
</p>
</div>
</section>
</main>
<app-footer ngSkipHydration></app-footer>
+4 -4
View File
@@ -1,4 +1,5 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import type { ComponentFixture } from '@angular/core/testing';
import { TestBed } from '@angular/core/testing';
import { ImprintComponent } from './imprint.component';
@@ -8,9 +9,8 @@ describe('ImprintComponent', (): void => {
beforeEach(async (): Promise<void> => {
await TestBed.configureTestingModule({
imports: [ImprintComponent]
})
.compileComponents();
imports: [ImprintComponent],
}).compileComponents();
fixture = TestBed.createComponent(ImprintComponent);
component = fixture.componentInstance;
+18 -26
View File
@@ -1,41 +1,33 @@
import {Component, OnInit} from '@angular/core';
import {FooterComponent} from '../footer/footer.component';
import {RouterLink} from '@angular/router';
import {globalFields} from '../../global.fields';
import {DomSanitizer, SafeUrl} from '@angular/platform-browser';
import {FaIconComponent, IconDefinition} from '@fortawesome/angular-fontawesome';
import {faArrowDown, faArrowLeft, faArrowRight} from '@fortawesome/free-solid-svg-icons';
import type { OnInit } from '@angular/core';
import { Component, inject } from '@angular/core';
import { RouterLink } from '@angular/router';
import { DomSanitizer } from '@angular/platform-browser';
import type { SafeUrl } from '@angular/platform-browser';
import type { IconDefinition } from '@fortawesome/angular-fontawesome';
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
import { faArrowLeft } from '@fortawesome/free-solid-svg-icons';
import type { Global } from '../../global.fields';
import { global } from '../../global.fields';
import { FooterComponent } from '../footer/footer.component';
@Component({
selector: 'app-imprint',
imports: [
FooterComponent,
FaIconComponent,
RouterLink
],
templateUrl: './imprint.component.html'
imports: [FooterComponent, FaIconComponent, RouterLink],
templateUrl: './imprint.component.html',
})
export class ImprintComponent implements OnInit {
protected readonly globalFields: typeof globalFields = globalFields;
private readonly sanitizer = inject(DomSanitizer);
protected readonly street: string = 'Ulmenstraße';
protected readonly houseNumber: number = 9;
protected readonly zip: number = 3380;
protected readonly city: string = 'Pöchlarn';
protected readonly country: string = 'Austria';
protected readonly abuseMail: string = 'abuse@lechner-systems.at';
protected readonly global: Global = global;
protected contactSafeMail!: SafeUrl;
protected abuseSafeMail!: SafeUrl;
protected readonly faArrowRight: IconDefinition = faArrowRight;
protected readonly faArrowLeft: IconDefinition = faArrowLeft;
constructor(private _sanitizer: DomSanitizer) {
}
ngOnInit(): void {
this.contactSafeMail = this._sanitizer.bypassSecurityTrustUrl(`mailto:${globalFields.contactMail}`);
this.abuseSafeMail = this._sanitizer.bypassSecurityTrustUrl(`mailto:${this.abuseMail}`);
this.contactSafeMail = this.sanitizer.bypassSecurityTrustUrl(`mailto:${global.contactMail}`);
this.abuseSafeMail = this.sanitizer.bypassSecurityTrustUrl(`mailto:${this.global.abuseMail}`);
}
}