vibeconferencing docs ← back to the site

Privacy

What Vibeconferencing stores about you, why, and how to get rid of it. Plain words; the short version is that we keep what the product needs to work and nothing we could sell.

Last updated 12 September 2026. Vibeconferencing is an independent project run by Stan James and Seth Goldstein. Questions and requests: jimmy@vibeconferencing.com.

The two halves

There are two things here, and they hold different data:

What the website stores

When you sign in with Google we store your email address, your name and your profile picture URL, plus the Google account id that ties them together. That is what the sign-in scopes (openid, email, profile) provide, and it is all we ask for by default. Signing in sets one cookie, vc_session, which lasts 30 days.

api/lib/db.ts (DbUser) · api/auth/google.ts:54 · api/lib/auth.ts:17

If you tick "calendar access" when signing in — it is off unless you tick it — we also store a Google access token and refresh token for the read-only calendar scope. They are used for exactly one thing: seeing which meetings your bot has been invited to, so it can join on time. We do not read event contents for anything else, and we never write to your calendar.

api/auth/google.ts:61 (calendar.readonly, opt-in) · api/lib/calendar-store.ts:9 (tokens live on the user row)

Whiteboards and rooms. Anything a bot writes to a shared board — the board content and its history (up to 500 versions), chat messages and the lines it speaks — is stored so the room can be reopened later. A room link is a share link: anyone who has it can read the board. Treat it like a shared document, because that is what it is.

api/sync/[roomId].ts:349 (HISTORY_MAX = 500)

Activity. We record when you were last seen on the site, and, if you run the app, its version and platform when it checks in. If an app has remote logging switched on, it also reports its instance id, host, port, current room and call state to an admin-only page so we can tell whether a hosted bot is alive.

api/lib/db.ts (last_seen_at, app_version, app_platform) · api/logs/index.ts:4

Booking a call with Jimmy happens on cal.com, which asks for your name, email and three short answers. cal.com's own privacy policy covers that form; the answers land in the calendar event the bot reads when it joins.

No analytics scripts, no ad pixels. The site does not load any third-party tracking.

What the website does not store

How we protect it

This is the part Google's reviewers ask about, so it is spelled out. Every line names the code it was checked against.

In transit. The website is served only over HTTPS. Calls from the app to the website, and from the website to Google, go over TLS. The database connection from the website to Neon is TLS as well (Neon's serverless driver speaks HTTPS).

api/lib/db.ts:8 (@neondatabase/serverless)

At rest. Account rows, including the optional Google calendar tokens, live in a Neon Postgres database, which encrypts its storage at rest. We do not add a second, application-level encryption layer on top of that today; the tokens are columns on the user row, readable only by the website's own server code through the database credential.

api/lib/calendar-store.ts:9 (google_access_token, google_refresh_token, google_token_expires_at on vibeconf.users)

Who can read the calendar tokens. Nobody through the website. There is no page or endpoint that returns a token. The only code that touches them refreshes the access token when it expires and calls Google's Calendar API on your behalf, for your own signed-in session only: the calendar endpoint answers 401 without a valid session and looks up tokens by that session's user id, never by a parameter.

api/calendar/upcoming.ts:36 · api/lib/google-calendar.ts:226

What we read, and how much. One request per poll from your app: events on your primary calendar in the next 24 hours, asking Google for only id, summary, description, attendees (email), Meet link, start, end. The result is returned to your own app and is not stored on the website. Your app keeps a small local note of which events it has already joined so it does not join twice.

api/calendar/upcoming.ts:30 (WINDOW_MS = 24h) · api/lib/google-calendar.ts:161 (fields=)

Sessions. The sign-in cookie is a signed token (JWT) marked HttpOnly, SameSite=Lax and Secure, valid 30 days. Scripts on the page cannot read it.

api/lib/auth.ts:73 (signed with jose) · api/lib/auth.ts:90-94 (cookie flags)

Secrets. Database credentials, the session signing key and the Google client secret are Vercel environment variables, not in the repository. Two people (the founders) can reach that configuration.

Retention and deletion. Calendar tokens are kept until you revoke access at myaccount.google.com/permissions (after which they stop working and we discard them on the next failed refresh) or until you ask us to delete your account, in which case the whole user row goes, tokens included. There is no self-serve "disconnect calendar" button yet; email jimmy@vibeconferencing.com and we do it by hand, normally within a few days.

No model training, no resale. Nothing read from your calendar is used to train any model, shown to any other user, or shared with anyone but Google (who we read it from) and your own app. The AI in the product runs on the app owner's own Anthropic subscription; the website sends Anthropic nothing.

If something goes wrong. If we learn that account data or tokens were exposed, we tell affected users by email at the address on their account, and we revoke the affected Google tokens on our side so they stop working.

Who else touches the data

We do not sell data, and we do not share it beyond the services above.

Your choices

Children

Vibeconferencing is not for anyone under 13, and we do not knowingly keep data about children.

Changes

We change this page when the product changes what it stores, and we move the date at the top when we do. Where a claim above cites a file and line, that is the code it was checked against.