Plotvera privacy notice and data flows
Plotvera. Notice version 0.3, effective 23 Oct 2026. Last code review of the data flows: 2026-09-29, with the hosted-AI section added on 22 Oct 2026, and the company details and contact address on 23 Oct 2026. Draft for a research beta; not reviewed by a lawyer. This describes the application's present behaviour, not a promise about a future release.
Who runs Plotvera
Plotvera is made by Anaphase Ltd (company number 17537023), 71-75 Shelton Street, London WC2H 9JQ, registered in England and Wales.
For this notice, Anaphase is the controller of the support, security and cloud-share information described below. For research content you put into a cloud share, you decide what to share; Anaphase stores and processes it only to provide the feature you asked for.
Contact for privacy questions and requests: contact@anaphasescience.com.
The short version
- Your project stays in this browser unless you choose cloud share, an AI request or the Claude and ChatGPT connector. Those actions, what they send and who receives it are described below.
- Plotvera does not load advertising or analytics trackers, and loads no remote fonts.
- Anaphase does not sell personal information and does not use your content to train AI models.
- Plotvera is for research use only. It is not for clinical, diagnostic or treatment decisions. Do not put patient-identifiable information into it.
Core browser-only work
Entering or importing data, running the built-in analyses, editing graphs, and exporting figures run in the browser. The current project is autosaved in that browser’s localStorage; it is not encrypted. Anyone with access to the same browser profile, a sufficiently privileged extension, or the device may be able to read it. Clearing site data can remove it, so download project files regularly.
Plotvera stores a small local error log containing messages, stack traces, version/build, timestamp, and where an error occurred. It does not include table cells and is not sent automatically. The user may include it when they choose to copy a feedback report.
The app does not load a remote web font, analytics SDK, or advertising tracker.
Self-contained share links
The recommended share option compresses the entire project into the URL fragment after #p=. Browsers do not normally send fragments in HTTP requests, so creating this link does not upload the project to Plotvera. However:
- the URL itself contains all tables, results, and graph settings;
- anyone who receives or can read the URL can decode that data;
- messaging, browser history, screenshots, clipboard managers, extensions, and link-handling software may retain the URL;
- long URLs may be truncated by other software.
Do not use a self-contained link for confidential, personal health, controlled, or otherwise sensitive data unless your organisation has approved this handling.
Opening a share creates an editable copy only after a confirmation that it will replace the current local project. Save the current project first.
Optional cloud sharing
Cloud short links are a separate, explicit option. Before upload, the dialog says that the complete project will be sent to Plotvera’s share service and requires a consent checkbox. Anyone with the short URL can retrieve the project.
Cloud shares expire 30 days after creation. The API stops returning them at expiry, and an hourly database job deletes expired live rows; the service does not yet offer self-service deletion before that time. Database-provider backups may follow the provider/account retention schedule rather than disappearing at the instant the live row is deleted. Do not use cloud sharing for sensitive data. If the browser loses the database acknowledgement after an upload attempt, the UI reports the outcome as indeterminate rather than claiming no copy exists; an unconfirmed copy can remain until the configured expiry.
Share creation is limited by an atomic database quota. The edge function reads Vercel's platform-supplied client-IP header, converts it to a daily-scoped HMAC-SHA-256 pseudonym with a server-only secret, and sends only that pseudonym to the private quota table. The quota row is deleted after two days; Plotvera does not store the raw IP in that table. Vercel and Supabase may still process network metadata in their infrastructure logs under the operator's configured retention. Origin checks are a browser boundary, not authentication.
PowerPoint export is separate from sharing, and by default a presentation contains only the visible graph and its bounded preview table: no share URL, no project data beyond what is on the slides.
The Export panel offers one opt-in checkbox, off every time, that carries the editable project inside the .pptx so the deck can be reopened in Plotvera. When it is ticked, and only then, the exported file contains a complete copy of every sheet, result and graph in the project, stored as a custom XML part in the PowerPoint package, plus a link on the graph that carries the same project in the URL fragment. None of that is uploaded anywhere - it travels inside the file you save - but it does travel with the file, including to anyone the deck is forwarded to. Tick it only when the recipients may have all of the project data. Use Share separately when you want to send an editable copy without the slides.
Optional online AI
The assistant starts offline. Offline guidance makes no AI network request.
Hosted assistant states (added 22 Oct 2026)
Plotvera's code contains a hosted assistant route, in which a request would go from the browser to Plotvera's server and then to Anthropic as Anaphase's processor, paid for by Anaphase. It has three states, and the AI settings panel shows which one applies:
| State | What it means | What is sent where |
|---|---|---|
| Not yet funded (today) | The hosted assistant is switched off. The app says: "The hosted assistant is not yet funded. Use your own key." | Nothing is sent by the hosted route. A hosted request is refused by the server with hosted-unfunded. |
| Limited | Not used by Plotvera. | Not applicable. |
| Available | Only once Anaphase deliberately turns the hosted assistant on, after durable usage metering and billing exist. | The prompt and the bounded context you confirm go to Plotvera's server and then to Anthropic. Anaphase would keep a usage record (time, model, token counts, outcome), never the prompt or the answer. |
The hosted assistant is off unless two separate server settings are both present, so a key added by mistake does not switch it on. This notice will be updated, with a new version and date, before it is switched on. The provider list, the models and what each state sends are described in docs/AI.md (served as /ai).
Your own key
Online AI with your own key works as follows. After the user adds their own API key for Anthropic (Claude), OpenAI (ChatGPT models), Google Gemini, xAI (Grok), Mistral, DeepSeek, Groq or OpenRouter and explicitly enables online AI, requests go through Plotvera’s AI edge function to that provider.
Two further choices never involve Plotvera's server at all:
- Local models (Ollama or LM Studio on the user's own computer). The browser calls
http://localhostdirectly; nothing is sent to Plotvera or any third party. The relay refuses local providers outright. - Your own endpoint on this computer (eg vLLM or a llama.cpp server at
http://localhost:8000/v1), called the same way.
A user's own endpoint at a public https:// address (eg Together, Fireworks, Azure OpenAI) goes through the relay like the cloud providers. The relay only forwards to public https hosts on the standard port: it refuses private and link-local addresses, bare host names, .local/.internal names and URLs with embedded credentials, and only ever calls <address>/chat/completions and <address>/models with a request body Plotvera builds.
Smart import. When the user asks the assistant to read a spreadsheet, the data sent is a description of the file that the user can read word for word first: sheet names, table cell ranges, column labels with types, ranges and a few example values, and either the first 20 rows of each table (the default) or the whole sheet up to about 19,000 characters, plus Plotvera's own proposed plan. While the Smart import window is open, a connected Claude or ChatGPT can read the same description through the connector. With your own key, Plotvera does not spend a deployment-owned or shared provider key. A ChatGPT or Claude chat subscription is not an API key and cannot be used as one here; subscriptions can be used through the connector described below instead. Data sent can include:
- the user’s questions and recent conversation;
- sheet/result names, identifiers, column names, table type, design, and row/count information;
- derived summaries such as n, mean, SD, median, skew, and normality output;
- existing result summaries;
- what is selected on screen (a graph element or a block of cells) and a short list of the user's recent actions in the app, so "this" and "undo that" can be understood; and
- full outputs of analysis/tool calls needed for the online model to respond.
This may reveal information derived from the raw cells even when the raw table is not copied verbatim. Do not enable online AI for data that is not approved for external processing. Turning online AI off stops later AI requests.
The user's key is kept in browser sessionStorage for the current tab’s page session. It can survive a reload, but is not written to persistent localStorage and is cleared when that tab/window session ends; current builds also remove the legacy persistent key left by earlier releases. A sufficiently privileged extension or script running in the same origin can still read page session storage. When online AI is used, the key is transmitted through Plotvera’s proxy to the chosen provider for that request; it is not intended to be logged or stored server-side by Plotvera. Removing the key also disables online AI, and the deterministic offline advisor continues to work without a network request.
For Anthropic, OpenAI and OpenRouter the user picks a specific model from a fixed list (the relay rejects anything else). For the other providers the user may also pick any model id from the provider's own model list ("Test connection and load models"); Plotvera shows a price only where the provider publishes one. OpenAI requests are sent with store: false. OpenRouter's free router is still offered, clearly labelled, and lets OpenRouter pick a different model each time. Provider availability, rate limits, logging, retention and training-use terms are external to Plotvera and must be reviewed by the user or organisation before enabling online AI.
Optional Claude and ChatGPT connector
The connector is separate from online AI and needs no API key. It lets the user add a personal link to their own Claude (claude.ai, Claude Desktop, Claude Code) or ChatGPT (Developer mode) as a custom connector, so that chat app can look at and change the Plotvera project open in their browser tab. Nothing connects until the user presses Connect Claude / ChatGPT in the assistant.
How the data flows:
- The tab opens a WebSocket to Plotvera's relay service (
mcp.plotvera.app). The chat app calls the relay at the personal link, and the relay passes each tool call to the tab and the tab's result back. - Whatever a tool call returns goes to the chat app, and so to Anthropic or OpenAI under the user's own account and that provider's terms. This can include table contents, derived results and graph images, depending on what the chat asks the tool to read. Do not connect a project whose data is not approved for external processing.
- The relay's own documentation says it keeps no project data and writes nothing to disk, holding only live sockets and in-flight calls; its logs carry an 8-character hash of the link's secret and no arguments, and its web server has no access log for this site. Calls do pass through the relay in transit, so this is a description of the design, not an independent audit.
- The personal link contains a random secret generated in the browser and kept in that browser's
localStorage. Anyone with the link can send calls to the tab while it is connected, so treat it like a password. Make a new link replaces the secret and the old link stops working. - Once switched on, the connector reconnects when Plotvera is reopened in that browser. Disconnect turns it off, and the chat app can no longer reach the tab. Calls only reach a tab that is open and connected.
- Risky commands (such as deleting a table) wait for the user to click Yes in the Plotvera tab, and every change appears in the tab with an Undo button.
- The relay applies rate limits and accepts tab connections only from Plotvera's own origins (plotvera.app, the desktop app and localhost).
Feedback and support
The feedback dialog builds a report locally. It contains user-entered text, app/engine/build identifiers, report type, and recent local error messages. It does not include table cells. Nothing is transmitted by the app automatically; the user must copy or email the report. Reports reach contact@anaphasescience.com, the support address, only if the user chooses to send them.
Who receives information
| Recipient | What for | What it can receive | Location | Status |
|---|---|---|---|---|
| Vercel Inc. | Hosting the app and its API routes (/api/share, /api/ai) | Request logs (network address, time, path); share and AI request bodies in transit | United States and edge locations worldwide | In use |
| Supabase Inc. | Database for cloud share links | The project you choose to share, and a daily pseudonym of your network address for the quota | Region to be confirmed | In use, only when you create a cloud share |
| Hetzner Online GmbH | Server that runs the Claude and ChatGPT connector relay (mcp.plotvera.app) | Tool calls and results in transit; no project data is stored | Nuremberg, Germany | In use, only while the connector is switched on |
| Anthropic PBC | Hosted assistant | The prompt and the bounded context you confirm | United States | Planned; not in use while the hosted assistant is not yet funded |
With your own AI key, the provider you choose is your provider, not Anaphase's sub-processor, and your agreement with that provider applies. The company-wide sub-processor list will be published on the Anaphase website.
Some providers are in the United States. Transfers rely on the UK Extension to the EU-US Data Privacy Framework where the provider is certified, or on the UK International Data Transfer Addendum otherwise.
How long information is kept
"In force" means a job or provider setting enforces the period today. "Proposed" means the period is the target but no automatic deletion job enforces it yet.
| Information | Where | Kept for | Status |
|---|---|---|---|
| Projects, settings, recent files and the local error log | Your browser | Until you clear them | You control it |
| Cloud share links and the project in them | Supabase | 30 days from creation; an hourly job deletes expired rows | In force |
| Cloud-share quota pseudonyms | Supabase | 2 days | In force |
| Database provider backups | Supabase | The provider's backup schedule for the project | Provider setting |
| Hosting request logs | Vercel, Hetzner | 30 days | Proposed |
| AI usage records (time, model, token counts, outcome; no prompts or answers) | Anaphase server | 90 days | Not yet applicable (hosted assistant off) |
| Support email | Email provider | 2 years from the last message | Proposed |
Deleting cloud data does not recall copies you or recipients already downloaded.
Lawful bases (UK GDPR)
| Purpose | Basis |
|---|---|
| Providing a cloud share you asked for | Contract |
| Security logs, abuse prevention, rate limits and the share quota | Legitimate interests (keeping the service available and safe) |
| Optional AI requests | Your choice to send each request; the request is processed to perform the action you asked for (contract) |
| Answering support email | Legitimate interests |
Your rights
You can ask for a copy of your personal information, ask us to correct or delete it, object to or restrict some processing, and ask for portability where it applies. Email contact@anaphasescience.com. We will check identity before acting and reply within one month. Anaphase cannot see or recover projects held only in your browser.
If you are unhappy with our answer you can complain to the Information Commissioner's Office: https://ico.org.uk/make-a-complaint/ or 0303 123 1113.
Legal status
Plotvera is a research beta. This notice is a draft by a non-lawyer and is not a claim of compliance with any law or standard. Until counsel has reviewed it, avoid sensitive data in cloud sharing or online AI. Related documents: terms of use (docs/TERMS.md, /terms), storage notice (docs/STORAGE_NOTICE.md, /storage), AI disclosure (docs/AI_DISCLOSURE.md, /ai), accessibility statement (docs/ACCESSIBILITY.md, /accessibility) and security policy (SECURITY.md).