Skip to main content

What we collect, and why it's lawful.

Four categories. The first applies to every visitor; the others only kick in when you explicitly opt in, send feedback, or sign in. Every field below is sourced from the actual database schema in src/lib/server/db/schema/.

After "Accept all" or "Customize → Analytics"

Only after you actively grant analytics consent via the cookie banner.

Art. 6(1)(a) Consent
FieldTypeExample / note
all of the above Pre-consent fields continue to apply.
deviceenumdesktop / mobile / tablet
browserstringChrome 130
referrer (full)stringhttps://news.ycombinator.com/item?id=...
The full URL replaces the origin-only version.
session_idcookie _v10r_sids_b9a72c0f
Lets us reconstruct the page-by-page journey.
journey eventspage transitions Sent via sendBeacon on tab close. Deduplicated by event_id.
  • Consent is recorded with timestamp, IP-hash, and the exact tier — kept for 13 months as Art. 7(1) demonstrability.
  • You can withdraw consent at any time through the banner; the SID cookie is cleared and journey collection stops on the next request.

Feedback you submit

Only when you fill in and submit the /feedback form.

Art. 6(1)(f) Legitimate interest (responding)
FieldTypeExample / note
subjectstring (3–120)Bug on the chat page
bodystring (10–4000)
ratingsmallint 1–5 (optional)
contact_emailemail (optional) Only if you provide one for follow-up.
page_of_originstring/showcases/ai/chat
session_idstring (nullable) Set only if you had analytics consent at submit time. Lets the operator see which pages you visited before the message.
  • Honeypot + minimum-fill-time + rate limit reject obvious bots before storage.
  • Feedback is kept until you ask to have it removed — there is no automatic expiry. Email the controller to delete a specific submission.

Account data (if you sign in)

Only if you create or use an account on the protected /app surface.

Art. 6(1)(b) Performance of contract
FieldTypeExample / note
emailstring Used to identify you and reach you for account events.
passwordargon2 hash Plaintext is never written to disk.
session_tokenopaque, http-only cookie Better Auth manages rotation and expiry.
audit traillogin / logout / password change Stored to support security investigations under Art. 32.
  • Account creation is optional — you can use the public site without ever signing in.