Privacy Policy
This policy explains what RayRF collects and why. It covers the rayrf.com website, the RayRF Studio desktop application, and the services connected to them. RayRF is operated by RayRF Inc.
1. Who we are
RayRF Inc., a corporation headquartered in Toronto, Ontario, Canada. Contact us about privacy at support@rayrf.com.
2. What we collect and why
2.1 Account
- Email address, and a password hash if you sign up with email and password. Used to create your account, sign you in, and contact you about your subscription.
- An OAuth identifier when you sign in with Google. Used only to link your Google identity to your RayRF account.
- An optional display name if you provide one.
2.2 Billing
- Your Stripe customer ID and invoice history. Used to bill you, show your invoices, and reconcile payments. Card numbers are handled by Stripe and never reach our servers; we may see the card brand and last four digits to display in the dashboard.
2.3 License activations
- A license key per active plan, plus a hashed machine identifier, an optional machine label, and activation timestamps for each machine you activate. Used to enforce the per-plan activation limit listed in the Terms of Service.
2.4 Desktop telemetry
After you sign in, the desktop application sends product-usage telemetry so we can see what features get used, what hardware our users run on, and where the app crashes. Telemetry is opt-in by default in the EU, UK, and EEA, and opt-out elsewhere. You can change it any time under Settings, Anonymous Usage Telemetry, and your choice syncs to your account.
What the desktop app sends:
- Which tabs, panels, dialogs, and calculators you opened, and for how long.
- The kind and outcome of each simulation run (solver backend, precision, quality preset, boundary type, duration, peak memory, throughput, exit reason), with the size described in coarse buckets (total cells, layer count, port count) so the actual geometry, frequencies, and materials are not exposed.
- Hardware and platform: CPU model, vendor, core counts, and AVX support; GPU model, vendor, video memory, driver version, CUDA runtime version, and compute capability; installed RAM with type and speed where reported by the OS; operating system family, version, and architecture; primary monitor resolution, display scaling, locale, and timezone offset.
- Identifiers used to group your events: a per-install random ID, a per-app-session random ID, the app version and release channel, your plan tier, and your account UUID, so we can correlate behavior with plan and honor deletion requests.
- A truncated network address prefix (the /24 portion of an IPv4 address or the /48 portion of an IPv6 address, never the full IP), and the country and region derived from the request.
- Exceptions and crashes by exception class, module, top stack-frame function and line, the operation that was running, and a stack-trace hash. Crashes also include the signal name or exit code and the app uptime at the time of the crash. The exception message text is not sent.
The desktop never sends your project files, geometry, materials, port definitions, mesh details, simulation results, file paths, free-text input, or system identifiers beyond the categories above. Our server rejects all data that does not match the anonymized format described in the “what is sent” list above, so even an application-level error would not expose any design or user data.
2.5 Opt-in benchmark sharing
The desktop application offers an optional benchmark share. Nothing is sent unless you review the data and confirm the share.
A benchmark share contains:
- CPU model, physical core count, total RAM, operating system, and the GPU model and video memory when present.
- Completed benchmark points with grid cell count, CPU or CUDA backend, throughput, peak system memory, and peak GPU memory when reported.
- A PNG image of the benchmark curve, the app version, and the measurement time.
A benchmark share does not contain an account ID, project data, file paths, host name, or persistent device identifier. We use the shares to understand performance across hardware. Each accepted share receives a random record ID and submission time.
2.6 Website analytics
We count public page requests by broad source, campaign and asset-group IDs, public page category and device class, including before a cookie choice. We also count cookie-banner displays and choices. Request counts are grouped by hour; reports combine them into daily totals. These counters do not store IP addresses, advertising click IDs, full URLs, or visitor, session or account identifiers. Server-generated delivery receipts prevent retry duplicates and are removed after two days by a daily cleanup. These counters cannot identify unique visitors or follow a person between pages. Hosting providers also process requests to deliver and secure the site.
We collect first-party analytics on rayrf.com in three tiers. In the United States and Canada outside Quebec they are on from your first page view, and you can turn each off at any time under Cookie preferences in the footer; turning one off stops that collection from then on and keeps what was collected before. Everywhere else they stay off until you opt in through the cookie banner.
Analytics, first-party (on by default in the United States and Canada outside Quebec, opt-in elsewhere):
- Page views and per-view dwell time and scroll depth, with a visitor and session uuid stored in two first-party cookies.
- Where you arrived from: the referring URL, the host parsed from it, and the UTM source, medium, and campaign query parameters.
- First observed arrival, subsequent visits and campaign or asset-group IDs. When you sign in, recorded visits can be linked to your account to report aggregate signup, trial and payment conversion paths.
- Coarse device context: viewport and screen size, device pixel ratio, browser language, device class (desktop, mobile, tablet, bot, other), and country derived from the request (never the full IP).
- Clicks on elements we tagged for analytics and outbound links (recorded as the destination host). Demo playback and how much distinct video content was played. Web Vitals readings, and uncaught JavaScript errors from the page (a truncated error message, source file, line, and column).
Analytics, behavioral (on by default in the United States and Canada outside Quebec, opt-in elsewhere):
- Per-section engagement totals: for each named section on the page, how long it was visible, how long the pointer hovered over it, how many times it was clicked, and when it first came into view. Capped at thirty named sections per page view. Raw pointer coordinates are not stored; we do not capture the text inside the section or anything you typed.
- Microsoft Clarity, a session-replay and heatmap tool we use alongside our first-party analytics. It records interactions (clicks, scrolls, and a reconstruction of the page built from DOM changes) so we can see where the UI is confusing. Data is processed by Microsoft under their privacy policy. We do not pass your email, name, or account id to Clarity, and Clarity masks form input by default.
Analytics and advertising, third-party:
- Vercel Analytics, Vercel Speed Insights and Google Ads. These providers process data under their privacy policies. The Cookie Policy explains the scripts, Google's regional defaults and how your cookie choice applies.
2.7 Funnel and conversion
- Independent of cookie consent, we record a small set of account-tied events (signup started, signup completed, checkout started, checkout succeeded or failed, trial started or converted, subscription canceled). Used to operate your account and to measure conversion at an aggregate level.
2.8 Signup survey
- When you create an account, we ask two short questions: how you found RayRF, and which description best fits you. We store your answers with your account and use them to understand our audience and to focus development and marketing. If you choose Other, you can add a short note in your own words.
2.9 Support
- If you contact us, we receive your email, the subject and body of your message, any attachment you send, and the conversation history. Used to answer you.
2.10 Cookies
We use a small set of cookies to keep you signed in, remember your sign-in preference, and (only with consent) measure traffic. The full list is in the Cookie Policy.
3. Lawful basis (EU and UK)
- Performance of a contract: account, billing, license issuance and enforcement, support.
- Legitimate interests: fraud prevention, basic site security, desktop telemetry outside the EU and UK. You can object at any time.
- Consent: non-essential cookies, desktop telemetry inside the EU and UK, opt-in benchmark sharing, and the behavioral and third-party analytics tiers. You can withdraw consent at any time.
- Legal obligation: keeping billing records for Canadian tax and accounting law.
4. Service providers
We share personal information with the providers below only to the extent needed to run the service. Each provider has its own privacy policy.
- Supabase, for database, authentication, and storage. supabase.com/privacy
- Stripe, for payments and the customer portal. stripe.com/privacy
- Resend, for transactional email. resend.com/legal/privacy-policy
- Vercel, for website hosting, Vercel Analytics, and Vercel Speed Insights. vercel.com/legal/privacy-policy
- Google, for OAuth sign-in, only if you choose to sign in with Google. policies.google.com/privacy
- Microsoft, for Clarity session-replay analytics, only if you opt in to the behavioral analytics tier. privacy.microsoft.com/privacystatement
We do not sell your personal information. We do not share it for cross-context behavioral advertising.
5. Where your data is processed
The service runs on Supabase and Vercel infrastructure, so your data may be processed in Canada, the United States, or other jurisdictions where our providers operate. We use providers that apply standard contractual safeguards for cross-border transfers.
6. Retention
- Account data is kept while your account is active.
- Billing records are kept for seven years to comply with Canadian tax law.
- Raw website and telemetry events are retained for operational analysis, typically no longer than ninety days, after which they are aggregated or deleted. Aggregated data that cannot be linked back to you may be kept indefinitely.
- Opt-in benchmark shares are not linked to an account. We retain them for performance analysis until they are no longer needed.
- If you request account deletion, we delete or anonymize your data within thirty days, except where law requires us to keep it.
7. Your rights
Subject to applicable law, you can ask us to show you the data we hold, correct it, delete it, export a copy, restrict or object to certain processing, or withdraw consent. We apply these rights to all users, not only those in the EU or UK. Email support@rayrf.com or use the in-app account-deletion request. We answer within thirty days. If you are not satisfied with our response you can complain to the Office of the Privacy Commissioner of Canada or your local supervisory authority.
8. Children
The service is not directed to anyone under eighteen. If you are under eighteen, please do not provide personal information through the service. If you believe a child has, email support@rayrf.com and we will delete it.
9. Security
We use TLS in transit and rely on encryption at rest provided by Supabase, Stripe, and Vercel for their stores. No system is perfectly secure. If a breach affects your personal information we will notify you and the relevant authorities as required by law.
10. Changes to this Policy
If we make material changes, we will give you at least thirty days notice by email or in-app banner. The date at the top of the page is always the current version.
11. Contact
Questions or requests: support@rayrf.com.
RayRF Inc., Toronto, Ontario, Canada.