Privacy policy.
Notes in your browser
Duonote saves note text, formatting, the full webpage URL, position, size, color, visibility, order, timestamps and creator information in this Chrome profile using chrome.storage.local. It also saves appearance preferences, connection permissions, operation receipts and update status. Manual notes work without an account, a native helper or an Internet connection. Cloud backup is optional and is off until you connect your storage account. Notes are not synchronized between browser profiles. Images you paste or explicitly add from a page are copied into this extension’s IndexedDB in the same Chrome profile. Formatting is converted to the supported note styles; source scripts and page layout are not retained. Fetching a selected image contacts its source server, which sees a normal request and IP address. An image from the same website may use that page’s existing sign-in cookies to copy a picture you selected; credentials are never sent to our service. Cross-origin image requests from the extension omit cookies and the referrer. After copying, displaying the saved image uses local bytes and does not contact the source. Chrome storage access and unlimitedStorage keep these local files available.
The extension uses the current page URL to restore that page's notes. Notes already open in a tab also follow that tab to other pages. To restore them after Chrome reopens, the extension keeps local references to their original URLs and note IDs, the tab's last page URL and its position in the window. These working-set records exist only for tabs containing notes, are updated as the tab navigates, and are removed when that individual tab closes. Closing a whole window preserves them for session restoration. Note text remains in its original local record. Pending edits also have a local recovery journal so an interrupted save can resume; successfully recovered or saved entries are removed. Working-set references and recovery authentication information stay local. If you enable backup, unsaved draft content is included in the encrypted copy described below. Moving to another website makes the carried notes visible in that website's DOM too. A URL includes its query and fragment, which can contain private information. It does not build a separate browsing-history database or expose page content or device files through its note tools. It does not send every page you visit to a server. Notes displayed on a webpage are part of its DOM and should not be treated as secret from that website.
Purchase and activation
The free version includes one saved note across this browser profile, including hidden notes. A one-time $9.99 purchase unlocks additional notes and includes future Duonote updates. Gumroad handles checkout, payment details, receipts and the 14-day refund policy. Selecting Buy now opens the Gumroad product page in a new browser tab. No Gumroad page is loaded by the upgrade prompt before you choose to buy. Duonote does not receive or store your payment-card details.
When you activate a license, the extension sends the license key and a random installation identifier to our HTTPS verification service on Cloudflare. The service sends the key and product identifier to Gumroad to verify the purchase and check refund or dispute status. Gumroad may return purchaser information, including the purchase email; our service does not store that response or include it in the signed activation proof. No note text, webpage URLs, browsing history or agent credentials are sent for license verification. The installation identifier is randomly generated and is not a hardware fingerprint.
The extension stores the license key, signed activation proof, installation identifier and verification timestamps in this Chrome profile. It checks an activated license at most once daily automatically, and when you select Check license. Network failures do not expire an activated license. A confirmed refund or invalid license blocks creation of additional notes while preserving access to, editing and export of existing notes. With single-activation protection enabled, Release activation frees the license for another browser and removes the local key and proof after the service confirms release. This requires an Internet connection. Older, unbound activations remove the local proof only. Uninstalling clears extension storage; it does not itself release a server activation. If the old browser is unavailable, enter your license key and confirm Move activation here. This changes the authorized Duonote installation. The old browser stops automatic backups when it next verifies the released activation; Cloud-storage authorization is separate and can be revoked in the connected Google account settings. Its local notes remain. Offline purchase access is refreshed when that browser next reaches the service. Gumroad retains purchase records under its own privacy and legal obligations.
The verification service keeps a hashed purchase identifier, random activation identifier, current installation identifier and verification time to enforce one online activation. It does not store your key or purchase email and has no application request logging. Cloudflare processes network metadata, including the IP address used to limit repeated activation attempts. Contact contact@ahmedmagdi.com for purchase or privacy support.
Optional encrypted backup
Paid users can connect their own Google Drive account for automatic encrypted backup. Selecting Connect opens Google's authorization screen and starts backup after permission is granted. No Duonote storage bucket or backup relay receives these files. The user's Google Drive quota and account terms apply.
Google Drive uses the non-sensitive drive.appdata permission, limited to Duonote's hidden application-data folder, without access to other Drive files. Chrome's Identity API manages Google access tokens and expiration. Duonote stores an opaque Drive account identifier and connection state in trusted extension storage, and verifies the same destination after renewal. No Google refresh token, client secret or token proxy is used. A fresh authorization prompt is shown only after the user chooses Connect or Reconnect.
A snapshot contains notes, full URLs, supported formatting, copied image bytes, appearance preferences and recoverable pending drafts. It excludes license keys and proofs, provider tokens, agent credentials, grants, operation receipts and tab working-set references. Changes schedule backup while Chrome runs. Offline work stays local; interrupted uploads retry after connectivity returns or Chrome reopens. Nothing can upload while the browser and device are shut down.
Snapshots are encrypted locally with AES-256-GCM using a key derived from the license key and purchase identifier. Each part has a fresh nonce, authenticated snapshot metadata and a SHA-256 integrity check. The activation service separately receives the license key to verify the purchase, so this is not a zero-knowledge promise. Restore requires both access to the connected storage account and the same license key. The selected provider processes encrypted files, snapshot metadata and normal network metadata. Provider tokens are not exported or shared with agents.
After a successful backup, retention keeps recent recovery points from the last hour, hourly copies for 24 hours, daily copies for 30 days, weekly copies for 12 weeks and monthly copies for 12 months. Each period keeps its latest successful copy; the newest copy is always kept. Partial uploads are not offered for restore; abandoned partial folders older than seven days are cleaned after a later successful backup. Disconnect stops scheduled work and clears the extension's connection state and cached access tokens; it keeps local notes and cloud copies. It does not sign the user out of their provider or revoke account-level consent. Deleting a Google app-data backup is permanent and requires confirmation. Removing the extension does not issue cloud-file deletion requests, but deleting Duonote's application data from Google Drive removes its backups. On a new installation, activate the same license, connect the same storage account, and choose Restore a backup. An empty installation does not upload an empty replacement over existing copies. Restore asks for confirmation and preserves existing notes; identical content is not duplicated. Cloud backups are separate from agent permissions and are not automatic profile synchronization.
Optional local agents
If you install the separate local connection and approve an agent in Settings, Codex or Claude Code can receive note text, formatting, the requested page URL and note metadata within the permissions you grant. Image references and descriptions may be included in formatting; image bytes are not sent through the agent transports. Older helper versions do not support editing the new image blocks. Communication between Chrome and the local helper stays on this computer. No Duonote hosted relay processes those local note operations. The AI application may send tool inputs and results to its provider, under that provider's policies. Connecting an agent is optional; reading, editing and deletion permissions are enforced by the extension.
The setup program installs a native host, MCP runtime and usage skill under your operating-system account and configures your selected agent. It stores credentials in private local files; Chrome stores credential hashes, site permissions and connection timestamps. The host holds note data temporarily while delivering a request and does not keep a note database. Local pairing requests expire after five minutes. Operation receipts expire after 24 hours and are cleaned on startup, writes and maintenance.
The optional installer downloads official Node.js/npm binaries when needed and the versioned Duonote package, verifying their integrity. Optional helper updates check npm metadata at most daily on agent startup. Download services receive normal network metadata, such as IP address, but not note contents from these checks. The helper's --no-auto-update option disables these checks. Chrome manages extension updates separately.
Optional hosted connections
ChatGPT and Claude web or desktop use the hosted connector, separately from the local Codex / Claude Code setup. Existing hosted agent connections use the same service. When you authorize this route, requested note content and URLs pass through our Cloudflare service and your selected AI application over HTTPS/WSS. This route is not end-to-end encrypted through the service. It does not synchronize a copy of your notes to the cloud.
The hosted service retains an opaque browser identifier, browser name, hashed device credentials, authorized client names, allowed origins, permissions, OAuth records, connection timestamps and aggregate usage counts. It does not durably store note bodies or full page URLs in its application databases or logs. Cloudflare may process operational network metadata. Google sign-in and tokens are used only for optional Google Drive backup, not this agent-connection flow.
Hosted authorization challenges expire after ten minutes, socket tickets after 30 seconds, access tokens after one hour and refresh tokens after 30 days. Expired challenges are removed by a daily job. Browser/grant metadata and usage totals remain until deletion is processed. Contact us to request deletion of hosted metadata; we must verify ownership before acting.
Your choices and security
All users can export a .duonote backup file containing notes, images, formatting and recoverable drafts from Settings → Backups, and restore it without Internet access. These downloaded files are not encrypted; keep them in a safe location. Imported files do not contain or restore license keys, agent grants or connection credentials. Recovery does not block older notes because of a plan downgrade. The free limit continues to apply to creating new notes. Temporary local import/export files expire after one hour and are cleared on the next file operation. You can edit or delete individual notes and disconnect agents in Settings. A note's menu can copy supported rich text and images to your clipboard, or download Markdown and separate image files together in a new Downloads subfolder; these actions do not send the note to our service. Downloaded files are separate from extension storage and remain after uninstalling. Disconnecting preserves notes and blocks subsequent agent operations; it does not erase copies already received by an AI provider. Uninstalling the extension removes that installation's Chrome storage. When optional backup is enabled, saved copies can be restored from Settings → Backups → Restore a backup. Do not uninstall to repair an update if you still need the notes. Text-only drafts can still be downloaded when an update interrupts the extension connection. Reconnect the extension before exporting a draft with images.
Local notes remain until you delete them, clear the extension's storage or uninstall it. A genuinely conflicting or orphaned recovery draft may remain locally to avoid losing an unsaved version; it is not automatically substituted for a newer note or used to recreate a deleted note. Images shared by duplicated notes or recovery drafts are retained until no note or draft needs them. Unreferenced image files are removed after a seven-day recovery period during maintenance. Empty page records and unexpired operation receipts may remain after the final note is deleted. Local connection credentials and installed helper files remain on disk until removed; browser revocation invalidates access. Duonote does not add application-level encryption to Chrome's local storage. Protect access to your operating-system account and browser profile.
Website analytics
This section applies to ahmedmagdi.com, including this Duonote website. It does not add analytics to the browser extension or read your saved notes.
When enabled, Google Analytics measures visits to public pages, views of website sections, FAQ and demo interactions, and clicks to products, guides, contact channels, the Chrome Web Store and Gumroad. The website sends controlled page and event labels, not note text, email addresses, license keys, raw search queries or private receipt URLs. Google processes normal network and device information to provide Analytics. Google Signals, advertising personalization and user-provided data collection are disabled.
We use a country signal from the website’s existing Cloudflare connection to apply our reviewed regional consent settings. We do not request precise location or store the connection trace or IP address in the consent preference. Where opt-in is required, Analytics stays off until you accept. If the region is unknown or has not been reviewed, Analytics stays off unless you enable it yourself. Browser privacy signals are respected. Country detection is approximate and can be affected by VPNs.
Use Cookie settings in the footer to accept or reject Analytics at any time. Your choice is stored in this browser for up to 180 days and applies across the personal and Duonote pages on this domain. Rejecting does not limit access to the website. Withdrawal stops future website measurement and removes this site’s Analytics cookies; it does not retroactively erase events already received by Google.
Analytics cookies are configured to last up to 180 days, with expiry refreshed on use. The existing Analytics property retains event data for 2 months and user data for 14 months, with the user-retention period reset by new activity. Aggregated reporting can be retained longer. The consent preference is necessary to remember your choice and is separate from Analytics cookies.
Gumroad operates checkout under its own privacy practices and provides our sales records. Clicking Buy now on this website records purchase intent only, not a completed sale. Gumroad’s separate Analytics integration, when enabled, reports transaction information such as an order identifier, product, amount and currency. Payment-card details are not collected by this website. Website consent should not be assumed to control another domain’s checkout.
Limited use
Our use of information received through Chrome APIs follows the Chrome Web Store User Data Policy, including its Limited Use restrictions. Our use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including its Limited Use requirements. We use note data only to provide the described note, optional backup and authorized-agent features. We do not sell it, use it for advertising, lending or credit decisions, or train a Duonote model with it. Human access is limited to your specific consent, security investigations or legal obligations. Data may be disclosed when required by law.
Duonote contains no advertising, analytics SDKs or AI model. Payment-card collection happens on Gumroad’s website. Fonts, icons, release notes and animation assets are bundled locally. Displaying them does not contact a CDN. Release reminders use only locally stored version/read status. This product is independent of Google, OpenAI and Anthropic.
Changes to these practices will be reflected in this policy; material changes to data use will also be disclosed in the product.