The chat on /ask
Every chat request is logged so I can enforce rate limits, keep the OpenAI bill bounded, and learn from what visitors ask. A log row contains: your question, the reply, a salted hash of your IP address (the raw IP is never stored), your country code, your browser's user-agent string, the model name, token counts, the request cost, a timestamp, and a random conversation id. The conversation id links the rows of one conversation together; it identifies a browser, not a person.
The contact form
Your name, email, and message are emailed to me and are not stored by this site. The only thing logged is metadata: a salted hash of your IP address, your country code, your user-agent, and a timestamp - used for a per-day rate limit on deliveries.
Legal basis and retention
I process this data under legitimate interest: preventing abuse of a small personal site and improving the assistant that answers on my behalf. Log rows are deleted automatically after 365 days.
Three processors touch the data: OpenAI (generates chat replies), Cloudflare (hosting, the D1 database, and Turnstile bot protection), and Resend (delivers contact-form email).
On your device
The chat stores one localStorage key, chat_conversation_id, so a returning browser keeps its conversation id. No cookies, no trackers, no analytics.
Deletion and access
Email hi@ehsansadeghi.me to have your data deleted or to ask what is stored. For exact deletion of a chat conversation, include its id: open this site, open your browser's developer tools, and read localStorage['chat_conversation_id']. Otherwise an approximate date and your country are usually enough to find the rows.