Nicolas Gioanni
HomeExperienceResearchProjectsRecommendationsResume
HomeExperienceResearchProjectsRecommendationsResume

Site notice

Privacy Notice

What information may be processed when you visit this portfolio or choose to make contact.

© 2026 Nicolas Gioanni. All rights reserved except where otherwise stated.

Nicolas Gioanni

Software Engineer

Notices

  • Contact & Communication Terms
  • Site Terms & Accuracy
  • Privacy Notice
  • Security & Responsible Disclosure

Resources

  • GitHub
  • LinkedIn
  • Source Code
  • ngioanni@uw.edu
  • Contact Form

Original portfolio content and media are protected. Site source code is licensed under the MIT License. Third-party names, marks, and materials remain the property of their respective owners.

Site notice

Privacy Notice

What information may be processed when you visit this portfolio or choose to make contact.

Notice details

Effective date: September 9, 2026

Scope and portfolio data practices

This Notice applies to this portfolio website. The portfolio has no visitor accounts, payment processing, first-party analytics, advertising, or tracking pixels. It does not use advertising, analytics, or cross-site tracking cookies. Its contact form uses one short-lived, essential verification cookie to enforce an upfront human-verification gate and provides a direct channel for legitimate professional inquiries.

The portfolio owner does not sell or rent personal information, use it for targeted or cross-context behavioral advertising, or use contact-submission information for unrelated marketing.

This does not mean that no personal data is ever processed. The hosting provider may process technical request information, and information is processed when a visitor submits the contact form, chooses to send an email, or opens an external destination.

Browser storage and essential verification cookie

The site reads your browser or device light-or-dark color preference locally. In System mode, it uses that signal to select Light or Dark and follows later changes. The system preference is not written to browser storage or retained as a site preference, and the theme feature does not transmit it to the portfolio owner or use it for advertising, analytics, cross-site tracking, or identification.

If you explicitly select Light, My mode, or Dark, the site stores that palette value in your browser's local storage under the key portfolio-theme so the manual override can be restored on later visits. Choosing System or clearing the value removes the override and resumes device-preference following. The site does not present a separate consent banner for this user-selected appearance setting or the essential verification cookie described below. Both mechanisms support a visitor-requested feature or necessary abuse prevention, and neither is used by the portfolio owner for advertising, analytics, or cross-site tracking. The UK Information Commissioner's Office guidance on storage and access exceptions is provided as UK-specific regulatory background.

After you complete the visible security gate and Cloudflare verifies the Turnstile check, the site sets a signed contact-verification cookie for up to 30 minutes. The cookie is restricted to this host and sent only over secure connections, is unavailable to browser scripts, and is limited to same-site requests. It contains a verification ticket bound to one opaque submission identifier, not your name, email address, phone number, message, acknowledgments, or other contact content. It is cleared after successful delivery. If delivery fails, it remains available until its original expiry so you can retry without repeating the security check.

Hosting and technical request information

This site is hosted by Cloudflare. When a browser requests the site, Cloudflare may process standard request and network information such as an IP address, approximate location derived from the IP address, system or device configuration, request timestamps, referring information, and traffic or diagnostic data. Cloudflare processes this information in connection with hosting, routing, security, diagnostics, and related service operation. Cloudflare describes its own processing in the Cloudflare Privacy Policy. That provider policy governs the provider's own processing; this Notice describes the portfolio owner's practices.

Contact requests and email communications

The contact form collects your first name, last name, email address, optional phone number, a message of up to 500 characters, and your confirmation of both required acknowledgments shown during review. It also processes a Cloudflare Turnstile response, an opaque submission identifier, and limited request information needed to validate the submission and prevent abuse. After verification, the form opens automatically after a brief success state unless you activate Continue sooner. Opening the form records a form-start timestamp. The final request also includes that timestamp and a hidden anti-spam field. These values are used to identify implausibly fast or automated submissions; the hidden field is expected to remain empty for ordinary visitors. The information is used to review your inquiry, send a receipt, respond to you, and protect the contact channel.

Loading and completing the visible upfront Turnstile gate causes the browser to communicate with Cloudflare before contact fields are entered. Cloudflare's Turnstile Privacy Addendum identifies limited browser and network signals, including the IP address, TLS fingerprint, user-agent header, site key, and associated origin, that Cloudflare processes for bot detection and service improvement. Cloudflare's Turnstile technical overview states that the service does not access, store, or transmit user communications, form entries, or page input.

In this implementation, contact fields are not supplied to Turnstile. The form creates an opaque identifier for the new message and supplies that identifier as Turnstile custom data. When you complete the gate, the widget creates a fresh, single-use token, and the browser sends only that token and the opaque submission identifier over HTTPS to /api/contact/verify. That narrowly scoped Cloudflare Pages Function may include the connecting IP address when it asks Cloudflare to verify the token. It requires successful verification, the expected action and hostname, and matching custom data before establishing the short-lived verification cookie. Contact fields remain unavailable until verification succeeds, then the form opens automatically after a brief delay or sooner when you activate Continue.

Your contact-field values remain in your browser while you complete and review the form. They are transmitted over HTTPS to /api/contact only when you choose Send request. That endpoint validates the signed verification ticket, matching submission identifier, submitted fields, and acknowledgments. For mail-domain validation, the server sends only the domain portion of the supplied address and the requested DNS record type. It does not send the local part of the address or other contact fields to Cloudflare's DNS-over-HTTPS resolver. Cloudflare describes resolver logging and retention in its 1.1.1.1 Public DNS Resolver privacy commitments. This check improves input quality but does not prove that a particular mailbox exists or belongs to the submitter. The endpoint does not send the Turnstile response through Cloudflare verification a second time. After an email-provider attempt or uncertain delivery outcome, reviewed fields are locked so the request can be retried with the same submission identifier and idempotent delivery payloads. A still-valid signed ticket permits only that same locked delivery retry without another Turnstile check. If the ticket expires first, the form returns to the visible gate and requires a fresh token while preserving the locked delivery identity and content. Successful refresh returns to the locked review and does not send automatically.

Before email delivery, an eligible request reserves one of two allowed attempts for that normalized address during a rolling 24-hour window. The reservation stores only the opaque submission identifier, keyed email value, opaque keyed full-payload fingerprint, reservation time, and expiry time in Cloudflare D1; it does not store the name, raw email address, phone number, or message. The same identifier can retry without taking another slot only when its address and payload fingerprints match, while a provider or network failure keeps the original reservation until it expires. The server normalizes the address by trimming it and converting it to lowercase, then stores a keyed HMAC-SHA-256 value rather than the address itself. It separately fingerprints the normalized delivery payload so a changed same-identifier retry is rejected without storing the field values.

After acceptance, Resend is asked first to deliver a transactional confirmation to the email address you supplied. Only after Resend accepts that request is it asked to deliver the private notification to the portfolio owner. The confirmation summarizes the information you submitted and links to this Privacy Notice and the Site Terms & Accuracy Notice. Acceptance by Resend does not guarantee final mailbox delivery; a receiving system can reject or bounce the message later. The private owner recipient is server-side configuration and is not included in the page, browser bundle, or endpoint response.

To create and deliver those messages, Resend receives the submitted name, email address, optional phone number, message, sender and recipient addressing data, and opaque submission-scoped idempotency keys. This implementation does not send Resend the Turnstile token, verification cookie, keyed D1 email value, form-start timestamp, hidden anti-spam value, or acknowledgment flags.

Resend's Data Processing Addendum describes Customer Data as including email addresses, message content, and related metadata, and explains Resend's processor or service-provider role for that data. Resend separately publishes a GDPR overview addressing storage, international transfers, and data-subject support; a Privacy Policy for information it controls in connection with its own sites, accounts, and services; and a current subprocessor list. Visitors should direct questions about a portfolio submission to the portfolio owner first rather than treating those materials as a separate agreement with Resend.

Selecting a direct email link instead opens your chosen email service or application. If you send an email, the message, attachments, addressing information, and subsequent correspondence are processed to review and respond to your communication. Do not submit passwords, payment data, government identifiers, medical information, access tokens, or other secrets through either contact method.

External destinations

This portfolio links to third-party websites and services, including repositories, institutions, professional profiles, publications, and demonstrations. Opening one of those destinations may allow that operator to collect or receive information under its own privacy notice. This Notice does not govern third-party destinations.

Provider materials linked in this Notice are independently maintained and may be revised by their respective providers. They are supplied for transparency and reference only; they do not replace or become part of this Notice, and the portfolio does not adopt provider statements as its own promises.

Retention and security

Full contact submissions are not added to a first-party contact database. Cloudflare D1 retains the pseudonymous reservation record described above for the rolling 24-hour limit. Once its expiry time passes it no longer counts toward the limit and is removed during subsequent reservation cleanup; an expired row may therefore remain until later contact traffic triggers cleanup. Deletion from the active D1 table may not immediately remove historical recovery copies maintained by Cloudflare; Cloudflare's D1 Time Travel documentation describes its current plan-dependent recovery windows.

Resend, Cloudflare and its DNS and D1 services, receiving email services, and the recipient mailboxes may separately retain messages, delivery records, security signals, queries, or request metadata according to their configurations and practices. The portfolio owner retains contact correspondence only for as long as reasonably necessary to address the inquiry, maintain appropriate professional records, investigate abuse or a security concern, or satisfy an applicable obligation. Because the relevant period depends on the correspondence and on provider, mailbox, backup, and operational settings, this Notice does not represent a fixed deletion date.

A manually selected theme override remains in your browser until you choose System or remove it. The contact-verification cookie is cleared after successful delivery or expires after 30 minutes; a failed delivery leaves it available only for a retry during that original period. Cloudflare's D1 data-security documentation and Resend's security overview describe safeguards those providers state they apply to their services. Those descriptions are provider representations, not an independent portfolio audit or a guarantee. Reasonable measures are used to maintain the portfolio and limit unnecessary collection, but no internet transmission, browser storage mechanism, hosting service, bot-protection service, or email system can be guaranteed completely secure.

Questions and privacy requests

To ask a question about this Notice or request access to, correction of, or deletion of personal information under the portfolio owner's control, contact ngioanni@uw.edu. Please identify the relevant submission, page, or material without sending additional sensitive information. A request may be verified and will be evaluated subject to applicable law, security, recordkeeping, and legitimate operational needs. If a request concerns Customer Data submitted through the portfolio and held by a service provider, contact the portfolio owner first so provider assistance can be sought where appropriate. A provider's privacy materials identify its own channel for processing it controls independently.

Changes to this Notice

This Notice may be revised to reflect changes in the portfolio, its service providers, or applicable requirements. A revised version will be posted here with an updated effective date. Where applicable law requires another form of notice or consent, that requirement will be followed.