diff --git a/src/app/(general)/privacy/error.tsx b/src/app/(general)/privacy/error.tsx
new file mode 100644
index 0000000..b4ca9b0
--- /dev/null
+++ b/src/app/(general)/privacy/error.tsx
@@ -0,0 +1,13 @@
+"use client"
+
+import { useEffect } from "react"
+
+import ErrorComponent from "@/components/Error"
+
+export default function Error({ error, reset }: { error: Error & { digest?: string }; reset: () => void }) {
+ useEffect(() => {
+ console.error(error)
+ }, [error])
+
+ return
+}
diff --git a/src/app/(general)/privacy/page.tsx b/src/app/(general)/privacy/page.tsx
new file mode 100644
index 0000000..b84b107
--- /dev/null
+++ b/src/app/(general)/privacy/page.tsx
@@ -0,0 +1,15 @@
+import MarkdownContent from "@/components/common/MarkdownContent"
+import MdPrivacyPolicy from "@/content/privacy/privacy-policy.md"
+import "@/styles/privacy/PrivacyPolicy.css"
+
+export default function PrivacyPolicy() {
+ return (
+
+ )
+}
diff --git a/src/app/(general)/release-notes/page.tsx b/src/app/(general)/release-notes/page.tsx
index 47b9ab1..183071e 100644
--- a/src/app/(general)/release-notes/page.tsx
+++ b/src/app/(general)/release-notes/page.tsx
@@ -1,6 +1,5 @@
import MarkdownContent from "@/components/common/MarkdownContent"
import { extractMarkdownMetaData } from "@/utils/helpers"
-import "@/styles/Markdown.css"
export default function ReleaseNotes() {
const importAllFiles = (r: any) => r.keys().map(r)
@@ -10,8 +9,8 @@ export default function ReleaseNotes() {
return (
-
-
+
+
Release Notes
{markdownFiles.map((release: { default: string }, i: number) => {
@@ -26,7 +25,7 @@ export default function ReleaseNotes() {
{/* Mobile view */}
{date}
-
@@ -41,7 +40,7 @@ export default function ReleaseNotes() {
)}
-
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 4d56a11..8a04910 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -4,6 +4,20 @@ import Link from "next/link"
import { EMail } from "@/utils/constants"
import ImgLogoLarge from "@/assets/images/exifoo_logo_large.png"
+const productItems = [
+ { text: "Download", link: "/download" },
+ { text: "Features", link: "/#features" },
+ { text: "Release Notes", link: "/release-notes" },
+ { text: "Pricing", link: "/#pricing" },
+ { text: "Feedback", link: `mailto:${EMail.feedback}` },
+ { text: "Support", link: `mailto:${EMail.help}` }
+]
+
+const legalItems = [
+ { text: "Legal Notice", link: "/legal" },
+ { text: "Privacy Policy", link: "/privacy" }
+]
+
interface LinksPropsType {
title: string
items: { text: string; link: string }[]
@@ -50,19 +64,9 @@ export default function Footer() {
{/* Links */}
{/* Product */}
-
+
{/* Legal */}
-
+
)
diff --git a/src/content/legal/legal-notice.md b/src/content/legal/legal-notice.md
index a21dc1a..11b18af 100644
--- a/src/content/legal/legal-notice.md
+++ b/src/content/legal/legal-notice.md
@@ -1,16 +1,20 @@
# Legal Notice
+
+
### Responsible entity
-Andrin Schaller
-Fahrweidstrasse 83
-5630 Muri AG
+Andrin Schaller \
+Fahrweidstrasse 83 \
+5630 Muri AG \
Switzerland
**Email:** [$email-info](mailto:$email-info)
+
+
### Disclaimer
The author assumes no liability for the correctness, accuracy, timeliness, reliability and completeness of the information.
@@ -20,10 +24,14 @@ Liability claims against the author for material or immaterial damage resulting
All offers are non-binding. The author expressly reserves the right to change, add to, or delete parts of the pages or the entire offer without prior notice, or to temporarily or permanently cease publication.
+
+
### Disclaimer for content and links
References and links to third party websites are outside our area of responsibility. It rejected any responsibility for such websites. Access to and use of such websites is at the user's own risk.
+
+
### Copyright declaration
The copyrights and all other rights to content, images, photos or other files on this website belong exclusively to Andrin Schaller or the specifically named rights holders. The written consent of the copyright holder must be obtained in advance for the reproduction of any elements.
diff --git a/src/content/privacy/privacy-policy.md b/src/content/privacy/privacy-policy.md
new file mode 100644
index 0000000..4332ba3
--- /dev/null
+++ b/src/content/privacy/privacy-policy.md
@@ -0,0 +1,164 @@
+# Privacy Policy
+
+This Privacy Policy explains the type, scope, and purpose of the collection and use of personal data
+on our website exifoo.com ("Website") by exifoo ("we", "us"). It also provides information about
+your rights. These rights are based on the EU General Data Protection Regulation ("GDPR"),
+the Swiss Federal Act on Data Protection (“FADP”), and the revised Swiss Federal Act on
+Data Protection ("revFADP").
+
+
+
+## Responsible entity
+
+Responsible for processing data on the Website and the point of contact
+for privacy-related inquiries is:
+
+
+
+Andrin Schaller \
+Fahrweidstrasse 83 \
+5630 Muri AG \
+Switzerland
+
+
+
+**Email:** [$email-info](mailto:$email-info)
+
+
+
+## Data Collection
+
+
+
+### Hosting and Log Files
+
+To host our Website, we use the services of Vercel Inc. (440 N Barranca Avenue #4133, Covina, CA 91723, USA)
+("Vercel", "Host Provider"), with whom we have concluded a Data Processing Agreement ("DPA").
+
+
+
+To optimize and maintain our Website, we log technical errors that may occur when using our Website.
+Additionally, when using the Website, certain information is automatically collected and transmitted
+by your device’s browser to our Host Provider. This information includes:
+
+- IP address and operating system of your device
+- Browser type, version, and language
+- Date and time of the server request
+- Accessed file
+- The website from which the access was made (referrer URL)
+- Status code (e.g., 404)
+- Transmission protocol used (e.g., HTTP/2)
+
+These data are collected and stored by our Host Provider to optimize processes and workflows,
+particularly in connection with the use of our Website, as well as to ensure the security and
+stability of the computer system.
+
+
+
+For more information, please refer to Vercel's privacy policy: [https://vercel.com/legal/privacy-policy](https://vercel.com/legal/privacy-policy)
+
+
+
+### Cookies
+
+With the exception of cookies from external services listed in Section 3, we do not store our own cookies
+on this Website. These external services may set cookies to provide certain functionalities.
+
+
+
+Cookies are small files that are stored on your device and saved by your browser.
+Some cookies may be automatically deleted by the external service when you leave our Website.
+Other cookies may remain on your device until you delete them or until they expire.
+
+
+
+You can configure your browser to notify you before cookies are set and decide on a case-by-case basis
+whether to accept cookies, block cookies for specific cases or in general, or completely disable cookies.
+Please note that doing so may limit the functionality of this Website.
+
+
+
+Cookies that are necessary for electronic communication, for functionalities requested by you,
+or to optimize your user experience are stored — if the GDPR applies — based on Article 6(1)(f) of the GDPR.
+
+
+
+## External Services
+
+We use various third-party services on our Website. Below, we provide detailed information
+about the specific services we use, their purposes, and the data they collect.
+
+
+
+### Payment Service Provider
+
+For payment processing, we use the services of Lemon Squeezy LLC (222 South Main Street, Suite 500, Salt Lake City, UT 84101, USA)
+("Lemon Squeezy", "Payment Service Provider").
+
+
+
+The payment process is handled directly by the Payment Service Provider. We do not store or collect this
+data for our own purposes, they're transmitted directly to the Payment Service Provider.
+
+
+
+For more information, please refer to Lemon Squeezy's privacy policy: [https://www.lemonsqueezy.com/privacy](https://www.lemonsqueezy.com/privacy)
+
+
+
+## Links
+
+Our Website contains links to third-party websites. We are not responsible for the content and
+privacy practices of external websites that you may reach through these links. Please refer to the
+privacy policy directly on the respective websites.
+
+
+
+## Sharing Data with Third Parties
+
+To provide you with the information on our Website, we work with various service providers, especially with
+IT service providers, to ensure we offer you a Website that meets today's standards. These service providers
+only use your data within the scope of processing for us.
+
+
+
+We transfer data to entities outside of Switzerland and the European Union (third countries) without your
+consent only if this is required under the respective contract, to fulfill legal obligations,
+or for the purposes of our legitimate interests.
+
+
+
+## Your Rights
+
+To the extent provided by the applicable data protection law, you have the right to request information
+free of charge about the personal data stored about you, its origin, recipients, and the purpose of the
+data processing. You also have the right, under certain legal conditions, to request correction, deletion,
+restriction of processing, or, where applicable under the GDPR, to obtain your data for transfer to
+another entity.
+
+
+
+You can revoke any consent you have given with future effect at any time.
+For this, simply send us an informal message via e-mail.
+
+
+
+Please note that the rights mentioned above are subject to legal limitations and may affect or
+prevent the provision of our services.
+
+
+
+You have the right to assert your claims in court or to file a complaint with the competent
+data protection authority. For Switzerland, the responsible authority is the Federal Data Protection
+and Information Commissioner ([https://www.edoeb.admin.ch](https://www.edoeb.admin.ch)).
+
+
+
+## Changes to this Privacy Policy
+
+We reserve the right to change or update this Privacy Policy at any time. It is your responsibility
+as a user to regularly review our Privacy Policy for updates to stay informed about any changes.
+
+
+
+The current Privacy Policy can be accessed at [https://exifoo.com/privacy](https://exifoo.com/privacy).
diff --git a/src/content/release-notes/2025-01-04_v0.1.0-alpha.10.md b/src/content/release-notes/2025-01-04_v0.1.0-alpha.10.md
new file mode 100644
index 0000000..1706ffd
--- /dev/null
+++ b/src/content/release-notes/2025-01-04_v0.1.0-alpha.10.md
@@ -0,0 +1,20 @@
+---
+date: January 4, 2025
+---
+
+## v0.1.0-alpha.10
+
+#### 🚀 New Features
+
+- Lorem
+- ipsum
+
+#### 🔄 Improvements
+
+- Lorem
+- ipsum
+
+#### 🐞 Bugfixes
+
+- Lorem
+- ipsum
diff --git a/src/content/release-notes/2025-01-05_v0.2.0.md b/src/content/release-notes/2025-01-05_v0.2.0.md
new file mode 100644
index 0000000..30d3f2a
--- /dev/null
+++ b/src/content/release-notes/2025-01-05_v0.2.0.md
@@ -0,0 +1,20 @@
+---
+date: January 5, 2025
+---
+
+## v0.1.0
+
+#### 🚀 New Features
+
+- Lorem
+- ipsum
+
+#### 🔄 Improvements
+
+- Lorem
+- ipsum
+
+#### 🐞 Bugfixes
+
+- Lorem
+- ipsum
diff --git a/src/styles/Markdown.css b/src/styles/Markdown.css
index 6121b87..31b3709 100644
--- a/src/styles/Markdown.css
+++ b/src/styles/Markdown.css
@@ -1,13 +1,13 @@
.content h1 {
- @apply mt-14 pb-6 font-logo text-3xl font-bold tracking-tight text-neutral-800 sm:text-4xl;
+ @apply pb-6 font-logo text-3xl font-bold tracking-tight text-neutral-800 sm:text-4xl;
}
.content h2 {
- @apply mt-10 pb-3 text-2xl font-semibold text-neutral-700;
+ @apply pb-3 text-2xl font-semibold text-neutral-700;
}
.content h3 {
- @apply mt-8 pb-3 text-lg font-semibold text-neutral-700;
+ @apply pb-3 text-lg font-semibold text-neutral-700;
}
.content h4 {
@@ -15,17 +15,25 @@
}
.content p {
- @apply whitespace-pre-wrap leading-normal text-neutral-600;
+ @apply leading-normal text-neutral-600;
}
.content ul {
- @apply list-inside list-disc leading-normal text-neutral-600;
+ @apply my-3 ml-3 list-inside list-disc leading-normal text-neutral-600;
}
.content .spacer {
@apply h-3;
}
+.content .spacer-lg {
+ @apply h-10;
+}
+
+.content .spacer-2xl {
+ @apply h-20;
+}
+
.content strong {
@apply font-semibold;
}
diff --git a/src/styles/privacy/PrivacyPolicy.css b/src/styles/privacy/PrivacyPolicy.css
new file mode 100644
index 0000000..b5f5af7
--- /dev/null
+++ b/src/styles/privacy/PrivacyPolicy.css
@@ -0,0 +1,29 @@
+.content-privacy {
+ counter-reset: h2;
+}
+
+.content-privacy h2 {
+ counter-reset: h3;
+}
+
+.content-privacy h3 {
+ counter-reset: h4;
+}
+
+.content-privacy h2:before {
+ @apply mr-3 sm:mr-5;
+ counter-increment: h2;
+ content: counter(h2) ". ";
+}
+
+.content-privacy h3:before {
+ @apply mr-2 sm:mr-4;
+ counter-increment: h3;
+ content: counter(h2) "." counter(h3) ". ";
+}
+
+.content-privacy h4:before {
+ @apply mr-2 sm:mr-4;
+ counter-increment: h4;
+ content: counter(h2) "." counter(h3) "." counter(h4) ". ";
+}