Privacy
Last updated: 25 September 2026
jlog holds your job search, which is about as personal as work data gets. This page says plainly what is stored, who else sees it, and how to get rid of it. No cookie banners, no advertising networks, no selling anything to anyone.
Who this covers
This policy covers the hosted instance at jlog.bhargav.dev. jlog is open source and MIT licensed, so anyone can run their own copy — if you are using someone else's instance, or your own, then whoever runs it holds the data and this page does not describe their practices.
What is stored
Your account
Your name, email address and avatar URL, as supplied by whichever sign-in method you used — GitHub, Google, or an emailed sign-in link. jlog also stores that provider's own account identifier, so that signing in again recognises you. No password is ever stored, because jlog does not use passwords.
Your job applications
Everything you record about an application: company, role, location, status, the link you applied through, dates, salary ranges, your notes, and the job description if you saved one. A timeline of status changes is kept alongside it.
Your CV and generated documents
If you import a CV, jlog stores the file itself and the text extracted from it, along with the individual facts pulled out of it — roles, bullet points, skills — so that tailored documents can be traced back to something you actually wrote. Generated CVs and cover letters are stored against the application they were written for.
Your LLM provider key
If you configure your own AI provider, the API key is encrypted with AES-GCM-256 before it is written to the database and is never returned to the browser after you save it. The provider and model names are stored in the clear.
Billing
For the paid plan, jlog stores your Stripe customer and subscription identifiers, your plan, and its renewal date. Card details never reach jlog — payment happens on Stripe's own hosted checkout page, and jlog only ever sees the result.
Extension keys
Keys you generate for the Chrome extension, with their label and expiry, so you can see and revoke them from Settings.
The Chrome extension
The extension is the one part of jlog that runs inside pages you visit, so it is worth being exact about what it reads and when.
On the six job boards it supports — LinkedIn, Wellfound, Ashby, Greenhouse, Lever and Y Combinator's job board — applying is detected automatically, and four things are recorded: the company, the role, the link to the posting, and the time. This happens without asking you first, and it does not read the job description. Anything it records can be deleted.
On any other site it reads nothing at all until you click the jlog icon and choose to extract the page. Only then does it read that one tab — and that route does read the posting text, so that company, role and location can be pulled out of it. Nothing from it is saved until you have seen the result and confirmed it.
The extension itself contacts one server and one only: jlog's API. It does not track which pages you visit, does not read pages you have not asked it to, and contains no analytics or advertising code of any kind.
Once a posting reaches jlog the ordinary rules below apply to it, and for AI extraction that means it does not stop with jlog. The posting text is sent on to whichever AI provider you configured, and on the hosted instance a record of that request also goes to Langfuse, which exists so a failed or expensive generation can be investigated. Both are described under Who else sees your data.
Worth being precise about the case where you have configured no provider at all. Clicking Extract with AI still sends the page text to jlog's own API — that happens first, and is how the request is made. jlog then refuses it, so the text is not forwarded to any AI provider and no extraction takes place. The distinction is between the text reaching jlog, which it does, and the text reaching a third party, which it does not.
In your browser it stores the key that links it to your account, and a note of whether that key still works so it can tell you when one has expired rather than just failing. Both stay in the browser.
If you extract a page with AI, the text of that posting goes to whichever provider you configured, exactly as described under Who else sees your data below. Uninstalling the extension removes the key from your browser; to revoke it everywhere, delete it under Settings.
Analytics, which currently do nothing
jlog has a single analytics setting, in Settings, and it is off by default. It is worth being exact about what it does today: it records your preference and nothing else. No analytics data is collected, aggregated or shared with anyone.
The intention behind it is to share anonymised aggregates one day — response rates, time to offer, ghosting patterns, with no company names, role titles, notes or anything identifying you — so that jlog can tell job seekers what the market is actually doing. None of that is built. If it ever is, it will apply only to accounts that have switched the setting on, and this page will say so before it starts rather than after.
There is no third-party analytics script on this site, no advertising pixel, and no cross-site tracking.
Cookies
One cookie in normal use: the one holding your sign-in session. It is HttpOnly,
so page scripts cannot read it, and it expires after 30 days.
Signing in adds no second cookie. The half-finished sign-in — the bit that lets the answer coming back from GitHub, Google or Apple be matched to the attempt you actually started — is held as a short-lived row in the database instead, which expires after ten minutes and is swept nightly.
Your light/dark theme preference is kept in your browser's local storage and never sent anywhere. That is the lot — no tracking cookies of any kind.
Who else sees your data
These are the only third parties involved, and each one gets only what its job requires:
- Cloudflare — hosts the site, the API, the database and any uploaded CV files.
- GitHub, Google or Apple — only when you choose to sign in with them. jlog receives your name, verified email address and avatar; they do not receive your job data.
- Resend — delivers sign-in link emails. It sees the address the link is sent to.
- Stripe — handles payment for the paid plan, including all card details. It also receives your name, email address and jlog account id when a customer record is created for you at your first checkout, so that a payment can be matched to an account.
- Your chosen AI provider — Anthropic, OpenAI or Google, depending on what
you configured. When you extract a job posting or generate a tailored document, the
relevant job description and CV content are sent to that provider to do the work. If you
configure no provider, no AI feature runs and nothing is sent anywhere.
Choosing Ollama sends the same content to whatever address you gave jlog for it. If that is a machine on your own network, it stays there; if you pointed it at a hosted or tunnelled instance, it goes there instead. jlog cannot tell the difference, so the destination is whichever one you configured. - Langfuse — only when the instance is configured to trace AI calls, which the hosted one is. It receives the content of the job posting or CV being worked on, the prompt sent to the model and the answer that came back, and your jlog account id, so that a failed or expensive generation can be investigated. It is not used for advertising or analytics.
Nothing is sold, rented, or shared with advertisers. Data is disclosed otherwise only if the law actually requires it.
Getting your data out, or deleting it
You can delete your account yourself, from Settings → Delete account. It does not go into a queue and nobody reviews it: it happens when you confirm.
Deletion is permanent and covers your applications and their timelines, your imported CV and the facts taken from it, every generated document, your stored provider key and your extension keys — including the uploaded and generated files themselves, which live outside the database and are removed with it rather than left behind. If you are on the paid plan, the subscription is cancelled at the same time, so deleting your account does not leave you being billed for it.
Email hello@bhargav.dev for a copy of everything held about you, or if you would rather someone did the deletion for you.
If you self-host, none of this applies to you in the first place — the database is yours, and deleting a row is the whole procedure.
How long things are kept
Your data stays until you delete it or ask for your account to be removed.
Credentials that have run out are swept by a job that runs once a day. Spent and expired sign-in links go as soon as they lapse, along with the short-lived rows recording a sign-in that was started and not finished, and expired browser sessions. Expired extension keys are kept for a further 30 days and then removed — deliberately, so that an extension which has stopped working can still tell you when its key expired rather than saying it has never seen it.
During those 30 days the row is still there in full: the key value itself, the account it belonged to, its label and when it was made. An expired key cannot be used to sign in from the moment it lapses, but it has not been erased yet either.
Changes
If this policy changes in a way that affects what is collected or who sees it, the date at the top changes and material changes are announced in the app.