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.