Privacy

Nothing here identifies you. There is no account, no database and no cookie: there is a browser tab and the session it holds open. Nothing you paste is written down anywhere this site keeps.

Your code

The code you paste reaches this site's server as one agent turn. So does the diff fetched for a pull request you name. The server sends each file through the Vercel AI Gateway to Jev, TypeSafe's evaluation model, to be answered against up to 34 questions. Jev's findings and that file's text then go to Luna (openai/gpt-5.6-luna-fast) through the same gateway, to be written up as the review you read.

That is the whole path: the gateway and the two model providers behind it, and nothing else. One turn sends at most 24 code files, each cut to 64,000 characters. Jev is given a longer file in windows of 16,000, and each window twice — once as written, once with its comments removed — so one file is judged in up to 8 calls, and a call that fails is retried once. If some of a file still goes unanswered, pressing Retry sends that file again, and the windows Jev already answered come from the cache rather than being sent to it again. Luna is given its first 8,000 characters and Jev's findings for the rest. Up to 10 prose files are shown beside them and never sent.

Pull requests

Public repositories only. The server fetches the pull request from GitHub with none of your credentials, and none are ever asked for. This deployment sets no GitHub token either, so the fetch is anonymous at both ends. A deployment can set one to raise its own rate limit with GitHub; it would grant no access a signed-out visitor lacks.

Fetching is rate limited by network address: 20 pull requests per 10 minutes. Opening a session is limited separately, 30 per 10 minutes. That address is the one thing about a visitor this site's own server holds. Each counter keeps it in one server instance's memory for the length of its window and writes it nowhere else.

How an address is counted

The pull request and MCP limits share one counter, so both count an IPv6 address by its /64: one host is handed a whole /64 and can move within it. Both put a request that arrives with no address into one shared bucket rather than letting it pass unseen.

The session limit is separate. It counts the address as given, so a host moving within its own /64 gets 30 sessions per address it uses, and a request with no address is not counted at all.

Agents

Code can also arrive from an agent rather than a browser tab, through the MCP server at https://clean-code-review.vercel.app/api/mcp. It takes the same route to the same two models in one request, with no session and no tab, and it keeps what the page keeps and nothing more. Each address gets 10 calls per 10 minutes.

What a review costs

Every visitor shares one model budget: $0.40 per hour and $1.00 per UTC day. Reviews pause once it is spent and resume when it resets. The MCP server has its own, $0.25 per hour and $1.00 per UTC day, and refuses new reviews once that is spent. Each budget counts what the models cost, never who asked.

How long anything is kept

Each browser tab holds one agent session. The page clears that session's history before every turn, so the only code it holds is the code being judged right now. Closing the tab retires the session, and a session left alone expires after an hour.

Judgments and written reviews are cached for an hour, keyed by a hash of exactly what was judged, so the same file is evaluated once rather than twice. Those two caches hold the answers and the review, not the code: the code goes into the key and no further. A fetched pull request is cached separately for a minute, keyed by its GitHub address. That one does hold the whole thing it fetched — the diff, the title, the description, the author's avatar address and the number of files changed — all of it public, from a public repository. Every cache is per deployment region, or in one server instance's memory where there is no regional cache. Each expires on its own and is keyed by nothing about you. A review that comes back from one is marked "from cache".

What Vercel measures

This site's own domain serves two scripts from Vercel. Web Analytics counts page views. Speed Insights reads the loading and responsiveness timings the browser already keeps, the Web Vitals, and reports how fast a page was. Neither stores anything in your browser. Vercel describes both as anonymous: neither is tied to a person or to a network address.

This site's own addresses are cleaned before either script sends them. The home page, /faq and /privacy go as they are. Anything under a repository's /pull goes as /[owner]/[repo]/pull/[number], so the record says a review was read and not which one. Anything else is a page that does not exist, and goes as /[not-found]. No query and no fragment is ever sent.

What each Vercel script sends
DetailPage viewsPage speed
SentEach time a page is opened, including a review opened without reloading the pageAs the page is used and when it is left
Always carriesThe cleaned address and route, the browser and its version, the operating system and its version, the device type, the version of the script, the timeThe cleaned address and route, the timing and its value, the browser and its version, the device type and operating system, the version of the script, the time Vercel received it
Also carriesThe address of the page that linked here if it is on another site, as your browser gives it; a location worked out from the request, such as the country, region and cityThe country; the network speed the browser reports; the page element the timing concerns, and for responsiveness the kind of input, such as a tap or a key press
Never carriesA click, the code you paste, a reviewThe code you paste, the names of the files, a review
Tells visitors apart byA hash Vercel makes from the incoming request and resets after a day, so a visitor cannot be followed from one day to the next or from this site to anotherNothing: no identifier follows one visitor from page to page
Kept by Vercel forAt least the reporting window of this site's plan, one month on the free plan and one or two years on paid ones. Vercel says it may keep them longerNot published. The dashboard this site's owner reads shows the last seven days, or longer on Vercel's paid tier
Vercel's own accountWhat Web Analytics collectsWhat Speed Insights collects

The element is a selector of tag names, style class names and at most one id, such as main>img or #file-3>div.flex. It is often longer than that: with no id and no named ancestor to lean on, one element's whole class list is the selector, which on this site runs into the hundreds of characters of styling. No id or class here carries a file name, a repository or words from a pull request: the file cards are numbered, and a pull request description's ids and code-language classes are renumbered or dropped.

What is not here

No sign-in and no profile. No database. Nothing in local storage but the light or dark setting this page remembers for you. No advertising and no tracking pixels. Nothing is sold, because nothing is collected to sell.

The whole application is open source, so none of this has to be taken on trust. Read the code.