Privacy Notice
What personal data is processed, on what basis, and for how long.
Version 2.0 — applies to each kind of processing from the release that introduces it, which the notice names where it describes it. This page is a fixed copy and will not change.
It is also the current version — the one https://legal.ripplefx.app/privacy/ renders.
Ripple Effect — Privacy Notice under arts. 13–14 GDPR (Reg. EU 2016/679), version 2.0 (English) This notice applies to each kind of processing from the release that introduces it. Where something has not started yet, the section describing it says so and names the release.
What changed from version 1.0. One new kind of processing, the news the application fetches from our site (§4.7), from Ripple Effect 1.5.1; and §3, which no longer counts the requests in §4 because version 2.0 of the End-User Licence Agreement governs them by rule rather than by number. Everything else is as version 1.0 said it. If you accepted version 1.0 of that Agreement, the application makes none of the requests in §4.7 until you accept version 2.0. Version 1.0 of this notice stays published, unchanged, at https://legal.ripplefx.app/v/privacy-1.0/.
1. Who is responsible
The Data Controller is ConnectingTheDots, a trade name of William Karol Di Cioccio, sole trader, VAT no. IT02224180667, Italy.
For anything about the processing of personal data, including to exercise any of the rights in Article 10: legal@ripplefx.app.
2. What applies to you
This notice covers three things, and which of them apply to you depends entirely on what you use:
| Applies to | |
|---|---|
| The application (§§4–6) | Anyone who installs Ripple Effect |
| The website (§7) | Anyone who visits ripplefx.app or its subdomains |
| The hosted service (§8) | Only people who create an account |
There is no account today. Section 8 describes processing that begins with the release that introduces the hosted service, and is written in advance so that it is on the record before it starts rather than after. Until then, nothing in it happens.
3. The principle the application is built on
Ripple Effect runs on your computer. Your stories, projects, boards, passages, scripts and exports are files in folders you chose, and the application does not send them anywhere. There is no background synchronisation and no content analysis, and there are no usage statistics unless you switch them on (§4.5).
From version 1.5, the application makes no network request at all until you have accepted the End-User Licence Agreement. An earlier build does not ask for acceptance and makes the update check in §4.1 on first launch — a request that carries nothing about you. That is the only request such a build makes unasked: the engine-fix check in §4.6 and the statistics in §4.5 both arrive with 1.5 as well, so neither exists in a build that does not ask.
After acceptance, §4 is the complete list of what the application sends, and it is kept complete: a new request is described here, naming the release that starts making it, before that release. What may be added is bounded by the four rules in Article 7 of the End-User Licence Agreement — in short, nothing you author and no identifier without your say, anything about you only if you switch it on or answer yes, and anything else only to our own site and carrying nothing about you. Signing in to the hosted service, if you ever do, is covered separately in §8.
4. What the application sends
4.1 An update check — once per launch
The application asks ripplefx.app what the most recent release is. The
request carries no identifier, no version number and no information about
you; the comparison against your installed version happens on your machine.
As with any request over the internet, the server necessarily sees the
originating IP address and the connection’s technical metadata.
Purpose: telling you that an update exists. Legal basis: legitimate interest in the security and correct functioning of software already installed (art. 6.1.f). Retention: we keep no record of individual requests beyond ordinary server logs.
4.2 A list of contributors — when you open the About box
The application asks ripplefx.app for the people credited in the support
repository, so the About box can show them; the site fetches that list from
GitHub itself and keeps it for an hour, so your request never reaches GitHub.
The request carries the application’s name and version as a User-Agent and
nothing about you. Retention: ordinary server logs, as in §4.1.
Versions before 1.5 asked GitHub’s public API directly, with a read-only access token that existed only to buy a rate limit; GitHub, as the operator of that API, saw those requests’ IP addresses under its own privacy statement.
Their pictures are fetched from GitHub by your own machine. The list the
site answers with carries each contributor’s avatar address on
avatars.githubusercontent.com, and the application loads those images
directly rather than through ripplefx.app — so opening the About box does
make requests to GitHub, for the images although not for the list. One of
those addresses is compiled into the application, so the request is made even
on a launch where the list itself could not be fetched. GitHub sees the IP
address and the ordinary metadata of an image request, under its own privacy
statement above, and is named in the sub-processors list as
an independent controller for requests made to it. Nothing identifying you or
your installation goes with them, and no image is cached anywhere but in the
application’s own memory for as long as the window is open.
Legal basis: legitimate interest in crediting contributors accurately (art. 6.1.f).
4.3 A crash report — only if you say so, and only for that report
This is the only thing the application sends that can contain anything of yours, and §5 describes it in full.
Consent is given per report. After a crash, the next launch shows you a dialog naming that crash, listing every file it would send with its size and a description, and asking. Nothing is sent unless you answer Send report. There is no setting that answers in advance, in either direction, and declining is final for that report.
Before it asks, the application checks that the server it would send to can be reached — a request to Supabase carrying nothing but the application’s publishable key — so that it never asks a question whose answer cannot be acted on. If the server cannot be reached, the question waits for a later launch.
Legal basis: consent (art. 6.1.a), given for that report.
4.4 Whatever you send yourself
Version control pushes to a repository you configured, using credentials
you supplied, which the application stores in your operating system’s own
credential store (Keychain, DPAPI or libsecret) and never transmits anywhere
else. Opening documentation, the support site, the survey or a bug report
hands a URL to your browser; from that point you are dealing with that site
under its own terms. From version 1.5 every such address is a
ripplefx.app/go/… link, which redirects your browser to wherever the page
lives today, so that a page can move without the application changing. The
site therefore sees that request, including its query — for a prefilled bug
report, the details in the next paragraph — in ordinary server logs, and keeps
nothing else of it. The satisfaction survey is a form hosted by Tally,
opened in your browser, and the link carries which part of the application you
opened it from and the version you are running — nothing else, and nothing
about you.
A prefilled bug report carries the version, your operating system and its version, how the application was installed, and the diagnostics summary the application shows you before it opens the page. It is opened in your browser for you to submit or not.
A picture a document points at by address. A Markdown document in a
project may reference an image by an http or https address rather than by
a file inside the project folder. When the application draws that document it
fetches the image from whoever hosts it, and that host sees the request and
the address it came from, exactly as it would had you opened the address in a
browser. This includes a project somebody else sent you, whose documents
you did not write: an image can be small enough to be invisible on screen and
still be a request, and the application does not ask before making it. A
picture that lives inside the project folder is read from your disk and
involves no network at all. We are not a party to either kind, and neither
reaches us.
4.5 Usage statistics — only if you switch them on
Usage statistics arrive in Ripple Effect 1.5. No build before it collects any, and from 1.5 they are opt-in: asked once, with the complete list of what would be sent in front of the question rather than behind a link, neither answer preselected, and switchable off afterwards in the application’s settings. No content you author is ever included, and adding anything to that list means asking again.
What a row contains. An event name from a closed list, the day it was sent (in UTC, never the time of day), an installation identifier described below, the application version, the operating system family, and a small bag of numbers and enumerated values. No free text, no file names, no project names, no paths, and nothing you wrote. As with any request over the internet, Supabase sees the IP address a row arrives from; it is kept in the provider’s request logs for no more than 28 days, for security and troubleshooting, and it is never stored with the row.
No account is involved, and none is created. Statistics are filed with the application’s own publishable key under a policy that permits filing them and nothing else — the same arrangement a crash report uses. There is no sign-in of any kind behind them, anonymous or otherwise, and therefore no user record of yours on our servers that they could ever be attached to.
The part worth stating precisely is what “anonymous” does and does not mean here, because it changes what your rights over it are.
While it is switched on, the application holds a random value it created at the moment you switched it on. The identifier it sends with each event — so that separate events can be told apart from separate installations — is derived from that value and from your computer’s own identifier, the one your operating system keeps for the machine, by a one-way hash: it cannot be turned back into either of them, and without the random value it cannot be derived again. Switching the statistics on is consent to the application reading that machine identifier for this purpose; it is read on your machine, used only to compute the hash, and never sent or stored anywhere. The random value is created on your machine, by you switching the setting on, and we never hold a copy of the identifier other than in the rows themselves. During that period the data is pseudonymous, not anonymous: the identifier is on your machine, so you can give it to us, and while you can, you can exercise every right in §11 over the rows carrying it — access, deletion, the lot. Write to legal@ripplefx.app with the identifier, which the settings screen shows you.
Switching it off destroys the random value, on your machine, permanently, so the identifier can never be derived again. Collection stops, and the link between you and the rows already sent is severed in the only place it ever existed. From that moment the rows cannot be connected to you by us, by you, or by anyone — which means there is nothing left to delete, and equally nothing we could return, correct or hand over if you asked. They are anonymous data, outside the scope of the GDPR by Recital 26, and they stay in the aggregate.
That is a real trade and it is stated rather than glossed: switching off is irreversible in both directions. It is why the identifier is destroyed rather than merely unused, and why switching the statistics back on later mints a new identifier — you are a new installation, and nothing joins the two.
Purpose: counting how many installations are in use, learning which parts of the application are used, and whether a release made it slower or less stable. Legal basis: consent (art. 6.1.a). Recipient: Supabase, as our processor (§9). Retention: 24 months from receipt at most, after which rows are deleted or reduced to totals that carry no identifier. The record that an installation was in use on a given day is kept for 30 days, then deleted: an installation that stops reporting simply stops being counted.
4.6 Engine fixes — unless you switch them off
From version 1.5 the application can take a fix to its engine — the part
that plays and compiles campaigns — without a new installer. While Engine
updates, under Settings ▸ Updates, is on, which it is unless you switch it
off, it asks
ripplefx.app once per launch whether such a fix exists. The request carries
the engine version it is running, the milestone it belongs to, the platform
(operating system and processor type) and an identifier of the interface
between the application and its engine: nothing about you or your projects,
and nothing unique to your installation. If a fix exists, it is downloaded
from GitHub, through a redirect from ripplefx.app, checked against a
signature, and used from the next launch. A fix never changes what the
application can do; it only corrects or speeds up what it already does.
Purpose: keeping software already installed working correctly and securely. Legal basis: legitimate interest (art. 6.1.f). Retention: ordinary server logs, as in §4.1; GitHub sees the download under its own privacy statement. Switching it off stops both requests at once.
4.7 News — unless you switch it off
From version 1.5.1 the application can show short news from us — a release,
a change worth knowing about, something that needs your attention — on its
home screen, without you visiting the website. While News, under Settings
▸ Updates, is on, which it is unless you switch it off, it asks
ripplefx.app once per launch for the current list of news. The request
carries no identifier, no version number and nothing about you or your
projects, and no cookie. Each item may carry a picture, and the application
fetches it from ripplefx.app or one of its subdomains and from nowhere
else: a picture any item points at elsewhere is not fetched at all. Which
items you have read is recorded on your machine only, as the date of the
newest one you opened, and is never sent.
If you accepted version 1.0 of the End-User Licence Agreement, none of this happens until you accept version 2.0.
Purpose: telling the people who use the application about it, without asking them to visit a website or to install anything. Legal basis: legitimate interest in communicating with the users of software already installed (art. 6.1.f); switching News off is how you object to it, and it stops the request at once. Retention: ordinary server logs, as in §4.1.
5. Crash reports, in detail
What is in one
- A minidump — a snapshot of the application at the moment it crashed: what each part of it was running, the libraries it had loaded, the processor’s state and small pieces of the memory around them. It also names your operating system and processor, and on Linux and macOS the command line and environment variables the application was started with.
- The crashed session’s diagnostic files —
session.json,metadata.json, and the logseditor.log,engine.log,flutter.logandplatform.log. A log is sent as its last 2 MiB, and the dialog tells you when one was cut. - A manifest naming the files, their sizes, the version that sent them, the platform, and when the crash happened.
- A few annotations: the application’s version, whether you were on the home screen or inside a project (never which project), an identifier for that run so the dump can be matched with its logs, and the build type.
What is masked before you are even asked
Before the dialog opens, and before any project is opened in that session, the report is rewritten to replace: your username and home folder, the folder of every project the application knows about, e-mail addresses, IP addresses, and anything shaped like a password, a token or a key. The dialog offers a Show files button so you can open them and check.
What masking cannot promise
A memory snapshot may contain fragments of whatever text the application was working on at that moment. We say so in the dialog and we say so here, because “everything is anonymised” is a claim nobody can verify and therefore nobody should believe. No automatic rule can know that a passage you wrote is private.
Identifiers in a report
A crash report involves no account and no name. It does carry three identifiers, and it is more honest to list them than to call it anonymous without qualification:
- A report identifier — a random UUID for that one report.
- A session identifier — matching the dump to its own logs.
- A per-installation random identifier. The crash reporter generates a random number the first time it runs and keeps it on your machine, so that crashes coming from one installation can be told apart from crashes coming from different ones. It is not derived from your hardware, your name or anything else about you, and it is not used for any other purpose. It is nonetheless a stable pseudonymous identifier. Apart from the statistics identifier in §4.5, which exists only while you have statistics switched on, it is the only one anywhere in the application.
If you never send a crash report, none of these ever leaves your machine.
Recipient: Supabase, as our processor (§9). Retention: 12 months from receipt, then deleted. Your rights: because a report carries no account and no name, we usually cannot connect one to you — if you want a report you sent deleted, send us its identifier, which the application’s dialog shows you, and we will delete it.
6. The session log stays on your machine
The application keeps a log of each session in your operating system’s application-support directory. It records what the application did, with your username, home folder, project locations, e-mail addresses, IP addresses and anything shaped like a key replaced before anything is written to disk. Times are recorded in UTC, never your local time, so that a log does not carry a rough location.
There is no uploader for it. A session in which nothing went wrong is deleted automatically on the next launch; the rest are kept to a ceiling of twenty sessions and thirty days. The only way a session log reaches us is inside a crash report you chose to send.
The application also records, on your machine only, when it was last running — one timestamp, overwritten each time — which is how the next launch can tell that the previous one ended in a crash.
7. The website
Statistics. We use Vercel Web Analytics, which sets no cookie and stores nothing on your device. Visitors are distinguished by a hash derived from the request itself, which is discarded after 24 hours and cannot be reversed or used to recognise you on another day or another site. A recorded view may contain the time, the path, the referring page, filtered query parameters, an approximate location no finer than a city, your operating system and browser and their versions, and whether the device is a phone, a tablet or a desktop. Legal basis: legitimate interest in understanding whether the site works (art. 6.1.f).
Downloads. The installers are in a private repository. The site holds a read-only token, server-side, so it can ask GitHub what the current release is and where its files are; the token never reaches your browser. The download itself is a redirect — GitHub serves the bytes, so that request is between you and GitHub under their privacy statement, and their per-file tally is the only download figure anyone here has. Builds of the engine (§4.6) are published in a public repository on GitHub and are downloaded the same way.
Cookies. The site sets only cookies that are technically necessary, except the single first-party cookie belonging to the Buy Me a Coffee button, which is set only if you accept it in the banner. Decline and the script is never requested at all. You can change your mind on the privacy page at any time. Legal basis: consent (art. 6.1.a). There are no advertising, profiling or cross-site tracking cookies, no tag manager, no session recorder and no heat map.
Fonts are served from the site itself; no request is made to a font provider.
Forms. The waiting list and the satisfaction survey are hosted by Tally. What you type goes to Tally, not into a database of ours. Legal basis: consent (art. 6.1.a).
8. The hosted service — from the release that introduces it
None of this happens yet. It is stated in advance because a notice that appears at the same time as the processing is a notice nobody had the chance to read first.
| Purpose | Data | Legal basis | Retention |
|---|---|---|---|
| Creating and running an account | E-mail address, authentication credentials, account identifier | Performance of a contract (art. 6.1.b) | Until you delete the account; then §8.1 |
| Keeping accounts secure | The IP address and user agent of each sign-in and session, and a log of authentication events | Legitimate interest in the security of accounts (art. 6.1.f) | Sessions: until you sign out or they expire. The authentication log: 90 days |
| Recording acceptance of the Terms | Which document and version, and when; a one-way hash of the account’s e-mail address | Legitimate interest in being able to show what was agreed, and the defence of legal claims (art. 6.1.f, art. 17.3.e) | Survives deletion, minimised — §8.1 |
| Hosting your projects and media | Whatever you upload or synchronise | Performance of a contract (art. 6.1.b) | Until you delete the account; then §8.1 |
| Workspaces and membership | Account identifiers, roles, invitations | Performance of a contract (art. 6.1.b) | Life of the workspace, then as above |
| Real-time collaboration | Presence, cursor position, edits in flight | Performance of a contract (art. 6.1.b) | Not retained beyond the session, save as part of the saved project |
| Linking a purchase to an account | E-mail address, Polar order identifier | Performance of a contract (art. 6.1.b) | Life of the subscription, then 12 months |
| Support | E-mail address, what you wrote | Contract / legitimate interest (art. 6.1.b, 6.1.f) | 24 months from the last message |
Account e-mail — confirming an address, a sign-in link, a password reset, and the notices these terms oblige us to send — is delivered through Resend, our processor (§9), which handles the address and the message to deliver it.
Sign-up is protected against automated abuse by a proof-of-work check that your device computes and our own server verifies. No third-party CAPTCHA service is involved, and nothing about you is collected for it.
Billing. Subscriptions are sold by Polar, acting as Merchant of Record. Polar is the seller and processes your payment and billing data as an independent controller; we receive reports and payouts, not your full billing details, and for tax purposes we invoice Polar rather than you. See Polar’s own privacy notice for what it does with that data.
When you are the controller and we are the processor. If your workspace contains personal data about people who are not account holders — characters based on real people, contributor names in a document, anything else you put there — you are the controller of that data and we process it on your instructions. A data-processing agreement under art. 28 GDPR is available from legal@ripplefx.app.
8.1 Deleting your account
Article B10 of the Terms is the full account; in summary:
- Deletion is reversible for thirty days, during which you can sign back in to restore everything or export it. A checkbox on the deletion screen skips that window and begins erasure at once.
- Then we erase your account, the workspaces you own and everything in them, your memberships, collaboration records and support correspondence.
- Backups are the one honest limit. They are written on a cycle, are not rewritten to remove individual records, and expire on their own schedule within a maximum of 180 days. Until then a copy exists in a backup nobody reads.
- Content you put in somebody else’s workspace stays with that workspace, with your identity dissociated from it. Deleting your account cannot reach into another person’s project and remove pieces of it.
- One record survives, minimised: which version of which document an account accepted, and when, with a one-way hash of the account’s e-mail address in place of the address itself. It cannot be used to contact you or to rebuild any part of your account, and it can be matched to you only by someone who already knows your address — which is what lets either of us show what was agreed. It is kept under art. 17(3)(e) GDPR for as long as a claim under those terms could be brought, and for nothing else. Anything tax or accounting law obliges us to keep is kept for the period that law names.
9. Who else processes your data
We use the following service providers. The current list, kept up to date separately from this notice so that it can be updated without reissuing it, is at legal.ripplefx.app/subprocessors.
- Supabase — where a crash report you send is stored, where usage statistics are filed if you switch them on, and, from the release that introduces it, the database and authentication behind the hosted service. Acts as our processor.
- Vercel — hosting for this site, the documentation site and the marketing
site — and so for the update check, the news and the other requests in §4
that are made to
ripplefx.app— and the aggregated analytics described in §7. Acts as our processor. - Polar — Merchant of Record for subscriptions. Independent controller for payment and billing data.
- GitHub — hosts the release files, the published builds of the engine and the public support repository.
- Tally — the waiting-list and survey forms.
- Amazon Web Services — object storage for project media, from the release that introduces it.
- Resend — delivery of account e-mail, from the release that introduces the hosted service. Acts as our processor.
- Forward Email — receives e-mail sent to our
ripplefx.appaddresses, including whatever you send tolegal@such as a request under §11, and passes it on to us. It forwards rather than stores. Acts as our processor.
We do not sell personal data and do not share it with third parties for marketing.
10. Transfers outside the European Union
Some of these providers process data outside the European Economic Area, and the basis for the transfer is not the same one for all of them.
The United Kingdom is where our Supabase project runs, so a crash report you choose to send — and the usage statistics, if you switch them on — are processed there. The United Kingdom is covered by the European Commission’s adequacy decisions of 19 December 2025, which renewed its 2021 decisions until 27 December 2031: under article 45, a transfer to a country the Commission has found adequate needs no further safeguard. Standard Contractual Clauses are in our agreement with the provider in any case, so that the transfer still has a basis if that adequacy is ever withdrawn, suspended or allowed to lapse.
The United States is where the remaining providers outside the Union process: Vercel, GitHub, Resend, Polar and Forward Email. For each of them the transfer rests either on the EU–US Data Privacy Framework — the Commission’s adequacy decision of 10 July 2023 — where that provider is certified under it, or otherwise on the Commission’s Standard Contractual Clauses under article 46, together with the supplementary measures the relevant data-processing agreement sets out.
Because a provider’s infrastructure can abstract the region a particular operation runs in, the sub-processors list names each provider’s stated processing location and is what is kept current; their own notices carry the detail beyond that.
11. Your rights
Under articles 15–22 GDPR you have the right to: obtain access to your personal data and a copy of it; have inaccurate data corrected and incomplete data completed; have data erased in the cases the law provides; obtain restriction of processing; object to processing based on legitimate interest; receive your data in a structured, commonly used, machine-readable format and have it ported; and withdraw consent at any time, without affecting the lawfulness of processing before you did.
Withdrawing consent is meant to be as easy as giving it, and each of the three things you can consent to withdraws differently:
- The cookie — changeable at any time on the website’s privacy page.
- A crash report — consented to one report at a time, so there is nothing standing to withdraw. What you can ask for is the deletion of a report already sent, which §5 explains.
- Anonymous statistics — a switch in the application’s settings. Withdrawing stops collection and destroys the identifier, which also ends our ability to act on any other right over the rows already sent. §4.5 says why, and what to do if you want them deleted before you switch off.
Objecting to processing based on legitimate interest is a switch where the processing runs on its own: News and Engine updates, under Settings ▸ Updates, each stop their requests at once.
Deleting your account erases what we hold about you, on the terms in §8.1 — which is a wider action than the right to erasure and does not replace it. You can ask us to erase specific data without deleting your account, and you can delete your account without waiting for us.
To exercise any of these rights, write to legal@ripplefx.app. We will respond within one month, extendable by two further months for complex requests, and we will tell you if we need that extension.
You also have the right to complain to the Italian supervisory authority, the Garante per la protezione dei dati personali (garanteprivacy.it), or to the supervisory authority where you live.
12. California privacy rights (CCPA/CPRA)
This section applies to residents of California under the California Consumer Privacy Act as amended by the California Privacy Rights Act.
Categories collected. In the past 12 months we collect only: identifiers (an e-mail address, where you gave us one); commercial information (a subscription and an order reference, where you bought one); internet activity (the aggregated, cookieless page statistics in §7, and the application usage statistics in §4.5 if you switched them on); and device identifiers (the per-installation identifier inside a crash report you chose to send, and the statistics identifier while statistics are switched on). We do not collect your source material or your projects, and collect no usage statistics unless you switch them on.
No sale, no sharing. We do not sell personal information and do not share it for cross-context behavioural advertising, as those terms are defined by the CCPA/CPRA. We offer no financial incentive in exchange for personal information.
Sensitive personal information. We do not collect it. The per-installation crash identifier and the statistics identifier are pseudonymous device identifiers, used solely to tell installations apart, and are not used to infer anything about you.
Your rights. To know the categories and specific pieces of personal information collected; to delete it; to correct it; to opt out of sale or sharing (not applicable, as we do neither); and not to be treated differently for exercising any of them. Write to legal@ripplefx.app. We verify a request through the e-mail address associated with the account or the purchase; an authorised agent may submit one with proof of authorisation.
13. Is providing data mandatory?
For the application: no. It works entirely without giving us anything.
For the hosted service: an e-mail address and authentication credentials are necessary to have an account, and without them the service cannot be provided. Everything else — the waiting list, the survey, a crash report, usage statistics — is optional and refusing costs you nothing.
14. Changes to this notice
This notice is versioned major.minor. A minor version changes the
wording. A major version changes what is processed, on what basis or for
how long; it is published, with notice on the website and in the application,
before the release that begins the processing it describes.
This notice carries no effective date, and that is deliberate. You do not agree to a privacy notice — you are told something, and a notice is tied to the processing it describes rather than to a day of the month. Each section here says which release starts what it covers, and until that release there is nothing for it to describe.
It only ever looks forward. Being informed is something that happens before data is collected: arts. 13 and 14 oblige us to tell you at that point, and no later wording can retroactively have told you anything. So a new version of this notice never recasts processing that has already happened as though it had been disclosed. If something new is to be processed, this notice says so first, naming the release. And where the basis is your consent, a consent you gave to an older list of what is sent counts as no consent at all: the application treats it as switched off and asks you again.
A version that is not yet in force may be corrected. Until a version describes processing that has actually begun, it binds nothing and informs nobody, so a mistake in it is corrected where it stands. Once it is in force, the text at its permanent address never changes again.
Every version that has ever been in force stays published at its own permanent address. This one is at https://legal.ripplefx.app/v/privacy-2.0/.
ConnectingTheDots — William Karol Di Cioccio — VAT IT02224180667 — ripplefx.app