diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index 5a7320d..5dd44d2 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -1,9 +1,13 @@ import { Routes } from '@angular/router'; import { HomeComponent } from './components/home/home.component'; +import { ImprintComponent } from './shared/components/legal-information/imprint/imprint.component'; +import { PrivacyPolicyComponent } from './shared/components/legal-information/privacy-policy/privacy-policy.component'; export const routes: Routes = [ { path: '', component: HomeComponent }, { path: 'login', component: HomeComponent }, { path: 'register', component: HomeComponent }, { path: 'forgot-password', component: HomeComponent }, + { path: 'imprint', component: ImprintComponent }, + { path: 'privacy-policy', component: PrivacyPolicyComponent }, ]; diff --git a/frontend/src/app/components/auth/forgot-password/forgot-password.component.html b/frontend/src/app/components/auth/forgot-password/forgot-password.component.html index 20da474..b7bab89 100644 --- a/frontend/src/app/components/auth/forgot-password/forgot-password.component.html +++ b/frontend/src/app/components/auth/forgot-password/forgot-password.component.html @@ -7,7 +7,7 @@ If the email you entered exists on our server, you will receive a message with instructions on how to reset your password.

- To the login + To the login } @else {
diff --git a/frontend/src/app/components/auth/forgot-password/forgot-password.component.scss b/frontend/src/app/components/auth/forgot-password/forgot-password.component.scss index bbdbb51..bbc955c 100644 --- a/frontend/src/app/components/auth/forgot-password/forgot-password.component.scss +++ b/frontend/src/app/components/auth/forgot-password/forgot-password.component.scss @@ -4,5 +4,5 @@ section { background-image: linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)), - url(./../../../../assets/img/backgrounds/forgot-password.png); + url(./../../../../assets/img/backgrounds/login.png); } diff --git a/frontend/src/app/components/auth/forgot-password/forgot-password.component.ts b/frontend/src/app/components/auth/forgot-password/forgot-password.component.ts index ab1f064..be7a144 100644 --- a/frontend/src/app/components/auth/forgot-password/forgot-password.component.ts +++ b/frontend/src/app/components/auth/forgot-password/forgot-password.component.ts @@ -2,11 +2,12 @@ import { CommonModule } from '@angular/common'; import { Component } from '@angular/core'; import { BtnLargeComponent } from '../../../shared/components/btn-large/btn-large.component'; import { FormsModule, NgForm } from '@angular/forms'; +import { RouterLink } from '@angular/router'; @Component({ selector: 'app-forgot-password', standalone: true, - imports: [CommonModule, BtnLargeComponent, FormsModule], + imports: [CommonModule, BtnLargeComponent, FormsModule, RouterLink], templateUrl: './forgot-password.component.html', styleUrl: './forgot-password.component.scss', }) diff --git a/frontend/src/app/components/auth/register/register.component.html b/frontend/src/app/components/auth/register/register.component.html index 5542f5a..aa31594 100644 --- a/frontend/src/app/components/auth/register/register.component.html +++ b/frontend/src/app/components/auth/register/register.component.html @@ -7,7 +7,7 @@ Please check your email to confirm your email address and complete the registration process.

- To the login + To the login
} @else {
-

Privacy policy

-

Imprint

+ Privacy policy + Imprint diff --git a/frontend/src/app/components/home/footer/footer.component.scss b/frontend/src/app/components/home/footer/footer.component.scss index a673429..53ce111 100644 --- a/frontend/src/app/components/home/footer/footer.component.scss +++ b/frontend/src/app/components/home/footer/footer.component.scss @@ -11,7 +11,7 @@ footer { height: 88px; padding: 12px; z-index: 1; - p { + a { padding: 0 36px; font-size: 18px; font-weight: 500; diff --git a/frontend/src/app/components/home/footer/footer.component.ts b/frontend/src/app/components/home/footer/footer.component.ts index 515bda6..5c09a53 100644 --- a/frontend/src/app/components/home/footer/footer.component.ts +++ b/frontend/src/app/components/home/footer/footer.component.ts @@ -1,12 +1,11 @@ import { Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; @Component({ selector: 'app-footer', standalone: true, - imports: [], + imports: [RouterLink], templateUrl: './footer.component.html', - styleUrl: './footer.component.scss' + styleUrl: './footer.component.scss', }) -export class FooterComponent { - -} +export class FooterComponent {} diff --git a/frontend/src/app/shared/components/legal-information/imprint/imprint.component.html b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.html new file mode 100644 index 0000000..db1e96b --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.html @@ -0,0 +1,96 @@ +
+
+
+

Legal Notice (Imprint)

+
+ Information according to §5 TMG +

+

Andre Kempf

+

Großschneidersweg 2a

+

76149 Karlsruhe

+

Contact

+

+ Phone: + 0172-4180328 +

+

+ Email: + mail@andre-kempf.com +

+
+

Disclaimer:

+ +

Liability for Content

+ +

+ The contents of our pages were created with the utmost care. However, we + cannot guarantee the accuracy, completeness, and timeliness of the + contents. As a service provider, we are responsible for our own content on + these pages according to § 7 Abs.1 TMG under general law. According to §§ + 8 to 10 TMG, however, we are not obligated as a service provider to + monitor transmitted or stored external information or to investigate + circumstances indicating illegal activity. Obligations to remove or block + the use of information under general law remain unaffected. However, + liability in this regard is only possible from the point in time when a + specific infringement becomes known. Upon notification of such violations, + we will remove this content immediately. +

+ +

Liability for Links

+ +

+ Our offer contains links to external third-party websites over whose + content we have no influence. Therefore, we cannot assume any liability + for these external contents. The respective provider or operator of the + pages is always responsible for the contents of the linked pages. The + linked pages were checked for possible legal violations at the time of + linking. Illegal contents were not recognizable at the time of linking. + Permanent content control of the linked pages is not reasonable without + concrete evidence of an infringement. Upon notification of violations, we + will remove such links immediately. +

+ +

Copyright

+ +

+ The content and works created by the site operators on these pages are + subject to German copyright law. Duplication, editing, distribution, and + any kind of exploitation outside the limits of copyright law require the + written consent of the respective author or creator. Downloads and copies + of this site are only permitted for private, non-commercial use. Insofar + as the contents on this site were not created by the operator, the + copyrights of third parties are respected. In particular, third-party + content is marked as such. Should you nevertheless become aware of a + copyright infringement, please inform us accordingly. Upon notification of + violations, we will remove such content immediately. +

+ +

Data Protection

+ +

+ The use of our website is usually possible without providing personal + information. Insofar as personal data (e.g., name, address, or email + addresses) are collected on our pages, this is always done on a voluntary + basis as far as possible. These data will not be passed on to third + parties without your explicit consent. We point out that data transmission + over the Internet (e.g., communication by email) can have security gaps. + Complete protection of data from access by third parties is not possible. + The use of contact data published in the context of the imprint obligation + by third parties for sending unsolicited advertising and information + materials is hereby expressly prohibited. The operators of the pages + expressly reserve the right to take legal action in the event of the + unsolicited sending of advertising information, such as spam emails. +

+
+

+ Imprint from the + Impressum Generator + of the + Kanzlei Hasselbach, Lawyers for Labor Law and Family Law +

+
+
diff --git a/frontend/src/app/shared/components/legal-information/imprint/imprint.component.scss b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.scss new file mode 100644 index 0000000..743097b --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.scss @@ -0,0 +1,73 @@ +section { + display: flex; + justify-content: center; + padding: 24px; + word-wrap: break-word; + overflow-wrap: break-word; + white-space: normal; + background-image: linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)), + url(./../../../../../assets/img/backgrounds/home.png); + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.content { + text-align: center; + max-width: 1024px; +} + +.header { + display: flex; + justify-content: center; + margin-bottom: 32px; +} + +h1 { + font-size: 48px; + font-weight: 700; + padding-bottom: 24px; +} + +h2 { + font-size: 32px; + font-weight: 700; + padding: 48px 0 24px 0; +} + +h3 { + font-size: 20px; + font-weight: 700; + padding: 24px 0; +} + +p { + font-size: 16px; + font-weight: 400; + padding-bottom: 10px; +} + +a { + text-decoration: none; + &:hover { + text-decoration: underline; + } +} + +/*------------- RESPONSIVE -------------*/ + +@media screen and (max-width: 910px) { + h1 { + font-size: 42px; + } +} + +@media screen and (max-width: 500px) { + h1 { + font-size: 34px; + } + + h2 { + font-size: 27px; + } +} diff --git a/frontend/src/app/shared/components/legal-information/imprint/imprint.component.spec.ts b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.spec.ts new file mode 100644 index 0000000..f2b9c25 --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ImprintComponent } from './imprint.component'; + +describe('Imprint', () => { + let component: ImprintComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ImprintComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ImprintComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/shared/components/legal-information/imprint/imprint.component.ts b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.ts new file mode 100644 index 0000000..d2e7f3a --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/imprint/imprint.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +@Component({ + selector: 'app-imprint', + standalone: true, + imports: [CommonModule], + templateUrl: './imprint.component.html', + styleUrl: './imprint.component.scss', +}) +export class ImprintComponent {} diff --git a/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.html b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.html new file mode 100644 index 0000000..712d87f --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.html @@ -0,0 +1,284 @@ +
+
+
+

Privacy Policy

+
+

Preamble

+

+ With the following privacy policy, we would like to inform you about the + types of your personal data (hereinafter also referred to as 'data') we + process, for what purposes and to what extent. The privacy policy applies + to all processing of personal data conducted by us, both within the + provision of our services and particularly on our websites, in mobile + applications, and within external online presences, such as our social + media profiles (hereinafter collectively referred to as 'online offer'). +

+ +

Table of Contents

+ +

Responsible person

+

Andre Kempf

+

Großschneidersweg 2a

+

76149 Karlsruhe

+
+

+ Phone: + 0172-4180328 +

+

+ Email: + mail@andre-kempf.com +

+ +

Overview of Processing Activities

+

+ The following overview summarizes the types of data processed and the + purposes of their processing, and refers to the data subjects. +

+

Types of Data Processed

+
    +
  • + Contact data, content data, usage data, metadata, communication data, + procedural data. +
  • +
+

Categories of Data Subjects

+
    +
  • Communication partners
  • +
+

Purposes of Processing

+
    +
  • + Contact requests and communication, management and response to + inquiries, feedback, provision of our online offer and + user-friendliness. +
  • +
+

Relevant Legal Bases

+

+ Relevant Legal Bases under the GDPR:
+ The following is an overview of the legal bases of the GDPR on which we + process personal data. Please note that, in addition to the provisions of + the GDPR, national data protection regulations may apply in your or our + country of residence or domicile. If specific legal bases are relevant in + individual cases, we will inform you of these in the privacy policy. +

+
    +
  • + Legitimate Interests (Art. 6 para. 1 sentence 1 lit. f GDPR):
    + The processing is necessary for the purposes of the legitimate interests + pursued by the controller or by a third party, except where such + interests are overridden by the interests or fundamental rights and + freedoms of the data subject which require protection of personal data. +
  • +
+

+ National Data Protection Regulations in Germany:
+ In addition to the data protection regulations of the GDPR, national + regulations on data protection apply in Germany. This includes, in + particular, the Federal Data Protection Act (BDSG). The BDSG contains + specific regulations on the right of access, the right to deletion, the + right to object, the processing of special categories of personal data, + the processing for other purposes, and the transmission and automated + decision-making in individual cases, including profiling. Furthermore, the + data protection laws of the individual federal states may apply. +

+ +

Security Measures

+

+ We take appropriate technical and organizational measures in accordance + with the legal requirements, taking into account the state of the art, the + implementation costs, and the nature, scope, context, and purposes of + processing, as well as the varying likelihood and severity of the risks to + the rights and freedoms of natural persons, to ensure a level of security + appropriate to the risk. +

+

+ The measures include, in particular, securing the confidentiality, + integrity, and availability of data by controlling physical and electronic + access to the data as well as the related access, input, transfer, + securing availability, and separation. Furthermore, we have established + procedures that ensure the exercise of data subject rights, the deletion + of data, and responses to data risks. Furthermore, we take the protection + of personal data into account during the development or selection of + hardware, software, and procedures in accordance with the principle of + data protection by design and by default. +

+

+ TLS/SSL encryption (https): To protect the data of users that are + transmitted via our online services, we use TLS/SSL encryption. Secure + Sockets Layer (SSL) is the standard technology for securing internet + connections by encrypting data transmitted between a website or app and a + browser (or between two servers). Transport Layer Security (TLS) is an + updated and more secure version of SSL. Hyper Text Transfer Protocol + Secure (HTTPS) is displayed in the URL when a website is secured by an + SSL/TLS certificate. +

+ +

Deletion of Data

+

+ The data processed by us will be deleted in accordance with the legal + requirements as soon as their permitted consents are revoked or other + permissions cease to apply (e.g., if the purpose for processing this data + no longer applies or is not necessary for the purpose). If the data is not + deleted because it is required for other and legally permissible purposes, + its processing will be restricted to these purposes. This means that the + data will be blocked and not processed for other purposes. This applies, + for example, to data that must be stored for commercial or tax reasons or + whose storage is necessary for the assertion, exercise, or defense of + legal claims or for the protection of the rights of another natural or + legal person. Our data protection notices may also contain further details + on the retention and deletion of data, which take precedence for the + respective processing operations. +

+ +

Rights of Data Subjects

+

+ Rights of data subjects under the GDPR: As a data subject, you have + various rights under the GDPR, which are particularly set out in Articles + 15 to 21 GDPR: +

+ Right to Object: +
    +
  • + You have the right, on grounds relating to your particular situation, to + object at any time to the processing of personal data concerning you + which is based on Article 6(1)(e) or (f) GDPR; this also applies to + profiling based on these provisions. If personal data concerning you is + processed for direct marketing purposes, you have the right to object at + any time to the processing of personal data concerning you for such + marketing; this also applies to profiling to the extent that it is + related to such direct marketing. +
  • +
+ Right to Withdraw Consent: +
    +
  • You have the right to withdraw your consents at any time.
  • +
+ Right of Access: +
    +
  • + You have the right to request confirmation as to whether data concerning + you is being processed and to access information about this data as well + as to further information and a copy of the data in accordance with the + legal requirements. +
  • +
+ Right to Rectification: +
    +
  • + You have the right, in accordance with the legal requirements, to + request the completion of data concerning you or the rectification of + inaccurate data concerning you. +
  • +
+ Right to Erasure and Restriction of Processing: +
    +
  • + You have the right, in accordance with the legal requirements, to + request that data concerning you be deleted immediately, or + alternatively, in accordance with the legal requirements, to request a + restriction of the processing of the data. +
  • +
+ Right to Data Portability: +
    +
  • + You have the right to receive the data concerning you that you have + provided to us in a structured, commonly used, and machine-readable + format in accordance with the legal requirements, or to request that it + be transmitted to another controller. +
  • +
+ Right to Lodge a Complaint with a Supervisory Authority: +
    +
  • + You also have the right, in accordance with the legal requirements, to + lodge a complaint with a supervisory authority, in particular in the + member state of your habitual residence, place of work, or place of the + alleged infringement, if you consider that the processing of personal + data relating to you infringes the GDPR. +
  • +
+ +

Changes and Updates to the Privacy Policy

+

+ We kindly ask you to regularly inform yourself about the content of our + privacy policy. We adapt the privacy policy as soon as the changes in the + data processing we perform make this necessary. We will inform you as soon + as the changes require your cooperation (e.g., consent) or another + individual notification. +

+

+ If we provide addresses and contact information of companies and + organizations in this privacy policy, please note that the addresses may + change over time and we ask you to check the information before contacting + us. +

+

Definitions of Terms

+

+ In this section, you will find an overview of the terminology used in this + privacy policy. Many of the terms are taken from the law and are primarily + defined in Art. 4 GDPR. The legal definitions are binding. The following + explanations, on the other hand, are primarily intended to aid + understanding. The terms are sorted alphabetically. +

+

+ Personal Data: 'Personal data' means any information + relating to an identified or identifiable natural person (hereinafter + 'data subject'); an identifiable natural person is one who can be + identified, directly or indirectly, in particular by reference to an + identifier such as a name, an identification number, location data, an + online identifier (e.g., cookie) or to one or more factors specific to the + physical, physiological, genetic, mental, economic, cultural or social + identity of that natural person. +

+

+ Controller: 'Controller' means the natural or legal + person, public authority, agency or other body which, alone or jointly + with others, determines the purposes and means of the processing of + personal data. +

+

+ Processing: 'Processing' means any operation or set of + operations which is performed on personal data or on sets of personal + data, whether or not by automated means, such as collection, recording, + organization, structuring, storage, adaptation or alteration, retrieval, + consultation, use, disclosure by transmission, dissemination or otherwise + making available, alignment or combination, restriction, erasure or + destruction. +

+
+
diff --git a/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.scss b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.scss new file mode 100644 index 0000000..6e7b61e --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.scss @@ -0,0 +1,80 @@ +section { + display: flex; + justify-content: center; + padding: 24px; + word-wrap: break-word; + overflow-wrap: break-word; + white-space: normal; + background-image: linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)), + url(./../../../../../assets/img/backgrounds/home.png); + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.content { + max-width: 1024px; +} + +.header { + display: flex; + justify-content: center; + margin-bottom: 32px; +} + +h1 { + width: 100%; + font-size: 61px; + font-weight: 700; + text-align: center; +} + +h2 { + font-size: 32px; + font-weight: 700; + padding: 24px 0 12px 0; +} + +h3 { + font-size: 20px; + font-weight: 700; + padding: 24px 0; +} + +p { + font-size: 16px; + font-weight: 400; + padding-bottom: 10px; +} + +ul { + padding: 12px; + li { + padding: 5px; + } +} + +a { + text-decoration: none; + &:hover { + text-decoration: underline; + } +} + +/*------------- RESPONSIVE -------------*/ + +@media screen and (max-width: 910px) { + h1 { + font-size: 42px; + } +} + +@media screen and (max-width: 500px) { + h1 { + font-size: 34px; + } + + h2 { + font-size: 27px; + } +} diff --git a/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.spec.ts b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.spec.ts new file mode 100644 index 0000000..51a0589 --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PrivacyPolicyComponent } from './privacy-policy.component'; + +describe('PrivacyPolicyComponent', () => { + let component: PrivacyPolicyComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PrivacyPolicyComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PrivacyPolicyComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.ts b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.ts new file mode 100644 index 0000000..56673db --- /dev/null +++ b/frontend/src/app/shared/components/legal-information/privacy-policy/privacy-policy.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'app-privacy-policy', + standalone: true, + imports: [CommonModule], + templateUrl: './privacy-policy.component.html', + styleUrl: './privacy-policy.component.scss', +}) +export class PrivacyPolicyComponent {} diff --git a/frontend/src/assets/img/backgrounds/forgot-password.png b/frontend/src/assets/img/backgrounds/forgot-password.png deleted file mode 100644 index 6ffcc8c..0000000 Binary files a/frontend/src/assets/img/backgrounds/forgot-password.png and /dev/null differ