Skip to content

Record of processing (GDPR article 30) ​

This is the record for agisse.xyz. A self-hosted copy has its own controller, who keeps their own record; this one can serve as a starting point. The privacy policy is the text for users and the data flow page shows the code paths. Where they and this record disagree, the open points are tracked in #148.

Controller ​

ControllerLennart Steen, who runs Agisse as a private person (no company)
Contacthello@agisse.xyz
Representative / DPONone appointed (not required: no large-scale processing of special categories, no public authority)
Supervisory authorityGegevensbeschermingsautoriteit / Autorité de protection des données (Belgium)
Last reviewed16 October 2026

Activities ​

Data subjects are Agisse's users (students and early-career job seekers, minimum age 18) unless the row says otherwise. Recipients are the processors listed in the privacy policy.

ActivityPurposePersonal dataLegal basisRecipientsOutside the EEARetention
Accounts and sign-inLet users in, run the waitlist and invitesName, email, password hash, Google link, sessions, waitlist status, referral and invite codesContractCloudflare, Neon, Google (if chosen), ResendGoogle, Resend (USA)Account lifetime; waitlist accounts unused for 12 months are deleted; other accounts unused for 24 months are emailed once and deleted 30 days later
Job-search workspaceThe product: profile, CV, tracker, prep, saved companies and programmes, assistant memoriesCV (PDF and text), education, work history, preferences, saved postings, notes, drafts, practice answersContractCloudflare (R2, EU jurisdiction), Neon (Frankfurt)NoAccount lifetime; deleted with the account
AI featuresEvaluate postings, tailor CVs, draft messages, prep, at the user's requestThe CV and profile text a feature needs, with contact details removed first; the postingContractOpenRouter and the model providers it routes to (by default Mistral AI, EU endpoint only; tailored CVs go to free models from other providers); with an own key or a connected ChatGPT plan, that provider insteadYes (USA and others), under OpenRouter's DPA and the Standard Contractual ClausesNot stored by Agisse beyond the usage log; providers per their policy
ChatGPT planRun a user's AI requests on their own ChatGPT Plus or Pro plan, at their request (off on agisse.xyz until OpenAI admits it; on in npx agisse)OAuth tokens (access, refresh, client id), sealed with AES-GCM; the ChatGPT account's name, shown in Profile; the CV and profile text a feature needs, with contact details removed firstContractOpenAI, under the user's own ChatGPT account and OpenAI's termsYes (USA), under the user's own agreement with OpenAIUntil Disconnect or account deletion, which also revoke the session at OpenAI; deleted when OpenAI refuses the refresh token (30 days unused)
People searchSuggest whom to contact at a companyThird parties: names, roles and public profile links of people at companiesLegitimate interestExa, NeonExa (USA)With the searching user's account; cached search results deleted after 7 days
Feed rankingOrder the job feed by fitA profile embedding and a fit score per role, derived from the profileContractThe feed provider (run by the controller), NeonNoAccount lifetime; deleted with the account
Outcome figuresShow users anonymous response rates and timelines per employer, on the postingTracker status changes and their dates, counted over the past 12 months as of each Monday; a figure only with at least 10 users behind it, counts as bands, rates rounded to 5%Legitimate interest; opt-out in ProfileNeonNoAccount lifetime; left out once the user opts out or deletes the account
Test reportsWhen a job moves to Online test, an optional "Which test?": show other students which publisher an employer uses, as countsThe user, the job, the employer and the chosen publisher (or none for Not sure or Skip); shown only as "reported by N students", once at least 2 students reported the same publisher in 12 months, never with a nameContract (the user chooses to answer); opt-out in Profile for the countsNeonNoDeleted with the job or the account; counted for 12 months; left out once the user opts out
Usage and qualityFair-use limits, cost control, answer qualityFeature, model, tokens, cost, the model's output, the user's rating and noteLegitimate interestNeonNoThe output, the note: 90 days; the rest: account lifetime
Account emailPassword resets and account noticesEmail address, messageContractResendYes (USA)Per Resend's policy
Deadline emailMonday email, opt-in, listing the tracker's dates in that weekThe on/off choice; the email sends the address and the roles, employers and dates dueConsent; off by default, withdrawn in Profile or by the unsubscribe linkResend, NeonResend (USA)The choice: account lifetime, off when withdrawn; nothing else is stored; the email per Resend's policy
Analytics and error reportsLearn which features help; fix bugsAnalytics: account id, pages viewed (addresses without query strings or ids), features used. Error reports (server and browser): the error message and stack, the page or request address without query strings or ids, browser and OS; no account id, name or emailLegitimate interestPostHog, SentryNo: PostHog in the EU, Sentry in the EU (Frankfurt)Analytics at most 12 months, deleted with the account; error reports 90 days (Sentry's retention on the sponsored plan)
Maps and logosShow roles on a map and company logosLocation text, company domain, IP address (sent by the browser)Legitimate interestNominatim, OpenFreeMap, logo.devNominatim (UK), logo.dev (USA)Per their policies
Bot protectionStop automated sign-upsIP address, browser signalsLegitimate interestCloudflare TurnstilePer Cloudflare's networkPer Cloudflare's policy

Agisse doesn't ask for special categories of data (GDPR article 9) and doesn't score on them. Users are told at upload to leave out their photo, date of birth and anything they wouldn't tell an employer. Scores are advice; the user decides and acts, so there is no automated decision under article 22.

AI processing of CVs (impact note) ​

A short assessment in the spirit of a DPIA (article 35). The controller decided (16 October 2026) that this short assessment is enough for now; a full DPIA follows before processing grows in scale, for example when a university or campus joins.

  • What's processed: the CV and profile text a feature needs, and the posting, sent to a language model when the user asks for an evaluation, a tailored CV, a draft or prep. Contact details are removed before the call and put back afterwards. Nothing is sent without the user's action.
  • Risks: the model states something about the user that isn't true; it weighs age, gender, nationality, health or a photo; the text leaks through a provider that keeps or trains on it; a posting carries instructions that steer the model.
  • Mitigations: prompts tell the model to use only the facts it's given and never those personal traits (the second is checked in code); contact details are removed first; on agisse.xyz's key, OpenRouter's account setting refuses providers that train on prompts; model output is shown as text, never run as code, and its links must be http(s); a user's AI requests can only read that user's data.
  • No automated decision: a score is advice. The user reads it, decides and acts themselves; Agisse never applies or sends a message for them (article 22 doesn't apply).
  • Residual risk: a wrong or unfair statement can still slip through. Users can rate an answer and say why; the ratings show on the admin's quality page.

Security measures (article 32) ​

  • TLS everywhere, with HSTS; a Content Security Policy on the app's pages.
  • Every route that returns user data checks that it belongs to the signed-in account (tested in CI with two accounts).
  • Own AI keys are sealed with AES-GCM and never sent back to the browser.
  • Contact details are removed from CV text before it reaches a model.
  • The CV PDF is checked to be a PDF and kept privately; no URL serves it.
  • Delete account removes the account's rows (by foreign-key cascade), the CV file, and the MCP sign-in tokens and consents; worker/index.check.ts checks that nothing with the account's id is left.
  • Admin views show account-level facts, not CVs or messages. The quality page shows the first 200 characters of users' rating notes, without an account id; notes are deleted after 90 days.
  • A breach runbook is in SECURITY.md.