Skip to content

Privacy

A plain-language explanation of what this portfolio measures and what it deliberately leaves out.

Last updated

The short version

  • Vercel measures anonymous traffic, a limited set of interaction events, and real-world site performance. Its Web Analytics product does not use cookies.
  • If PostHog is configured, you can allow detailed analytics or choose anonymous-only measurement. Capture is paused until you choose.
  • Text entered into an AI demo is sent to Google Gemini to produce the response, but the text itself is excluded from analytics.
  • I use this information to understand where visitors came from, which portfolio content is useful, and where the site can be faster or easier to use. I do not sell it or use it for targeted advertising.

Basic traffic and performance measurement

Vercel Web Analytics counts visits and page views and reports items such as the page or route, referrer, campaign parameters, country, browser, operating system, and device type. Vercel says this data is anonymized and cookieless. A daily hash derived from the incoming request is used to count visitors without following the same person across different days or sites. Read Vercel's Web Analytics privacy documentation.

The site also sends Vercel a restricted set of custom events. They can describe the landing source and path, outbound host, project or resume action, demo name and outcome, theme or media action, scroll depth, visible-tab time milestone, error recovery, and an analytics preference choice. Only an allowlisted subset of properties is sent. Email addresses, AI input and response text, form values, and raw advertising click IDs are not included.

Vercel Speed Insights measures how the site performs on real devices. Its data points can include the route and URL, network speed, browser, device type, operating system, country, Web Vital, the page element associated with that metric, SDK version, and event time. Vercel says these points are anonymous and cannot be used to reconstruct a browsing session across pages. Read Vercel's Speed Insights privacy documentation.

Optional detailed analytics

When a PostHog project token is configured, the site asks for your choice before loading its browser SDK or contacting PostHog. After your choice, it may collect:

  • Page views, page exits, routes, URLs, referring domains, UTM campaign values, and the presence of common advertising click identifiers, with the identifiers masked. URL fragments are excluded, but query parameters can be part of a page URL.
  • Browser, operating system, device type, language, time zone, screen and viewport sizes, and approximate location derived from network information when enabled in the PostHog project.
  • Clicks and form submissions on links, buttons, and forms. This includes limited non-text element metadata, but visible labels, input values, and placeholder attributes are excluded.
  • Scroll milestones, visible-tab time milestones, outbound destination hosts and paths, project and resume actions, demo lifecycle events, theme or media controls, and an analytics preference choice.
  • Performance measurements, dead clicks, heatmap coordinates, and masked session replay data.

Session replay masks every input field and any text explicitly marked as sensitive. It does not record cross-origin iframes, canvas content, console output, request or response headers, or request or response bodies. Network URLs in replay are reduced to the part before a query string or fragment. Ordinary visible page text can appear in a replay so that navigation and layout problems can be understood.

This site does not identify visitors to PostHog by name or email. After consent, PostHog uses a pseudonymous identifier so activity in a visit can be grouped into a session. Connection data such as an IP address reaches the analytics service and may be used for approximate geographic enrichment. See PostHog's privacy policy and session replay privacy controls.

Allowing detailed analytics lets PostHog store a pseudonymous identifier in first-party browser storage and cookies. The choice itself is remembered as a local-storage preference. Vercel Web Analytics remains cookieless and is not controlled by the detailed analytics dialog.

If you choose anonymous only, PostHog does not use cookies or browser storage as an analytics identity. If cookieless mode is also enabled in the PostHog project, it may still count anonymous activity with a privacy-preserving server-generated hash. PostHog states that this hash cannot be used to track someone across websites and rotates over time. If project-level cookieless mode is not enabled, those events are ignored. The browser's Do Not Track setting is also honored on a best-effort basis.

AI demo submissions

The chat demo sends the conversation you submit, and the analyzer sends the text you submit, through this site's server to the Google Gemini API. Google processes that content to generate the requested response. Do not submit confidential, sensitive, or personal information. Google's handling of API content is described in the Gemini API terms.

Analytics records only operational metadata about a demo request, such as the demo name, a size range, turn number, duration range, completion status, and response size range. It does not record prompts, conversation text, generated responses, or analyzer text. A client IP address is used as the request-limit key in server memory or Upstash Redis when that service is configured.

Service providers and retention

Vercel hosts the site and provides basic analytics and performance measurement. PostHog provides optional detailed analytics. Google provides the Gemini API, and Upstash may provide shared rate limiting. These providers process data to deliver their services under their own terms and retention practices. Analytics retention can also depend on the selected provider plan and project settings, so no fixed retention period is promised here.

Links from this portfolio can take you to other sites. Their privacy practices apply once you leave this site.

Controls and questions

When detailed analytics is available, use the Analytics preferences button in the footer to allow it, choose anonymous only, or change an earlier choice. Withdrawing consent stops future full PostHog capture but does not automatically delete data already collected. Clearing site storage resets the saved preference. Browser privacy tools and content blockers can provide additional control over basic measurement.

For a privacy question or a request concerning this site, use the contact page. Because most analytics is anonymous or pseudonymous, it may not be possible to connect a record to a specific person without additional information.