Privacy Policy

Last updated: 13 July 2026

DesignLoop is a Chrome extension that restyles live pages, exports them to Figma, and turns what you say into GitHub issues. This policy describes exactly what data the extension touches, where it goes, and what it never does.

There is no DesignLoop server. No analytics, no tracking, no account. Every request goes straight from your browser to a service you set up, using your own keys.

That describes the extension as it ships today, and it is the only product this policy covers. We are separately building an opt-in cloud tier — hosted storage for design systems and history, stronger models we run ourselves, and shared sessions for teams, none of which a browser tab can do on its own. It does not exist yet, no data is being collected for it, and it will not turn itself on: it will be a separate account you choose to create, published under its own policy before it accepts a single byte. The local extension described below stays exactly as it is.

Summary

On default settings, no data leaves your browser at all. The default model (Nano) runs on your machine, and the default transcription mode is none.

Data leaves only when you take an explicit action — pushing an issue to GitHub — or turn on a feature that is off until you turn it on: the Plus or Pro cloud models, cloud transcription, Structure with AI, Web Speech transcription, or attaching audio. Each of those runs on an API key you supply, and calls the provider directly from your browser.

The one thing to understand: choosing a cloud model changes where your page goes. On Nano the page never leaves the machine. On Plus or Pro, the parts of the page you are working on are sent to OpenRouter under your key.

What the extension handles

Data that stays on your device

DataWhere it livesNotes
GitHub personal access token chrome.storage.local Never synced across devices. Readable only by the extension's background service worker. Never sent to a content script or to any page.
OpenAI API key chrome.storage.local Same handling as above. Only ever sent to api.openai.com as an Authorization header.
OpenRouter API key chrome.storage.local Same handling as above. Only ever sent to openrouter.ai as an Authorization header. Unlocks the Plus and Pro models; without it they stay off.
Issue drafts chrome.storage.local Deleted when you delete the draft.
Microphone audio recordings Extension-origin IndexedDB Deleted with the draft. Never uploaded unless you enable Attach audio or a cloud transcription mode.
Screenshots Extension-origin IndexedDB Uploaded only when you push an issue that includes them.
Captured page HTML, console errors, element metadata chrome.storage.local, inside the draft Sanitized before capture (see below). Shown to you in the draft preview before anything is sent.
Chat / iteration sessions chrome.storage.local Stored locally and deleted when you forget the session. Processed on-device on the Nano model; on Plus or Pro the element or page you are working on is sent to OpenRouter (see below).
Extracted design systems chrome.storage.local Reading a page's colours, type and spacing is local computation. The passes that name those tokens (enrich, complete, leftover-colour mapping) always use the on-device model — by design, even when you have Plus or Pro selected for editing. Design systems never go to a cloud model.
Reference images attached in chat Held in the session Sent only to a cloud model, and only if you attach one. The Nano rung cannot read images, so an attachment is dropped rather than uploaded.

The extension declares no <all_urls> content script. Nothing is injected into a page until you click the toolbar action, press a keyboard shortcut, or ⌥ double-click an element. Page access is granted per-tab via activeTab.

Data that leaves your device — and only when you ask

1. GitHub (api.github.com, github.com)

When you press Push to GitHub, the extension sends the issue you reviewed — title, body, labels, and any screenshots or audio you chose to attach — to the repository you configured, using your personal access token. Screenshots and audio are committed as files to your configured assets branch (default designloop-assets) because the GitHub REST API cannot attach binaries to an issue directly. This is the extension's core purpose and happens only on that explicit action.

2. OpenAI (api.openai.com) — off by default

Two independent, opt-in features send data to OpenAI using your API key:

Neither feature works until you supply an OpenAI key and explicitly grant the optional https://api.openai.com/* host permission from the options page. Your use of the OpenAI API is governed by OpenAI's privacy policy and the terms attached to your own API key.

3. OpenRouter (openrouter.ai) — off by default

DesignLoop offers three models. Nano is Chrome's on-device model and is the default. Plus and Pro are cloud models reached through OpenRouter using your own API key, and they are what make the following leave your machine:

None of this happens until you supply an OpenRouter key and grant the optional https://openrouter.ai/* host permission from the options page. Which model runs where is always shown on the model chip in the panel — it reads on-device · private on Nano. Your use of OpenRouter is governed by OpenRouter's privacy policy, the upstream provider it routes to, and the terms attached to your own key.

4. Google (Web Speech API) — off by default

If you select the webspeech transcription mode, Chrome's built-in SpeechRecognition streams your microphone audio to Google's speech servers. This is Chrome behaviour, not DesignLoop behaviour, and the extension cannot intercept or prevent it. It is why the default transcription mode is none.

5. Google Fonts (fonts.googleapis.com, fonts.gstatic.com)

When you rename a font family in the Design System tab, DesignLoop fetches that font from Google Fonts so the page can actually render in it. This sends the font name and, as with any Google Fonts request, your IP address to Google. It happens only when you change a font.

6. Chrome built-in AI (Gemini Nano) — on-device

On the Nano rung, chat and iteration use Chrome's Prompt API, which runs Gemini Nano locally. Nothing is transmitted. Design-system naming always runs here regardless of the model you picked. If the model is unavailable, the feature degrades to accepting raw property: value CSS and no model is used at all.

The options page also reports the availability of Chrome's other built-in models (Proofreader, Rewriter, Writer, Summarizer, Language Detector). These are Chrome's, they run locally, and downloading them is a matter between Chrome and Google.

7. Images referenced by the page

When exporting to Figma, the extension fetches images the page references so it can embed them, using credentials: 'omit' so your cookies are never attached to those requests.

8. The debugger permission — local only

Chrome lists this permission alarmingly, so: it is used for exactly one thing. Capturing a page at several widths at once needs Emulation.setDeviceMetricsOverride, which is only reachable through the DevTools protocol. DesignLoop attaches to the tab, resizes it, captures, clears the override and detaches. It reads no network traffic and sends nothing anywhere.

Sanitization

Before any page HTML is stored in a draft, DesignLoop:

You always see the sanitized draft in the side panel before it is sent anywhere. HTML capture, console capture, and full-viewport screenshots can each be disabled entirely in options.

What DesignLoop never does

Limited Use disclosure

DesignLoop's use of information received from Google APIs, and any information obtained from a user's browser, adheres to the Chrome Web Store User Data Policy, including the Limited Use requirements. Data is used solely to provide the user-facing features described above and is never transferred except as required to provide those features at the user's explicit request.

Deleting your data

All extension data lives locally. Removing a draft deletes its audio and screenshots; forgetting a chat session deletes the session. The options page has two buttons under Data & storage: Delete stored work (drafts, exports, sessions, design systems) and Erase everything, which also takes your keys and settings with it. Uninstalling the extension removes the lot.

Data you have already pushed to GitHub, or sent to OpenAI or OpenRouter, is governed by those services and must be deleted there.

Permissions

A per-permission justification is published in the extension's Chrome Web Store listing, and is available on request.

Changes

Material changes to this policy will be published on this page and reflected in the "Last updated" date above, with a corresponding release note.

Contact

Questions or privacy concerns: email clasicwebtools@gmail.com.