This commit is contained in:
2026-03-30 11:09:22 +02:00
parent 9324e86763
commit f0076948fd
13 changed files with 3979 additions and 261 deletions
+63
View File
@@ -24,6 +24,69 @@
opacity: 0; opacity: 0;
} }
/* Legal content rendered from markdown */
.legal-content h1 {
font-family: 'JetBrains Mono', monospace;
font-weight: 700;
font-size: 1.875rem;
margin-bottom: 3rem;
}
.legal-content h2 {
font-family: 'JetBrains Mono', monospace;
font-weight: 500;
font-size: 1.125rem;
margin-top: 2.5rem;
margin-bottom: 0.75rem;
color: rgba(255, 255, 255, 0.8);
}
.legal-content h3 {
font-family: 'JetBrains Mono', monospace;
font-weight: 500;
font-size: 0.875rem;
margin-top: 1.5rem;
margin-bottom: 0.5rem;
color: rgba(255, 255, 255, 0.6);
}
.legal-content p,
.legal-content li {
color: rgba(255, 255, 255, 0.6);
line-height: 1.625;
}
.legal-content p + p {
margin-top: 0.75rem;
}
.legal-content ul {
list-style-type: disc;
list-style-position: inside;
margin-left: 0.5rem;
margin-bottom: 0.75rem;
}
.legal-content ul li + li {
margin-top: 0.25rem;
}
.legal-content a {
color: rgba(255, 255, 255, 0.8);
text-decoration: underline;
text-underline-offset: 4px;
transition: color 0.2s;
}
.legal-content a:hover {
color: rgba(255, 255, 255, 1);
}
.legal-content strong {
color: rgba(255, 255, 255, 0.8);
font-weight: 500;
}
/* Staggered animation delays */ /* Staggered animation delays */
.delay-100 { animation-delay: 0.1s; } .delay-100 { animation-delay: 0.1s; }
.delay-200 { animation-delay: 0.2s; } .delay-200 { animation-delay: 0.2s; }
+27
View File
@@ -0,0 +1,27 @@
<template>
<div class="flex items-center gap-3 font-mono text-sm">
<NuxtLink
:to="{ query: { ...route.query, lang: 'en' } }"
:class="lang === 'en' ? 'text-white' : 'text-white/30 hover:text-white/60'"
class="transition-colors duration-200"
>
EN
</NuxtLink>
<span class="text-white/20">|</span>
<NuxtLink
:to="{ query: { ...route.query, lang: 'de' } }"
:class="lang === 'de' ? 'text-white' : 'text-white/30 hover:text-white/60'"
class="transition-colors duration-200"
>
DE
</NuxtLink>
</div>
</template>
<script setup lang="ts">
const route = useRoute()
const lang = computed(() => {
const l = route.query.lang as string
return l === 'de' ? 'de' : 'en'
})
</script>
+13
View File
@@ -0,0 +1,13 @@
import { defineContentConfig, defineCollection, z } from '@nuxt/content'
export default defineContentConfig({
collections: {
legal: defineCollection({
type: 'page',
source: '**/*.md',
schema: z.object({
title: z.string(),
}),
}),
},
})
+33
View File
@@ -0,0 +1,33 @@
---
title: Impressum
---
# Impressum
## Gesetzliche Anbieterkennung:
Bennet Gallein IT Solutions UG (haftungsbeschraenkt)
Elbinger Str. 18
DE-21339, Lüneburg
## Contact:
Phone: +49 1772489624
Email: me@bennetgallein.de
## Umsatzsteuer:
Umsatzsteuer-Identifikationsnummer gemäß § 27a UStG: DE320525917
## Inhalte:
Verantwortlich für den Inhalt gemäß § 55 Abs. 2 RStV:
Bennet Gallein, Elbinger Str. 18, 21339 Lüneburg
## FairCommerce
Wir sind seit 29.01.2022 Mitglied der Initiative "FairCommerce".
Nähere Informationen hierzu finden Sie unter www.haendlerbund.de/faircommerce.
+112
View File
@@ -0,0 +1,112 @@
---
title: Datenschutzerklärung
---
# Datenschutzerklärung
Soweit nachstehend keine anderen Angaben gemacht werden, ist die Bereitstellung Ihrer personenbezogenen Daten weder gesetzlich oder vertraglich vorgeschrieben, noch für einen Vertragsabschluss erforderlich. Sie sind zur Bereitstellung der Daten nicht verpflichtet. Eine Nichtbereitstellung hat keine Folgen. Dies gilt nur soweit bei den nachfolgenden Verarbeitungsvorgängen keine anderweitige Angabe gemacht wird.
"Personenbezogene Daten" sind alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen.
## Server-Logfiles
Sie können unsere Webseiten besuchen, ohne Angaben zu Ihrer Person zu machen.
Bei jedem Zugriff auf unsere Website werden an uns oder unseren Webhoster / IT-Dienstleister Nutzungsdaten durch Ihren Internet Browser übermittelt und in Protokolldaten (sog. Server-Logfiles) gespeichert. Zu diesen gespeicherten Daten gehören z.B. der Name der aufgerufenen Seite, Datum und Uhrzeit des Abrufs, die IP-Adresse, die übertragene Datenmenge und der anfragende Provider. Die Verarbeitung erfolgt auf Grundlage des Art. 6 Abs. 1 lit. f DSGVO aus unserem überwiegenden berechtigten Interesse an der Gewährleistung eines störungsfreien Betriebs unserer Website sowie zur Verbesserung unseres Angebotes.
## Kontakt
### Verantwortlicher
Kontaktieren Sie uns auf Wunsch. Die Kontaktdaten des für die Datenverarbeitung Verantwortlichen finden Sie in unserem Impressum.
### Initiativ-Kontaktaufnahme des Kunden per E-Mail
Wenn Sie per E-Mail initiativ mit uns in Geschäftskontakt treten, erheben wir Ihre personenbezogenen Daten (Name, E-Mail-Adresse, Nachrichtentext) nur in dem von Ihnen zur Verfügung gestellten Umfang. Die Datenverarbeitung dient der Bearbeitung und Beantwortung Ihrer Kontaktanfrage.
Wenn die Kontaktaufnahme der Durchführung vorvertraglichen Maßnahmen (bspw. Beratung bei Kaufinteresse, Angebotserstellung) dient oder einen bereits zwischen Ihnen und uns geschlossenen Vertrag betrifft, erfolgt diese Datenverarbeitung auf Grundlage des Art. 6 Abs. 1 lit. b DSGVO.
Erfolgt die Kontaktaufnahme aus anderen Gründen erfolgt diese Datenverarbeitung auf Grundlage des Art. 6 Abs. 1 lit. f DSGVO aus unserem überwiegenden berechtigten Interesse an der Bearbeitung und Beantwortung Ihrer Anfrage. ***In diesem Fall haben Sie das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit dieser auf Art. 6 Abs. 1 lit. f DSGVO beruhenden Verarbeitungen Sie betreffender personenbezogener Daten zu widersprechen.***
Ihre E-Mail-Adresse nutzen wir nur zur Bearbeitung Ihrer Anfrage. Ihre Daten werden anschließend unter Beachtung gesetzlicher Aufbewahrungsfristen gelöscht, sofern Sie der weitergehenden Verarbeitung und Nutzung nicht zugestimmt haben.
## Bestellungen
### Erhebung, Verarbeitung und Weitergabe personenbezogener Daten bei Bestellungen
Bei der Bestellung erheben und verarbeiten wir Ihre personenbezogenen Daten nur, soweit dies zur Erfüllung und Abwicklung Ihrer Bestellung sowie zur Bearbeitung Ihrer Anfragen erforderlich ist. Die Bereitstellung der Daten ist für den Vertragsschluss erforderlich. Eine Nichtbereitstellung hat zur Folge, dass kein Vertrag geschlossen werden kann. Die Verarbeitung erfolgt auf Grundlage des Art. 6 Abs. 1 lit. b DSGVO und ist für die Erfüllung eines Vertrags mit Ihnen erforderlich.
Eine Weitergabe Ihrer Daten erfolgt dabei beispielsweise an die von Ihnen gewählten Versandunternehmen und Dropshipping Anbieter, Zahlungsdienstleister, Diensteanbieter für die Bestellabwicklung und IT-Dienstleister. In allen Fällen beachten wir strikt die gesetzlichen Vorgaben. Der Umfang der Datenübermittlung beschränkt sich auf ein Mindestmaß.
## Zahlungsdienstleister
### Verwendung von PayPal
Alle PayPal-Transaktionen unterliegen der PayPal-Datenschutzerklärung. Diese finden Sie unter https://www.paypal.com/de/webapps/mpp/ua/privacy-full
### Verwendung von PayPal Express
Wir verwenden auf unserer Website den Zahlungsdienst PayPal Express der PayPal (Europe) S.à.r.l. et Cie, S.C.A. (22-24 Boulevard Royal L-2449, Luxemburg; "PayPal"). Die Datenverarbeitung dient dem Zweck, Ihnen die Zahlung über den Zahlungsdienst PayPal Express anbieten zu können.
Zur Einbindung dieses Zahlungsdienstes ist es erforderlich, dass PayPal beim Aufruf der Website Daten (z.B. IP-Adresse, Gerätetyp, Betriebssystem, Browsertyp, Standort Ihres Geräts) sammelt, speichert und analysiert. Hierzu können auch Cookies eingesetzt werden. Die Cookies ermöglichen die Wiedererkennung Ihres Browsers.
Die Nutzung von Cookies oder vergleichbarer Technologien erfolgt mit Ihrer Einwilligung auf Grundlage des § 25 Abs. 1 S. 1 TTDSG i.V.m. Art. 6 Abs. 1 lit. a DSGVO. Die Verarbeitung Ihrer personenbezogenen Daten erfolgt mit Ihrer Einwilligung auf Grundlage des Art. 6 Abs. 1 lit. a DSGVO. Sie können die Einwilligung jederzeit widerrufen, ohne dass die Rechtmäßigkeit der aufgrund der Einwilligung bis zum Widerruf erfolgten Verarbeitung berührt wird.
Mit Auswahl und Nutzung von PayPal Express werden die zur Zahlungsabwicklung erforderlichen Daten an PayPal übermittelt, um den Vertrag mit Ihnen mit der gewählten Zahlart erfüllen zu können. Diese Verarbeitung erfolgt auf Grundlage des Art. 6 Abs. 1 lit. b DSGVO.
Nähere Informationen zur Datenverarbeitung bei Verwendung des Zahlungsdienstes PayPal Express finden Sie in der dazugehörigen Datenschutzerklärung unter https://www.paypal.com/de/webapps/mpp/ua/privacy-full?locale.x=de_DE#Updated_PS
## Cookies
Unsere Website verwendet Cookies. Cookies sind kleine Textdateien, die im Internetbrowser bzw. vom Internetbrowser auf dem Computersystem eines Nutzers gespeichert werden. Ruft ein Nutzer eine Website auf, so kann ein Cookie auf dem Betriebssystem des Nutzers gespeichert werden. Dieser Cookie enthält eine charakteristische Zeichenfolge, die eine eindeutige Identifizierung des Browsers beim erneuten Aufrufen der Website ermöglicht.
Cookies werden auf Ihrem Rechner gespeichert. Daher haben Sie die volle Kontrolle über die Verwendung von Cookies. Durch die Auswahl entsprechender technischer Einstellungen in Ihrem Internetbrowser können Sie vor dem Setzen von Cookies benachrichtigt werden und über die Annahme einzeln entscheiden sowie die Speicherung der Cookies und Übermittlung der enthaltenen Daten verhindern. Bereits gespeicherte Cookies können jederzeit gelöscht werden. Wir weisen Sie jedoch darauf hin, dass Sie dann gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können.
Unter den nachstehenden Links können Sie sich informieren, wie Sie die Cookies bei den wichtigsten Browsern verwalten (u.a. auch deaktivieren) können:
- Chrome: https://support.google.com/accounts/answer/61416?hl=de
- Internet Explorer: https://support.microsoft.com/de-de/help/17442/windows-internet-explorer-delete-manage-cookies
- Mozilla Firefox: https://support.mozilla.org/de/kb/cookies-erlauben-und-ablehnen
- Safari: https://support.apple.com/de-de/guide/safari/manage-cookies-and-website-data-sfri11471/mac
### Technisch notwendige Cookies
Soweit nachstehend in der Datenschutzerklärung keine anderen Angaben gemacht werden setzen wir nur diese technisch notwendigen Cookies zu dem Zweck ein, unser Angebot nutzerfreundlicher, effektiver und sicherer zu machen. Des Weiteren ermöglichen Cookies unseren Systemen, Ihren Browser auch nach einem Seitenwechsel zu erkennen und Ihnen Services anzubieten. Einige Funktionen unserer Internetseite können ohne den Einsatz von Cookies nicht angeboten werden. Für diese ist es erforderlich, dass der Browser auch nach einem Seitenwechsel wiedererkannt wird.
Die Nutzung von Cookies oder vergleichbarer Technologien erfolgt auf Grundlage des § 25 Abs. 2 TTDSG. Die Verarbeitung Ihrer personenbezogenen Daten erfolgt auf Grundlage des Art. 6 Abs. 1 lit. f DSGVO aus unserem überwiegenden berechtigten Interesse an der Gewährleistung der optimalen Funktionalität der Website sowie einer nutzerfreundlichen und effektiven Gestaltung unseres Angebots.
***Sie haben das Recht aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit dieser Verarbeitungen Sie betreffender personenbezogener Daten zu widersprechen.***
## Betroffenenrechte und Speicherdauer
### Dauer der Speicherung
Nach vollständiger Vertragsabwicklung werden die Daten zunächst für die Dauer der Gewährleistungsfrist, danach unter Berücksichtigung gesetzlicher, insbesondere steuer- und handelsrechtlicher Aufbewahrungsfristen gespeichert und dann nach Fristablauf gelöscht, sofern Sie der weitergehenden Verarbeitung und Nutzung nicht zugestimmt haben.
### Rechte der betroffenen Person
Ihnen stehen bei Vorliegen der gesetzlichen Voraussetzungen folgende Rechte nach Art. 15 bis 20 DSGVO zu: Recht auf Auskunft, auf Berichtigung, auf Löschung, auf Einschränkung der Verarbeitung, auf Datenübertragbarkeit.
Außerdem steht Ihnen nach Art. 21 Abs. 1 DSGVO ein Widerspruchsrecht gegen die Verarbeitungen zu, die auf Art. 6 Abs. 1 f DSGVO beruhen, sowie gegen die Verarbeitung zum Zwecke von Direktwerbung.
### Beschwerderecht bei der Aufsichtsbehörde
Sie haben gemäß Art. 77 DSGVO das Recht, sich bei der Aufsichtsbehörde zu beschweren, wenn Sie der Ansicht sind, dass die Verarbeitung Ihrer personenbezogenen Daten nicht rechtmäßig erfolgt.
Eine Beschwerde können Sie unter anderem bei der für uns zuständigen Aufsichtsbehörde einlegen, die Sie unter folgenden Kontaktdaten erreichen:
Landesbeauftragte für den Datenschutz Niedersachsen
Prinzenstraße 5
30159 Hannover
Tel.: +49 511 1204500
Fax: +49 511 1204599
E-Mail: poststelle@lfd.niedersachsen.de
### Widerspruchsrecht
Beruhen die hier aufgeführten personenbezogenen Datenverarbeitungen auf Grundlage unseres berechtigten Interesses nach Art. 6 Abs. 1 lit. f DSGVO, haben Sie das Recht aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit diesen Verarbeitungen mit Wirkung für die Zukunft zu widersprechen.
Nach erfolgtem Widerspruch wird die Verarbeitung der betroffenen Daten beendet, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihren Interessen, Rechten und Freiheiten überwiegen, oder wenn die Verarbeitung der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen dient.
*letzte Aktualisierung: 10.01.2022*
+38
View File
@@ -0,0 +1,38 @@
---
title: Legal Notice
---
# Legal Notice
## Information pursuant to § 5 TMG
Bennet Gallein
Bennet Gallein IT Solutions
Elbinger Str. 18
21339 Lüneburg
## Contact
Phone: +49 1772489624
Email: me@bennetgallein.de
## VAT ID
VAT identification number pursuant to § 27a of the German VAT Act:
DE320525917
## Responsible for content pursuant to § 55 para. 2 RStV
Bennet Gallein
Elbinger Str. 18
21339 Lüneburg
## EU Dispute Resolution
The European Commission provides a platform for online dispute resolution (ODR): https://ec.europa.eu/consumers/odr/
Our email address can be found above in the legal notice.
## Consumer Dispute Resolution
We are not willing or obliged to participate in dispute resolution proceedings before a consumer arbitration board.
+80
View File
@@ -0,0 +1,80 @@
---
title: Privacy Policy
---
# Privacy Policy
Unless stated otherwise below, providing your personal data is neither legally nor contractually required. You are not obligated to provide data, and there are no consequences for not doing so.
"Personal data" refers to all information relating to an identified or identifiable natural person.
## Server Log Files
You can visit this website without providing any personal information. Each time this website is accessed, usage data is transmitted by your internet browser and stored in log files (server log files). This stored data includes, for example:
- Name of the page accessed
- Date and time of access
- IP address
- Amount of data transferred
- Requesting provider
Processing is carried out pursuant to Art. 6 para. 1 lit. f GDPR based on our legitimate interest in ensuring uninterrupted operation of the website and improving our services.
## Contact
### Data Controller
Bennet Gallein
Bennet Gallein IT Solutions
Elbinger Str. 18
21339 Lüneburg
Phone: +49 1772489624
Email: me@bennetgallein.de
### Contact via Email
When you contact us via email, we only collect the personal data you provide (name, email address, message text). Processing serves to handle and respond to your inquiry.
If the contact relates to pre-contractual measures or an existing contract, processing is carried out pursuant to Art. 6 para. 1 lit. b GDPR. In all other cases, processing is based on Art. 6 para. 1 lit. f GDPR. You have the right to object to this processing based on your particular situation.
Your email address is used exclusively for processing your inquiry. Data is deleted after statutory retention periods expire, unless you have consented to further processing.
## Cookies
Our website uses cookies — small text files that are stored by your browser on your device. Cookies contain characteristic strings that enable browser identification upon revisiting the site.
We use only technically necessary cookies to make our website user-friendly, effective, and secure. Some functions of the website require the browser to be recognized across page changes.
Cookie usage is based on § 25 para. 2 TTDSG. Processing of personal data occurs pursuant to Art. 6 para. 1 lit. f GDPR, based on our legitimate interest in ensuring website functionality and an effective service design.
You have the right to object to this processing based on your particular situation. You can manage or delete cookies at any time through your browser settings, though this may limit website functionality.
## Data Subject Rights & Storage Duration
### Storage Duration
After complete fulfillment of the purpose, data is retained considering legal, tax, and commercial retention requirements, then deleted upon expiration of those periods, unless you have consented to further processing.
### Your Rights
Where the legal requirements are met, you have the following rights under Art. 1520 GDPR: right to access, right to correction, right to deletion, right to restriction of processing, and right to data portability.
Additionally, under Art. 21 para. 1 GDPR, you have the right to object to processing based on Art. 6 para. 1 lit. f GDPR, as well as to processing for direct marketing purposes.
### Right to Lodge a Complaint
Under Art. 77 GDPR, you have the right to lodge a complaint with the supervisory authority if you believe that the processing of your personal data violates the law.
**Competent Supervisory Authority:**
Landesbeauftragte für den Datenschutz Niedersachsen
Prinzenstraße 5
30159 Hannover
Phone: +49 511 1204500
Fax: +49 511 1204599
Email: poststelle@lfd.niedersachsen.de
### Right to Object
Where processing is based on Art. 6 para. 1 lit. f GDPR, you have the right to object at any time on grounds relating to your particular situation. Following your objection, processing will cease unless there are compelling legitimate grounds that override your interests, or the processing serves to assert, exercise, or defend legal claims.
+11
View File
@@ -6,8 +6,19 @@ export default defineNuxtConfig({
modules: [ modules: [
'@nuxtjs/tailwindcss', '@nuxtjs/tailwindcss',
'@nuxtjs/google-fonts', '@nuxtjs/google-fonts',
'@nuxt/content',
], ],
content: {
renderer: {
anchorLinks: false,
},
},
tailwindcss: {
cssPath: '~/assets/css/main.css',
},
googleFonts: { googleFonts: {
families: { families: {
'JetBrains Mono': [400, 500, 700], 'JetBrains Mono': [400, 500, 700],
+3516 -23
View File
File diff suppressed because it is too large Load Diff
+2
View File
@@ -10,8 +10,10 @@
"postinstall": "nuxt prepare" "postinstall": "nuxt prepare"
}, },
"dependencies": { "dependencies": {
"@nuxt/content": "^3.12.0",
"@nuxtjs/google-fonts": "^3.2.0", "@nuxtjs/google-fonts": "^3.2.0",
"@nuxtjs/tailwindcss": "^6.14.0", "@nuxtjs/tailwindcss": "^6.14.0",
"better-sqlite3": "^12.8.0",
"nuxt": "^3.21.1", "nuxt": "^3.21.1",
"vue": "^3.5.28", "vue": "^3.5.28",
"vue-router": "^4.6.4" "vue-router": "^4.6.4"
+18 -66
View File
@@ -1,88 +1,40 @@
<template> <template>
<main class="flex-1 px-6 py-24"> <main class="flex-1 px-6 py-24">
<div class="max-w-3xl mx-auto w-full"> <div class="max-w-3xl mx-auto w-full">
<div class="flex items-center justify-between mb-12">
<NuxtLink <NuxtLink
to="/" to="/"
class="inline-flex items-center gap-2 font-mono text-sm text-white/40 hover:text-white transition-colors duration-200 mb-12" class="inline-flex items-center gap-2 font-mono text-sm text-white/40 hover:text-white transition-colors duration-200"
> >
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5">
<path stroke-linecap="round" stroke-linejoin="round" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18" /> <path stroke-linecap="round" stroke-linejoin="round" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18" />
</svg> </svg>
Back Back
</NuxtLink> </NuxtLink>
<LangSwitcher />
<article class="opacity-0 animate-fade-in prose-legal">
<h1 class="font-mono font-bold text-3xl sm:text-4xl mb-12">Legal Notice</h1>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Information pursuant to § 5 TMG</h2>
<div class="text-white/60 leading-relaxed space-y-1">
<p>Bennet Gallein</p>
<p>Bennet Gallein IT Solutions</p>
<p>Elbinger Str. 18</p>
<p>21339 Lüneburg</p>
</div> </div>
</section>
<section class="mb-10"> <article v-if="doc" class="opacity-0 animate-fade-in prose-legal">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Contact</h2> <ContentRenderer :value="doc" class="legal-content" />
<div class="text-white/60 leading-relaxed space-y-1">
<p>Phone: +49 1772489624</p>
<p>Email: me@bennetgallein.de</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">VAT ID</h2>
<div class="text-white/60 leading-relaxed space-y-1">
<p>
VAT identification number pursuant to § 27a of the German VAT Act:<br />
DE320525917
</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Responsible for content pursuant to § 55 para. 2 RStV</h2>
<div class="text-white/60 leading-relaxed space-y-1">
<p>Bennet Gallein</p>
<p>Elbinger Str. 18</p>
<p>21339 Lüneburg</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">EU Dispute Resolution</h2>
<div class="text-white/60 leading-relaxed">
<p>
The European Commission provides a platform for online dispute resolution (ODR):
<a
href="https://ec.europa.eu/consumers/odr/"
target="_blank"
rel="noopener noreferrer"
class="text-white/80 underline underline-offset-4 hover:text-white transition-colors"
>https://ec.europa.eu/consumers/odr/</a>.
</p>
<p class="mt-2">Our email address can be found above in the legal notice.</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Consumer Dispute Resolution</h2>
<div class="text-white/60 leading-relaxed">
<p>
We are not willing or obliged to participate in dispute resolution proceedings
before a consumer arbitration board.
</p>
</div>
</section>
</article> </article>
</div> </div>
</main> </main>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
const route = useRoute()
const lang = computed(() => {
const l = route.query.lang as string
return l === 'de' ? 'de' : 'en'
})
const { data: doc } = await useAsyncData(
() => `imprint-${lang.value}`,
() => queryCollection('legal').path(`/${lang.value}/imprint`).first(),
{ watch: [lang] },
)
useHead({ useHead({
title: 'Legal Notice Bennet Gallein IT Solutions', title: computed(() => `${doc.value?.title ?? 'Legal Notice'} Bennet Gallein IT Solutions`),
}) })
</script> </script>
+18 -154
View File
@@ -1,176 +1,40 @@
<template> <template>
<main class="flex-1 px-6 py-24"> <main class="flex-1 px-6 py-24">
<div class="max-w-3xl mx-auto w-full"> <div class="max-w-3xl mx-auto w-full">
<div class="flex items-center justify-between mb-12">
<NuxtLink <NuxtLink
to="/" to="/"
class="inline-flex items-center gap-2 font-mono text-sm text-white/40 hover:text-white transition-colors duration-200 mb-12" class="inline-flex items-center gap-2 font-mono text-sm text-white/40 hover:text-white transition-colors duration-200"
> >
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5">
<path stroke-linecap="round" stroke-linejoin="round" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18" /> <path stroke-linecap="round" stroke-linejoin="round" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18" />
</svg> </svg>
Back Back
</NuxtLink> </NuxtLink>
<LangSwitcher />
<article class="opacity-0 animate-fade-in prose-legal">
<h1 class="font-mono font-bold text-3xl sm:text-4xl mb-12">Privacy Policy</h1>
<section class="mb-10">
<div class="text-white/60 leading-relaxed space-y-3">
<p>
Unless stated otherwise below, providing your personal data is neither legally
nor contractually required. You are not obligated to provide data, and there are
no consequences for not doing so.
</p>
<p>
"Personal data" refers to all information relating to an identified or identifiable
natural person.
</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Server Log Files</h2>
<div class="text-white/60 leading-relaxed space-y-3">
<p>
You can visit this website without providing any personal information. Each time
this website is accessed, usage data is transmitted by your internet browser and
stored in log files (server log files). This stored data includes, for example:
</p>
<ul class="list-disc list-inside space-y-1 ml-2">
<li>Name of the page accessed</li>
<li>Date and time of access</li>
<li>IP address</li>
<li>Amount of data transferred</li>
<li>Requesting provider</li>
</ul>
<p>
Processing is carried out pursuant to Art. 6 para. 1 lit. f GDPR based on our
legitimate interest in ensuring uninterrupted operation of the website and improving
our services.
</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Contact</h2>
<div class="text-white/60 leading-relaxed space-y-3">
<h3 class="font-mono text-sm font-medium text-white/60 mb-2 mt-4">Data Controller</h3>
<div class="space-y-1">
<p>Bennet Gallein</p>
<p>Bennet Gallein IT Solutions</p>
<p>Elbinger Str. 18</p>
<p>21339 Lüneburg</p>
<p class="mt-2">Phone: +49 1772489624</p>
<p>Email: me@bennetgallein.de</p>
</div> </div>
<h3 class="font-mono text-sm font-medium text-white/60 mb-2 mt-6">Contact via Email</h3> <article v-if="doc" class="opacity-0 animate-fade-in prose-legal">
<p> <ContentRenderer :value="doc" class="legal-content" />
When you contact us via email, we only collect the personal data you provide
(name, email address, message text). Processing serves to handle and respond
to your inquiry.
</p>
<p>
If the contact relates to pre-contractual measures or an existing contract,
processing is carried out pursuant to Art. 6 para. 1 lit. b GDPR. In all other
cases, processing is based on Art. 6 para. 1 lit. f GDPR. You have the right to
object to this processing based on your particular situation.
</p>
<p>
Your email address is used exclusively for processing your inquiry. Data is
deleted after statutory retention periods expire, unless you have consented to
further processing.
</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Cookies</h2>
<div class="text-white/60 leading-relaxed space-y-3">
<p>
Our website uses cookies small text files that are stored by your browser
on your device. Cookies contain characteristic strings that enable browser
identification upon revisiting the site.
</p>
<p>
We use only technically necessary cookies to make our website user-friendly,
effective, and secure. Some functions of the website require the browser to be
recognized across page changes.
</p>
<p>
Cookie usage is based on § 25 para. 2 TTDSG. Processing of personal data
occurs pursuant to Art. 6 para. 1 lit. f GDPR, based on our legitimate interest
in ensuring website functionality and an effective service design.
</p>
<p>
You have the right to object to this processing based on your particular
situation. You can manage or delete cookies at any time through your browser
settings, though this may limit website functionality.
</p>
</div>
</section>
<section class="mb-10">
<h2 class="font-mono font-medium text-lg mb-3 text-white/80">Data Subject Rights &amp; Storage Duration</h2>
<h3 class="font-mono text-sm font-medium text-white/60 mb-2 mt-4">Storage Duration</h3>
<div class="text-white/60 leading-relaxed space-y-3">
<p>
After complete fulfillment of the purpose, data is retained considering legal,
tax, and commercial retention requirements, then deleted upon expiration of
those periods, unless you have consented to further processing.
</p>
</div>
<h3 class="font-mono text-sm font-medium text-white/60 mb-2 mt-6">Your Rights</h3>
<div class="text-white/60 leading-relaxed space-y-3">
<p>
Where the legal requirements are met, you have the following rights under
Art. 1520 GDPR: right to access, right to correction, right to deletion,
right to restriction of processing, and right to data portability.
</p>
<p>
Additionally, under Art. 21 para. 1 GDPR, you have the right to object to
processing based on Art. 6 para. 1 lit. f GDPR, as well as to processing for
direct marketing purposes.
</p>
</div>
<h3 class="font-mono text-sm font-medium text-white/60 mb-2 mt-6">Right to Lodge a Complaint</h3>
<div class="text-white/60 leading-relaxed space-y-3">
<p>
Under Art. 77 GDPR, you have the right to lodge a complaint with the supervisory
authority if you believe that the processing of your personal data violates the law.
</p>
<div class="mt-2 space-y-1">
<p class="text-white/80 font-medium">Competent Supervisory Authority:</p>
<p>Landesbeauftragte für den Datenschutz Niedersachsen</p>
<p>Prinzenstraße 5</p>
<p>30159 Hannover</p>
<p class="mt-2">Phone: +49 511 1204500</p>
<p>Fax: +49 511 1204599</p>
<p>Email: poststelle@lfd.niedersachsen.de</p>
</div>
</div>
<h3 class="font-mono text-sm font-medium text-white/60 mb-2 mt-6">Right to Object</h3>
<div class="text-white/60 leading-relaxed">
<p>
Where processing is based on Art. 6 para. 1 lit. f GDPR, you have the right to
object at any time on grounds relating to your particular situation. Following
your objection, processing will cease unless there are compelling legitimate
grounds that override your interests, or the processing serves to assert,
exercise, or defend legal claims.
</p>
</div>
</section>
</article> </article>
</div> </div>
</main> </main>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
const route = useRoute()
const lang = computed(() => {
const l = route.query.lang as string
return l === 'de' ? 'de' : 'en'
})
const { data: doc } = await useAsyncData(
() => `privacy-policy-${lang.value}`,
() => queryCollection('legal').path(`/${lang.value}/privacy-policy`).first(),
{ watch: [lang] },
)
useHead({ useHead({
title: 'Privacy Policy Bennet Gallein IT Solutions', title: computed(() => `${doc.value?.title ?? 'Privacy Policy'} Bennet Gallein IT Solutions`),
}) })
</script> </script>
+30
View File
@@ -0,0 +1,30 @@
import { readFile } from 'node:fs/promises'
import { resolve } from 'node:path'
const VALID_DOCS = ['imprint', 'privacy-policy']
const VALID_LOCALES = ['en', 'de']
export default defineEventHandler(async (event) => {
const doc = getRouterParam(event, 'doc')
const query = getQuery(event)
const lang = typeof query.lang === 'string' && VALID_LOCALES.includes(query.lang)
? query.lang
: 'en'
if (!doc || !VALID_DOCS.includes(doc)) {
throw createError({ statusCode: 404, message: `Unknown legal document: "${doc}". Valid options: ${VALID_DOCS.join(', ')}` })
}
const locales = lang === 'en' ? ['en'] : [lang, 'en']
for (const locale of locales) {
const filePath = resolve(process.cwd(), `content/${locale}/${doc}.md`)
try {
const content = await readFile(filePath, 'utf-8')
return { locale, doc, content }
}
catch {}
}
throw createError({ statusCode: 404, message: `Legal document "${doc}" not found` })
})