what we do (and don't do) with your profile screenshot
no marketing language. every claim is something you can verify with the dev tools panel in your browser, or by reading the source code (it's public — link at the bottom).
the actual flow, step by step
- 1. You pick a screenshot. The image stays in your browser until you upload.
- 2. The image POSTs to our server. Unlike Roast My Chats (which parses client-side), Vibecheck has to send the image to OpenAI's vision model — we can't do vision in your browser. The image goes through our server in memory. No disk writes.
- 3. Server forwards to OpenAI vision. Image bytes → OpenAI vision API → response with archetype + flags. Our server holds the image for a few seconds, returns the result, discards the image with the request.
- 4. The result is shown to you. The image and result are stored in your browser's sessionStorage so the "full audit" option can work without re-uploading. sessionStorage clears the moment you close the tab.
what we do NOT do
- ❌ We do not have a database. There is no place for us to store your image, even if we wanted to.
- ❌ We do not write your image to disk on our server.
- ❌ We do not log the body of your upload. Vercel logs request metadata (size, latency, status code) but not body content.
- ❌ We do not share your image with anyone other than OpenAI's vision API.
- ❌ We do not run analytics on the content of your screenshot. PostHog only captures aggregate events (e.g. upload_started, flags_received) and the archetype + flag count we returned. It never sees the image bytes.
about OpenAI
We use OpenAI's API (the developer API, not ChatGPT). Per OpenAI's API data usage policy, API submissions are not used to train OpenAI's models. OpenAI retains API data for up to 30 days for abuse monitoring, after which it is deleted. We do not have zero-retention enabled because that requires a separate agreement, so the image does pass through their 30-day window.
how to verify all of this yourself
- Read the source. The entire app is open source: https://github.com/mudman266/vibecheck. The parts that matter:
- • src/components/uploader.tsx — the upload UI
- • src/app/api/analyze/route.ts — server route; reads body as ArrayBuffer, sends to OpenAI, returns result. No
fs.writeFile, no database connection. - • src/lib/anthropic.ts — OpenAI vision wrapper (file is named anthropic.ts for historical reasons; uses OpenAI under the hood)
- Inspect the network. Open DevTools → Network, click Preserve log, then upload. You'll see exactly two relevant requests: POST /api/analyze with the image bytes, and the response with the analysis. After that response, no further requests carry image data.
- Search the repo for storage operations.grep the source for "fs.writeFile", "database", "upload" — you won't find any persistence calls.
contact
See something in the code that contradicts a claim on this page? Open an issue on the repo or email the address in the GitHub README. We'll fix it.