Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 35 additions & 33 deletions src/app/pages/privacy-policy/privacy-policy.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,47 +32,46 @@ <h2>2. General Information</h2>

<section>
<h2>3. Hosting and Server Log Files</h2>
<p>This website and its backend are hosted using external hosting providers.</p>
<p>This website and its contact-form backend are hosted using external hosting providers.</p>
<p>
When you access this website, technical information may automatically be processed by the
hosting infrastructure. This may include, in particular:
<strong>Frontend hosting: Netlify.</strong>
The Angular frontend is hosted by Netlify. When you access the website, Netlify may process
technical connection and request information required to provide, operate, secure and diagnose
the website. This may include IP addresses, the date and time of access, requested pages or
files, referrer information, browser and operating-system information, and HTTP status codes.
</p>
Comment on lines +38 to 42

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Disclose Netlify's proxying of contact submissions

For every production contact submission, the POST to /api/contact is first handled and proxied by Netlify via the 200 rewrite in netlify.toml:5-9, so Netlify receives the request body containing the name, email, message, privacy acknowledgement, and honeypot value before it reaches Apply.Build. Describing Netlify as processing only technical connection and request metadata leaves this processing of enquiry data undisclosed; either document Netlify's role in forwarding the form payload or send the form directly to the backend.

Useful? React with 👍 / 👎.

<ul>
<li>IP address</li>
<li>date and time of access</li>
<li>requested page or file</li>
<li>referrer URL</li>
<li>browser type and version</li>
<li>operating system</li>
<li>HTTP status code</li>
</ul>
<p>
This processing is necessary to provide the website securely and reliably and to detect
technical problems or misuse.
<strong>Backend hosting: Apply.Build.</strong>
The contact API is hosted using Apply.Build, a service operated by Codebite Oy in Finland.
Apply.Build states that its application compute, logs and object storage are hosted in the
European Economic Area and that it acts as a processor for personal data processed within
hosted customer applications. Technical request and security metadata, such as IP addresses,
HTTP headers, request paths, timestamps and user-agent information, may be processed for
operation, security and diagnostics.
</p>
<p>
The legal basis is Art. 6(1)(f) GDPR. My legitimate interest is the secure and technically
reliable operation of this website.
</p>
<p>
Hosting provider information will be added after the final production hosting setup has been
completed.
</p>
</section>

<section>
<h2>4. Contact Form</h2>
<p>
If you contact me using the contact form, the information you enter will be processed in order
to handle and respond to your request.
If you contact me using the contact form, the name, email address and message you enter are
transmitted to the backend and processed in order to handle and respond to your request.
</p>
<p>The contact form may process the following data:</p>
<p>The contact form processes the following enquiry data:</p>
<ul>
<li>name</li>
<li>email address</li>
<li>message</li>
<li>information concerning acceptance of the privacy notice</li>
</ul>
<p>
The form also transmits whether the required privacy notice acknowledgement was selected so
that the submission can be validated. This value is not included in the email content sent
through Brevo.
</p>
<p>The information is used to process your enquiry and communicate with you.</p>
<p>
Depending on the nature of your request, the legal basis is Art. 6(1)(b) GDPR where the
Expand All @@ -87,14 +86,16 @@ <h2>4. Contact Form</h2>
<section>
<h2>5. Email Delivery via Brevo</h2>
<p>
Messages submitted through the contact form are technically transmitted using the email
delivery service Brevo.
Brevo is used as the transactional email delivery provider for messages submitted through the
contact form.
</p>
<p>
In this context, data contained in your enquiry, such as your name, email address and message,
may be processed by Brevo for the purpose of delivering the email.
The backend sends the name, email address and message entered in the contact form to Brevo via
its API so that the enquiry can be delivered to the professional mailbox.
</p>
<p>
Brevo processes this data as a service provider for the technical delivery of the message.
</p>
<p>Brevo acts as a service provider for the technical delivery of these messages.</p>
<p>
Personal data is transmitted only to the extent necessary for the delivery and processing of
your enquiry.
Expand All @@ -104,9 +105,13 @@ <h2>5. Email Delivery via Brevo</h2>
<section>
<h2>6. Email Hosting via Zoho Mail</h2>
<p>
Emails sent to
Messages delivered through the contact form, as well as emails sent directly to
<a href="mailto:contact@kamycoding.com">contact&#64;kamycoding.com</a>
are hosted and processed using Zoho Mail.
are received and stored in the professional mailbox provided by Zoho Mail.
</p>
<p>
The Zoho account uses the European service domain mail.zoho.eu, which Zoho identifies as its
EU data center.
</p>
<p>
Zoho may process email content, sender and recipient addresses, and technical metadata
Expand Down Expand Up @@ -181,10 +186,7 @@ <h2>11. Security</h2>
Appropriate technical and organisational measures are used to protect personal data against
loss, misuse, unauthorised access or disclosure.
</p>
<p>
Communication with this website is provided via encrypted HTTPS connections where technically
available.
</p>
<p>Communication with the production website is encrypted using HTTPS.</p>
</section>

<section>
Expand Down
11 changes: 11 additions & 0 deletions src/app/pages/privacy-policy/privacy-policy.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ describe('PrivacyPolicy', () => {
expect(emailLink?.textContent).toBe('contact@kamycoding.com');
});

it('describes the production hosting and contact delivery providers', () => {
const content = fixture.nativeElement.textContent as string;

expect(content).toContain('Frontend hosting: Netlify');
expect(content).toContain('Backend hosting: Apply.Build');
expect(content).toContain('Codebite Oy');
expect(content).toContain('transactional email delivery provider');
expect(content).toContain('mail.zoho.eu');
expect(content).not.toContain('Hosting provider information will be added');
});

it('reuses the shared light footer and provides a route back home', () => {
const footer = fixture.nativeElement.querySelector('app-footer') as HTMLElement | null;
const backLink = fixture.nativeElement.querySelector(
Expand Down