Legal information

Privacy Policy

This policy explains what the hosted md-pdf-preview service processes, why it processes it, and how you can exercise your rights. It describes the current implementation, not self-hosted deployments that an operator may configure differently.

Effective date:
August 23, 2026
Last updated:
August 24, 2026

Data Controller

The Data Controller is Bitnexus Lab, a sole proprietorship operated by Lenz Villanueva Andrew Angel Giovanny, established in Italy. Milan, Italy. Privacy contact: privacy@bitnexuslab.com.

The open-source repository and a hosted instance are separate contexts. The operator of a self-hosted deployment is responsible for its own controller information, providers, retention rules, and privacy notice.

What This Policy Covers

md-pdf-preview is a local-first Markdown editor with optional cloud synchronization. You can use the editor without an account; signing in is needed only for the hosted cloud workspace and account features.

The service currently has no payments, subscriptions, advertising, or optional analytics configured in this repository. This policy will be updated before any new processing is introduced.

Personal Data Processed

The following categories are supported by the current code and database schema. The service does not intentionally store plaintext passwords.

  • Account data: name, email address, email-verification status, account identifier, creation and update timestamps, and an optional profile image URL.
  • Authentication data: the authentication provider and provider account identifier. For email/password accounts, the password is stored using the authentication library's secure cryptographic hashing, not as plaintext.
  • Session and security data: a server-side session identifier, session creation/update/expiry timestamps, IP address, and user-agent string. The browser also receives a necessary session cookie.
  • OAuth account data: the provider access, refresh, and ID tokens and their expiry metadata may be stored server-side by the authentication implementation when returned by a provider. They are not displayed in the application.
  • Workspace data: folder and document names, hierarchy, icons, colors, favorites, ordering, timestamps, revision metadata, file type, size, hash, and cloud document content when you choose cloud synchronization.
  • Email-delivery data: the email address, verification or account-deletion confirmation purpose, provider message identifier, delivery status, timestamps, quota date, and limited provider error information.
  • Operational data: request identifier, endpoint, method, status, duration, user identifier when available, IP address, and bounded sanitized request/response or error information used for security and troubleshooting.

Local-Only Workspace and Browser Storage

When you work without cloud synchronization, documents and workspace metadata remain in the browser's IndexedDB database named md-pdf-preview. In this mode, document contents are not sent to the hosted workspace API.

The application also stores limited interface state in browser storage. These values are used to provide features you have selected and are not used for tracking. Clearing site data or changing browser profiles can remove local documents and settings.

  • IndexedDB database md-pdf-preview: local workspace items and metadata, retained until you delete them or clear browser site data.
  • localStorage key theme: selected visual theme, retained until cleared.
  • localStorage keys md-pdf-preview:zoom-preferences and md-pdf-preview:desktop-sidebar-collapsed: selected editor and layout preferences, retained until cleared.
  • sessionStorage keys md-pdf-preview:scroll:*: temporary scroll-position restoration, normally ending with the browser tab or session.
  • NEXT_LOCALE cookie: remembers the language selected in the locale switcher; it is a session preference.

Email Authentication and Sessions

Email/password registration requires email verification. Verification messages are sent through Resend. Rate limiting and a server-side record of delivery attempts are used to prevent abuse.

The Better Auth session cookie is an HTTP-only, same-site cookie used to keep you signed in. It is not available to page scripts.

  • The default session lifetime in the current configuration is up to 7 days, subject to sign-out, expiry, and any future deployment settings.
  • An OAuth state cookie is used briefly to protect the Google or GitHub sign-in flow from request forgery; its configured lifetime is approximately 10 minutes.
  • Verification records contain an identifier, a verification value, and an expiry time. They are used only for email verification and are not a marketing mailing list.

Google Sign-In

If you choose Google sign-in, the service redirects you to Google and receives the identity information needed to create or access an account. The current Better Auth configuration does not request access to Gmail, Drive, Calendar, contacts, or other Google APIs.

Google processes the OAuth request under Google's own terms and privacy policy.

  • Scopes actually requested: openid, email, and profile.
  • Data used by the application: Google's subject/account identifier, name, email address, profile image URL, and email-verification claim.
  • No Google data is used for advertising or profiling by this application.

GitHub Sign-In

If you choose GitHub sign-in, the service uses GitHub's OAuth API to obtain the identity information needed to create or access an account. The current configuration does not request repository, organization, issue, or code access.

GitHub processes the OAuth request under GitHub's own terms and privacy policy.

  • Scopes actually requested: read:user and user:email.
  • Data used by the application: GitHub user identifier, name or login, avatar URL, email address, and the primary email's verification status.
  • No repository content or repository permission is requested by the current implementation.

Purposes and Legal Bases

The Controller uses the information only for the purposes below. The legal basis is selected for the specific purpose rather than treating all processing as consent.

  • Creating and managing an account, authenticating you, verifying your email, and providing cloud synchronization: Article 6(1)(b) GDPR, performance of the service requested by you.
  • Maintaining sessions and protecting accounts, preventing abuse, applying rate limits, and investigating security incidents: Article 6(1)(f) GDPR, the Controller's legitimate interest in operating a secure service.
  • Sending a verification email that you request: Article 6(1)(b) GDPR, because it is necessary to activate the requested account.
  • Keeping records required by law, where a legal obligation applies: Article 6(1)(c) GDPR.
  • Optional analytics, advertising, or profiling: none is currently configured. If introduced, it will be blocked until a valid consent mechanism is available and consent will be withdrawable.

Processors and Other Recipients

The following services and infrastructure are verifiable for the hosted deployment. Exact legal entities, service plans, contractual terms, and some transfer details may vary by provider configuration.

  • Cloudflare: Cloudflare Workers, through OpenNext, runs the Next.js application and server-side API functionality. Better Auth runs server-side in the same Worker and connects through Cloudflare Hyperdrive to the hosted service's Supabase PostgreSQL database. Cloudflare R2 stores cloud document objects and applicable diagnostic and storage data; its R2 configuration uses Cloudflare's WNAM jurisdiction / North America location configuration.
  • Supabase: provides the managed PostgreSQL database. Account, authentication, session, email-delivery, workspace, and operational records are stored in PostgreSQL. The production database is hosted on AWS in the us-west-1 region (United States).
  • Oracle Cloud: a separate Go backend runs on Oracle Cloud infrastructure in Phoenix, United States. It supports workspace persistence, Cloudflare R2 presigned URLs, and related server functionality.
  • Resend: sends email-verification and account-deletion confirmation messages and processes the recipient email, name, relevant link, delivery metadata, and webhook events.
  • Google: receives OAuth requests and returns identity claims only when you select Google sign-in.
  • GitHub: receives OAuth requests and returns profile and email data only when you select GitHub sign-in.
  • The hosted service uses Cloudflare, Supabase, Oracle Cloud, Resend, and, when you choose those authentication methods, Google or GitHub.

International Transfers

The hosted production infrastructure includes processing and storage in the United States: the Supabase PostgreSQL database is hosted on AWS in us-west-1, and the separate Go backend runs on Oracle Cloud infrastructure in Phoenix. Cloudflare R2 is configured with WNAM. The Next.js application and Better Auth run in Cloudflare Workers through OpenNext, and Better Auth connects to Supabase PostgreSQL through Cloudflare Hyperdrive. Cloudflare, Resend, Google, GitHub, and other providers may also process data outside the EEA according to their infrastructure and contractual configuration.

Where required, transfers rely on legally recognized mechanisms described in the relevant provider terms, such as adequacy decisions, Standard Contractual Clauses, or the EU-US Data Privacy Framework where applicable. Provider-specific safeguards and sub-processors are governed by their current agreements and policies.

Retention

The hosted service has several concrete retention and deletion mechanisms, but not every category has automated deletion. The following describes the current behavior. Backup copies, where provided by the hosting provider, may temporarily retain deleted information according to the provider's backup lifecycle and are not used as active application data; the hosted service does not promise a specific backup deletion timeframe.

  • Local browser data: until you delete it, clear site data, use private browsing, or the browser removes it.
  • Account and workspace data: while the account remains active. Authenticated users can permanently delete their account from application settings; this deletes the cloud workspace and associated Cloudflare R2 document objects.
  • Sessions: the configured session expiry is up to 7 days by default, with earlier deletion on sign-out or account deletion.
  • OAuth tokens and account links: while needed for the linked authentication account, subject to provider revocation and account deletion procedures.
  • Verification records and email-delivery records: verification records have an expiry field; PostgreSQL email-delivery records are automatically deleted after 30 days.
  • Operational logs: PostgreSQL request logs are automatically deleted after 30 days. Diagnostic log objects stored under the Cloudflare R2 logs/ prefix are also configured to expire automatically after 30 days.
  • Backups: where provided by the hosting provider, may temporarily retain deleted information according to the provider's backup lifecycle; they are not active application data, and no specific deletion timeframe is promised.

Your GDPR Rights

Subject to the conditions and limits in the GDPR, you may ask the Controller for access to your personal data, correction of inaccurate data, erasure, restriction of processing, portability of data you provided, and information about automated processing. You may object to processing based on legitimate interests.

Where processing is based on consent, you may withdraw consent at any time. Withdrawal does not affect processing that occurred before withdrawal.

  • Access: receive a copy of personal data being processed.
  • Rectification: correct incomplete or inaccurate data.
  • Erasure: request deletion where the legal requirements are met.
  • Restriction: ask the Controller to limit processing in the situations defined by the GDPR.
  • Portability: receive certain data in a structured, commonly used, machine-readable format.
  • Objection: object to processing based on legitimate interests, including for reasons related to your situation.
  • Complaint: contact a supervisory authority, especially the Garante per la protezione dei dati personali if you are in Italy.

The Italian supervisory authority is Garante per la protezione dei dati personali.

Account and Data Deletion

Authenticated users can permanently delete their account from the application settings. After explicit confirmation, the service deletes the user's cloud workspace data and associated Cloudflare R2 document objects and then deletes the account through the authentication system. A deletion confirmation email may be sent after completion; its delivery record follows the 30-day email-delivery retention period. This action cannot be undone.

Local-only documents stored in the browser are not automatically deleted because they are separate from the cloud account. PostgreSQL request logs, email-delivery records, and diagnostic logs follow their separate 30-day retention periods. Formal GDPR and privacy requests can be sent to privacy@bitnexuslab.com. Some information may need to be retained when required by law or necessary for the establishment, exercise, or defence of legal claims. Backup copies, where provided by the hosting provider, may temporarily retain deleted information according to the provider's backup lifecycle and are not used as active application data.

Security

The application uses HTTP-only same-site session cookies, secure password hashing through Better Auth, OAuth state protection, rate limiting, server-side access checks, presigned storage URLs, and redaction of common secrets and document-content fields in operational logs. These measures reduce risk but cannot guarantee absolute security.

If you believe an account or document is at risk, stop sharing the affected credentials and contact privacy@bitnexuslab.com.

Changes to This Policy

This policy may change when the service, providers, or processing purposes change. Material changes will be published with a new effective date and, where appropriate, communicated through the service. The current version is always available at this public URL.

Contact

Privacy requests and questions: privacy@bitnexuslab.com. Data Controller: Bitnexus Lab, a sole proprietorship operated by Lenz Villanueva Andrew Angel Giovanny, established in Italy. Milan, Italy.