Privacy notice
Controller
Patrick Buhl, Odenwaldstr. 12, 65812 Bad Soden am Taunus, Germany. Email: [email protected]. This notice covers patrickbuhl.com and silo.ceo.
Website access and hosting
Vercel Inc., USA, hosts the websites. Requests involve your IP address, requested page, time, browser information and technical error data. Processing serves secure delivery and troubleshooting under Article 6(1)(f) GDPR; my legitimate interest is an available website protected against attacks. Frankfurt is the configured compute region. This does not rule out processing outside the EU, including infrastructure and support processing.
Fonts and the portrait are served locally. The website includes no analytics scripts, advertising trackers or embedded social-media widgets. The intended standard Vercel Pro plan retains function logs for one day; Workflow storage below is separate.
Optional AI chat
The chat on patrickbuhl.com answers questions about my professional experience, approved projects and AI consulting. Conversation data supports the exchange, continuing your saved chats in the same browser, reconciliation of uncertain sends and limited technical troubleshooting. The greeting, the reply to the unchanged opening question and matched standard answers are prepared. Introductory and standard answers are saved with your question in your own history without calling an AI model. Only curated public answers are reused, not answers from other visitors’ conversations. Actual model requests process your text, language and a bounded part of your own history, which may include earlier standard answers. Silo.ceo has no separate chat.
The basis is Article 6(1)(f) GDPR: my interest is to provide information you request through a conversation. Chat is optional, without registration or a requirement to provide your name or contact details; you can use the website and contact links without it. It creates no advertising profiles and makes no decisions with legal or similarly significant effects. Please do not enter confidential information, credentials or other people’s personal data.
In text chat, the model selects from prepared response blocks. Only stored approved text or a fixed refusal is published; the selection may still be inappropriate. For model requests, Eve processes the bounded conversation context in Vercel Workflow. Text model requests go through Vercel AI Gateway to OpenAI. Configuration allows only OpenAI routes meeting the Gateway requirements for zero data retention and no prompt training. Those model requirements do not immediately delete the separately stored Workflow transcript. The assistant is AI and may be wrong. It does not send a personal message to Patrick or book appointments.
Voice conversations and dictation
Voice starts only through your action and with browser microphone permission. While the connection is active, microphone audio is captured continuously unless muted. Audio goes over an encrypted connection to the website server, which sends segments of at most 30 seconds through Vercel AI Gateway to OpenAI Whisper-1 for transcription. Recognition is not performed solely on your device.
During a call, recognised contributions are automatically submitted as questions to the assistant, without separate confirmation of each contribution. For dictation, Done returns recognised text as an editable draft; the separate Send action submits it as a chat message. Muting or ending stops further capture but does not undo earlier transfers or accepted questions. A previously captured segment may still be processed.
For spoken answers, OpenAI TTS-1 receives only approved public response text through Vercel AI Gateway. Its synthetic voice is called alloy. This speech-generation step does not receive free-form visitor messages or private chat histories. The website publishes and speaks stored response blocks; their selection may still be inappropriate.
The website does not archive microphone recordings. Incoming audio is buffered temporarily for processing. Accepted transcripts and answers, plus submitted call identifier and duration, remain in the respective chat under the rules below. An unsent dictation draft does not thereby become saved chat history.
For recurring public response blocks, the website caches at most 32 generated speech versions in shared Upstash Redis storage, each for up to seven days. This cache contains neither microphone recordings nor individual visitor messages. A cache hit plays an existing generated version of public text.
No zero data retention promise is made for this Gateway audio path. Vercel currently lists Whisper-1 and TTS-1 without ZDR support. OpenAI lists no routine application-state or abuse-log retention for transcription, and up to 30 days of abuse logs for speech generation, with possible longer legal or protective retention. API data is not used for model training by default. This is not a deletion promise for website, Gateway or other provider logs.
The purpose is the voice input or spoken response you requested. Article 6(1)(f) GDPR applies, with the interest of providing that requested conversation feature. You can instead type or use the contact links.
Saved history and browser access
The pb_panda_history cookie identifies this browser as the owner of its saved chats. It holds a signed pseudonymous identifier and administrative data, not conversation text. JavaScript cannot read it; production transmits it only over HTTPS. Its lifetime is 365 days, renewed when the chat fetches its connection details. This is not a message-deletion deadline. Cookie access serves the explicitly requested chat with retrievable history under section 25(2)(2) TDDDG; related personal-data processing uses the basis stated above.
Your chosen light or dark display preference is stored locally in your browser under the key patrickbuhl-theme. This entry contains only the display preference, not questions or conversation content.
Each entry from the landing page opens a separate chat at /chat/<ID>. The question is passed temporarily in memory. The URL contains the chat identifier, not question or conversation text. The identifier alone does not grant access; the associated browser cookie is required. Neither questions nor transcripts are stored in Local Storage or Session Storage. With a valid cookie, you can reopen your saved chats in the same browser through their respective URLs after a reload or later return. The existing /chat entry still opens the history saved there. There is no account or cross-device or cross-browser recovery. Clearing, losing or expiry of the cookie removes that access but does not automatically delete server-side chats.
An introductory answer shown immediately is initially a preview; it becomes saved history only when server-side storage is confirmed. The dedicated Upstash Redis database retains server-accepted messages, AI answers including prepared replies, follow-up questions, processing status and send identifiers. Model requests also save the browser- and IP-derived cost-control identifiers with the send receipt. Voice features add connection identifiers, call duration and timed text contributions. This history supports the continuity you requested and has no automatic expiry: it remains until you explicitly delete it or request its deletion. Answers may finish and be saved while your browser is closed. As operator, I can access saved messages for technical operation and limited troubleshooting; this does not mean a message has been personally forwarded or that I will reply.
New conversation opens a separate chat with a new URL. Earlier chats and messages remain saved and accessible through their respective URLs with the associated browser cookie. Expiry of a temporary AI session also leaves them intact. The bounded model context and paged loading of older messages do not change retention. Stop requests cancellation of the current response and preserves the existing history.
Under Chat options (+), Delete this chat lets you confirm removal of the currently open chat’s messages from the active website database. Your browser cookie and other chats remain intact. A technical deletion marker without message text prevents the same chat identifier from being used to recreate it. This differs from New conversation and Stop. You can also request deletion at [email protected].
An internal mapping from AI session to chat, containing no message text, expires eight days after creation or renewal. Vercel Workflow holds processed conversation data during the run and, under the standard Pro plan, for seven days after completion. Website deletion, New conversation and Stop are not proof of immediate provider deletion. Technical backups can follow separate deletion schedules; immediate deletion of every backup copy is not promised. Where a specific legal retention duty applies, the affected data is retained only for that purpose and its statutory duration.
Abuse prevention
Request and cost controls at Upstash, Inc., USA, use a dedicated Redis database in Frankfurt (eu-central-1). Control keys contain secret-key-derived identifiers based on the signed browser identity and the hosting platform’s IP information, time windows, counts, reserved costs and attempt identifiers. These keys contain no conversation text. The identifiers are pseudonymous, not anonymous, and do not reliably identify a person or a particular physical device.
Cost controls apply across chats belonging to the same browser identity, with additional controls for the IP-derived identity and total usage. A cost amount is reserved atomically before each actual text-model, transcription or speech-generation attempt. Reservations remain after errors, cancellation or uncertain outcomes. Aggregate monthly baselines account for prior usage. The respective model request does not start if required usage-control or pricing data is unavailable.
Request-rate counters expire within 24 hours of creation. Daily budget counters expire one day after the next UTC day boundary; monthly budget counters and attempt receipts expire one day after the start of the following UTC month. These periods apply to separate control keys. Identifiers attached to saved send receipts and Workflow data, provider logs and backups follow their separately described retention periods.
The basis is Article 6(1)(f) GDPR. The legitimate interest is to prevent attacks, bulk use and disproportionate costs and keep the service available. Raw IP addresses are not stored as Redis control keys.
Recipients and international processing
Recipients are Vercel for hosting, Workflow and Gateway; OpenAI as the model provider reached through Gateway; Upstash for saved conversation history, usage controls and public speech versions; and Google Workspace for email contact. Processing may occur in the USA and other countries used by their subprocessors. A European compute region does not guarantee EU-only processing.
Vercel’s and Upstash’s published processing terms include EU standard contractual clauses for applicable international transfers under Article 46 GDPR. Information about the applicable safeguards and a copy can be requested at [email protected]. The providers’ published information also addresses subprocessors and security, usage or billing data they process as controllers.
Contact and external links
LinkedIn is contacted when you open its external link, after which its own privacy information applies. A mailto link opens your email application without sending automatically. I use Google Workspace for email. Contacting me involves processing your message, sender details and any signature through Google Workspace and the communication services involved.
Article 6(1)(b) GDPR applies to specific pre-contractual enquiries. General correspondence uses Article 6(1)(f), with the interest of handling the exchange you requested. Enquiries are retained while needed for the reply and foreseeable follow-up, then deleted unless a legal duty or a specific need to establish, exercise or defend legal claims requires retention. Article 6(1)(c) covers legal duties; Article 6(1)(f) covers safeguarding legal claims.
Your rights
Subject to the legal conditions, you may request access, rectification, erasure, restriction and data portability. You may object to processing based on legitimate interests on grounds relating to your particular situation. Any consent you have given may be withdrawn for the future. Contact [email protected].
You may complain to a data protection authority, particularly where you usually live, work or believe an infringement occurred. In Hesse: the Hessian Commissioner for Data Protection and Freedom of Information, datenschutz.hessen.de.