About the AI chat

A short, plain-language look at what this free portfolio experiment does and what happens when you send a message.

Why I built this

This chat is a portfolio experiment: a practical way for visitors to explore ideas, ask questions, and try several AI models in one place. It is free to use, requires no account, and may change or be unavailable while I test it.

How it works

Your browser
→ Portfolio /api/chat
→ AssemblyAI LLM Gateway
→ Selected AI provider model
→ Streamed response back to your browser

The portfolio API validates the request, applies usage controls, and sends the conversation to AssemblyAI's LLM Gateway. The gateway routes it to the supported model you selected, including models from providers such as OpenAI, Anthropic, and Google. The AssemblyAI API key remains on the server and is never sent to your browser.

Data handling

In your browser

Messages and your selected model are saved in localStorage under this site so the conversation can return after a refresh. “New chat” removes that saved conversation, although a new empty snapshot may be created as the chat continues to run.

When you send a message

The current text conversation, selected model, and request fields are sent to this portfolio's /api/chat route. Accepted requests contain text only and are limited in size and message count. The validated conversation is then sent to AssemblyAI and the selected model provider to generate a response.

Rate limits and abuse protection

The server uses Upstash Redis for short- and daily-rate limits, model tier quotas, site-wide usage and spend counters, and a temporary lock that prevents overlapping generations for one session. It also checks the request origin and enforces request, context, output, and timeout limits. A random, HTTP-only session cookie identifies the browser for one day. In production, the client IP address is converted to a keyed SHA-256 hash before it is used as a Redis rate-limit identifier; the application does not write the raw IP address to Redis.

Logs, analytics, and provider retention

The chat route does not contain application code that logs message content. Hosting, network, AssemblyAI, and model-provider systems may still create operational, security, billing, or usage logs. This site also runs Vercel Analytics, Vercel Speed Insights, and Umami for site usage and performance; the chat code does not deliberately send message text to those analytics tools.

Provider retention depends on the portfolio's AssemblyAI account settings and the selected model provider. This page cannot promise zero retention or deletion on a particular schedule, and this portfolio does not control third-party retention. Review AssemblyAI's current privacy policy and terms, along with the relevant model provider's policies, before submitting sensitive information.

What not to submit

Treat the chat as a public experiment. Do not enter:

  • Passwords or API keys
  • Financial information
  • Private personal information
  • Confidential work material
  • Sensitive client or company data

Accuracy and responsibility

AI responses can be incorrect, outdated, incomplete, or confidently worded despite being wrong. Independently verify anything important. This chat is not professional legal, medical, financial, or security advice, and it should not be used as the sole basis for important decisions.

Questions

If something here is unclear, contact me through my public LinkedIn profile. This page explains the implementation; it is not legal advice.