src/app/terms/page.tsx
Rama main · réplica de lectura del repositorio original.
import Link from "next/link";
import type { Metadata } from "next";
import { readLegalPageConfig } from "@/lib/api/config.server";
import {
OperatorAnswer,
OperatorBlock,
} from "@/components/legal/operator-block";
import {
BUILD_IDENTITY_PATH,
PROJECT_OPERATOR,
PROJECT_SOURCE_URL,
} from "@/lib/operator";
import { Card, CardContent } from "@/components/ui/card";
import { PAGE_COLUMN } from "@/components/ui/map-hero";
export const metadata: Metadata = {
title: "Terms of Service",
description:
"The terms that apply to this copy of OpenDiving: which parts speak for the operator who runs it, and which speak for the OpenDiving project.",
};
// Two speakers on one page, and the heading is what tells them apart. Sections 7,
// 9 and 10 speak for the OpenDiving project and name it in their headings;
// everything else speaks for the operator of this copy. Bare "OpenDiving" is the
// name of the software and never a party doing anything — collapsing the two back
// into one voice would hand the project's AGPL liability shield to an operator who
// never agreed to it.
//
// The two speakers are roles, not necessarily two different parties. The project
// may run a copy itself, and on that copy it holds both roles: it speaks through
// the operator's sections as well as its own, and is answerable as operator there
// like anyone else. So nothing on this page says the project never operates
// anything — the headings separate the roles, which is the only separation the
// liability shield needs, and it holds whether one party or two are standing in
// them. See "The terms page has two speakers" in DECISIONS.md.
export default async function TermsPage() {
// The operator block depends on the instance, and it adds a block rather than
// rewording a section: nothing short of the API answering `true` earns it, so a
// self-hosted copy - including one whose API is briefly down - renders these Terms
// exactly as they have always read. The other thing that does is a clause naming
// join links wherever registration is said to need an invitation, on the same rule,
// so a copy that has set none up carries no word about them. So does the grant for
// proposing to OpenDiving Commons, and every sentence it makes false, which are
// reworded inline and on any other copy read as they always have.
const { projectOperated, joinLinks, commonsPrimary } =
await readLegalPageConfig();
return (
<div className={PAGE_COLUMN}>
<div className="mb-6">
<h1 className="text-3xl font-bold text-foreground mb-2">
Terms of Service
</h1>
<p className="text-muted-foreground">Last updated: November 2026</p>
</div>
<Card>
<CardContent className="pt-(--card-pad)">
{projectOperated && (
<OperatorBlock
intro={
<>
The sections below leave several things to the operator of the
copy you are reading, because the software cannot decide them.
On this copy the operator has, and these are the answers. Each
names the section it belongs to; nothing here narrows what
those sections say.
</>
}
>
<OperatorAnswer question="The governing law — §12">
{PROJECT_OPERATOR.jurisdiction}. That is where the operator
named above primarily operates the Service, which is what §12
points at.
</OperatorAnswer>
<OperatorAnswer question="What this copy costs, and who may register — §2, §3">
Nothing, and only people who have been invited
{joinLinks && <> or who follow one of its join links</>}. This
copy is in a closed beta: it is free of charge, there is no paid
tier, and registration needs an invitation
{joinLinks && <> or a join link</>}, which is the state
§3’s second paragraph describes.
</OperatorAnswer>
<OperatorAnswer question="What is promised about availability — §8">
Nothing, and §8 stands exactly as written. This is a beta: the
operator may change it, take it down for maintenance, or stop
running it, and no uptime is promised.
</OperatorAnswer>
<OperatorAnswer question="What happens to your data if the beta ends — §8, §11">
You are told before anything is deleted. The operator will email
the address on each account, and the export in Settings —
the one §6 says needs nobody’s permission — keeps
working for at least 90 days from that message. Accounts and
everything in them are deleted once that window closes, the same
way §11 and the Privacy Policy’s §7 describe a deletion
you ask for yourself.
</OperatorAnswer>
<OperatorAnswer question="The source of what is running here — §7, AGPLv3 section 13">
§7 says that offer is the operator’s to make. Here it is.
The complete source of the version running on this copy is
available on request from{" "}
<a
href={`mailto:${PROJECT_OPERATOR.contactEmail}`}
className="underline hover:text-muted-foreground"
>
{PROJECT_OPERATOR.contactEmail}
</a>
, and in the project’s public repositories at{" "}
<a
href={PROJECT_SOURCE_URL}
target="_blank"
rel="noreferrer"
className="underline hover:text-muted-foreground"
>
github.com/opendiving
</a>
. The request is the route that works whatever this copy is
running, which is why it is written first. Which build is
running is not a guess:{" "}
<code className="rounded bg-muted px-1 py-0.5 font-mono text-sm">
{BUILD_IDENTITY_PATH}
</code>{" "}
reports a{" "}
<code className="rounded bg-muted px-1 py-0.5 font-mono text-sm">
commit
</code>{" "}
beside its{" "}
<code className="rounded bg-muted px-1 py-0.5 font-mono text-sm">
version
</code>
, and the commit is what identifies the source, because images
are published on every change to the project’s main branch
as well as on a release and so share one version between them. A{" "}
<code className="rounded bg-muted px-1 py-0.5 font-mono text-sm">
commit
</code>{" "}
reading{" "}
<code className="rounded bg-muted px-1 py-0.5 font-mono text-sm">
unknown
</code>{" "}
means a build that did not come from the project’s own
publishing, and then the request above is the way to get the
source.
</OperatorAnswer>
</OperatorBlock>
)}
<div className="prose max-w-none">
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
1. Acceptance of Terms
</h2>
<p className="text-foreground mb-4">
OpenDiving is open-source software for logging dives. Anyone can
download it and run their own copy, and these Terms ship with
the software, so they describe <strong>this</strong> copy
— the one you are reading them on. By using it (“the
Service”) you agree to them. If you do not, please do not
use this copy.
</p>
<p className="text-foreground mb-4">
Two roles appear on this page, and it keeps them apart because
they do not owe you the same things:
</p>
<ul className="list-disc list-inside text-foreground mb-4 space-y-2">
<li>
<strong>The OpenDiving project</strong> — the people who
write the software. Authorship on its own gives the project
nothing here: where it is not the one running this copy, it
runs no servers for it, receives no data from it, and never
sees what you log here.
</li>
<li>
<strong>The operator of this copy</strong> — whoever
installed OpenDiving on the machine serving you this page and
runs it. They decide who may sign up, where the data sits,
what it costs if anything, and whether the Service is still
here tomorrow.
</li>
</ul>
<p className="text-foreground mb-4">
Those are two roles rather than necessarily two parties, and one
party can hold both. The OpenDiving project may run a copy of
its own, and on such a copy it is the operator as well as the
author — bound by everything these Terms say of the
operator, and speaking through those sections in that role. What
never merges is the roles themselves: the sections below keep
them apart whoever is standing in them.
</p>
<p className="text-foreground mb-4">
Every section below speaks for the operator of this copy unless
its heading says otherwise, and “we” in those
sections means the operator. Three sections say otherwise: 7, 9
and 10 speak for the OpenDiving project and name it in their
headings. Section 5 is the operator’s apart from what it
says about the OpenDiving project, which names the project where
it does. Where the word <em>OpenDiving</em> stands alone
anywhere on this page, it is the name of the software and not a
party doing anything.
</p>
<p className="text-foreground mb-4">
If you are the one running this copy, that phrase —{" "}
<em>the operator of this copy</em> — is you, and it is
written out wherever a sentence here turns on something only you
can answer for. Searching the page for it is the quickest way to
find what is yours to stand behind or to replace with your own;
the rule above is what settles anything it misses.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
2. Description of Service
</h2>
<p className="text-foreground mb-4">
{commonsPrimary
? "This copy of OpenDiving is a dive log that keeps what you enter to yourself, and the place where OpenDiving Commons, a public pool of dive sites, is edited. The software lets you:"
: "This copy of OpenDiving is a private dive log. The software lets you:"}
</p>
<ul className="list-disc list-inside text-foreground mb-4 space-y-2">
<li>
Log dives, by hand or from a file exported by a dive computer
</li>
<li>
Keep your own list of dive sites and plan trips around them
</li>
{commonsPrimary && (
<li>
Propose a dive site of yours, or a change to a Commons site,
for OpenDiving Commons, which a reviewer accepts or declines
</li>
)}
<li>Track your gear and when it is due for service</li>
<li>
Record your diving certifications and the courses behind them
</li>
<li>
Keep the dive centers, shops and places you stay at once, and
name them from your dives, courses and trips
</li>
<li>
Keep the people you dive with once — buddies, guides,
instructors — and name them from your dives, trips and
courses
</li>
<li>
Keep the details a dive shop asks for at the desk, and print a
summary of them to hand over, or share it as a link that works
for a day
</li>
<li>
Note the species you saw, from public registers of marine life
</li>
</ul>
<p className="text-foreground mb-4">
What it does not do is worth stating, because a page like this
one usually claims otherwise: there are no public profiles, no
feeds, no forums,{" "}
{commonsPrimary
? "nothing one diver can post for another"
: "no comments"}
, no public ratings and no photo sharing. The rating you give a
dive is part of your own log. The people you record are private
records of yours, not connections between accounts.{" "}
{commonsPrimary
? "An account on this copy gives its holder no view of what you enter, apart from an administrator's, which reads what you propose for OpenDiving Commons."
: "An account on this copy gives its holder no view of anything you enter."}{" "}
This copy shows one person to another in{" "}
{commonsPrimary ? "four" : "three"} cases only: an invitation,
which is about your name rather than about anything you entered;
a check-in link you make, which shows your check-in page to
whoever holds it, account or not; {!commonsPrimary && "and "}a
person you link to an account here, which shows you that
account’s current username and puts its identifier in your
own export
{commonsPrimary &&
"; and a proposal for OpenDiving Commons, which shows what you proposed and your name to whoever reviews it, and publishes what is accepted, without your name"}
. Section 5 says exactly what each is, and what follows from the
rest.
</p>
<p className="text-foreground mb-4">
Whether this copy costs anything, who may register for it, and
how long it keeps running are decisions for the operator of this
copy, not for the software. The software is free in the sense
section 7’s licence means, which says nothing about what
an operator charges.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
3. User Accounts and Registration
</h2>
<p className="text-foreground mb-4">
Using this copy for anything beyond the pages you can read now
needs an account. You agree to:
</p>
<ul className="list-disc list-inside text-foreground mb-4 space-y-2">
<li>
Register with an email address you actually control — it
is how you sign in and how the operator of this copy reaches
you
</li>
<li>
Keep that mailbox secure. There is no password here: you sign
in with a link or a code sent to your email, with a passkey,
or — where this copy offers it — with Google. So
whoever can read that mailbox, use that passkey, or get into
that Google account can sign in as you. Keep any API key you
make the same way: whoever holds one can act as you, within
what that key allows, until it expires or you revoke it
</li>
<li>
Tell the operator of this copy promptly if you think someone
else has got into your account
</li>
<li>
Accept responsibility for what is done under your account
</li>
</ul>
<p className="text-foreground mb-4">
Where the operator of this copy has closed it to new accounts,
registering also needs an invitation, and the address you
register with must be the one that was invited, unless you came
by a member’s invite link
{joinLinks ? (
<>
{" "}
or by one of the join links the operator has published,
either of which lets in whoever follows it
</>
) : (
<>, which lets in whoever follows it</>
)}
. The exception is the very first account on a copy that has
none: whoever signs in first is its operator, and needs no
invitation to do so.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
4. Safety and Diving Responsibilities
</h2>
<div className="rounded-md border border-warning/40 bg-warning/10 p-4 mb-4">
<p className="font-medium text-warning">
<strong>Important Safety Notice:</strong> OpenDiving is
software for logging dives. It does not provide diving
instruction, safety advice, or emergency services.
</p>
</div>
<p className="text-foreground mb-4">
You acknowledge and agree that:
</p>
<ul className="list-disc list-inside text-foreground mb-4 space-y-2">
<li>Diving is an inherently risky activity</li>
<li>
You are solely responsible for your diving safety and
decisions
</li>
<li>
You will only dive within your certification and experience
level
</li>
<li>
You will follow proper diving safety protocols and procedures
</li>
<li>
Nothing this software works out or displays — depths,
times, gas figures, exposure — is a substitute for your
training, your dive computer and your own judgement
</li>
<li>
{commonsPrimary
? "What you type in, and what is imported from a dive computer, is kept as it arrived, and nobody checks it, with one exception: a reviewer reads what you propose for OpenDiving Commons, and may correct it or decline it. Accepting a record says it belongs in the pool, and nothing about whether a site is safe to dive"
: "What you type in, and what is imported from a dive computer, is stored as given. Nobody checks it, and nothing here corrects it"}
</li>
<li>
Neither the OpenDiving project nor the operator of this copy
is liable for diving-related injuries or incidents: section 9
is the project’s position, section 8 the
operator’s
</li>
</ul>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
5. User Content and Conduct
</h2>
<p className="text-foreground mb-4">
What you enter into this copy — dives, dive drafts, sites,
trips, gear, courses, certifications, contacts, people, tags,
your check-in details, notes, and the files you import —{" "}
{commonsPrimary
? "is your responsibility, and stays yours unless you dedicate it to the public domain by proposing it for OpenDiving Commons."
: "is yours, and you are responsible for it."}{" "}
You agree not to use this copy to hold or send:
</p>
<ul className="list-disc list-inside text-foreground mb-4 space-y-2">
<li>
Anything unlawful where you are, or where the operator of this
copy is
</li>
<li>
Anything you have no right to hold, including other
people’s personal data you have no basis for keeping and
material that infringes someone else’s rights
</li>
<li>
Anything aimed at breaking into, overloading or disrupting
this copy, or at working around the limits it puts on requests
</li>
</ul>
<p className="text-foreground mb-4">
Three things this copy expects you to hold can be somebody
else’s data, and holding any of them is inside the line
above rather than an exception to it. A person is the plainest
case: a buddy’s or an instructor’s name, and
whatever else you choose to note, kept as your own record of who
you dived with. An emergency contact is a name and a number kept
so a dive shop can reach someone if you get into trouble. A
contact is usually a business’s own listing — the
number and address on its sign — but it can be a person,
the friend whose flat you stayed in, kept as your own record of
where you dived and slept. Each is a basis for keeping what you
enter. Telling a person you have written them down here is yours
to do, not this copy’s.
</p>
<p className="text-foreground mb-4">
{commonsPrimary
? "Every right you have in what you enter stays yours, apart from what you dedicate by proposing it, as the paragraphs below say."
: "You keep every right you have in what you enter."}{" "}
Nothing here gives the OpenDiving project any rights in your
content as the software’s author — writing a program
grants no claim on what is entered into a copy of it, and where
the project is not the one running this copy it receives no data
from it and never sees what you log. Where the project is the
one running it,{" "}
{commonsPrimary
? "it holds what the paragraphs below grant the operator, may use what has been dedicated to the public domain as anyone may, and holds nothing beyond that."
: "it holds what the next paragraph grants the operator and nothing beyond that."}
</p>
<p className="text-foreground mb-4">
{commonsPrimary
? "Proposals aside, you grant the operator of this copy no more than what is technically needed to run the Service for you"
: "You grant the operator of this copy only the permission technically needed to run the Service for you"}{" "}
— to store your entries, show them back to you, and
include them in exports you ask for.{" "}
{commonsPrimary
? "Nothing you enter is published, shared with other users, or shown to anyone else by this software, except through a check-in link you make or a proposal you send for OpenDiving Commons."
: "Your entries are not published, shared with other users, or shown to anyone else by this software, except through a check-in link you make."}{" "}
Printing your check-in summary and handing it to a dive shop is
you showing your own entries to someone, not this copy showing
them, and the permission above is unchanged by it.{" "}
{commonsPrimary
? "The next four paragraphs are the four things"
: "The next three paragraphs are the three things"}{" "}
this copy does show one person to another: an invitation, which
is not an entry; a check-in link, which is;{" "}
{!commonsPrimary && "and "}a person linked to an account, which
shows you something of theirs rather than anything of yours
{commonsPrimary &&
"; and a proposal, which is an entry, and the one thing here that can end up public"}
.
</p>
<p className="text-foreground mb-4">
Where this copy is invite-only and you invite somebody to it,
you grant the operator the further permission that act needs,
and only that: to tell the address you invited that <em>you</em>{" "}
invited them, naming you, and to tell you whether that address
went on to register here; and, where you make an invite link, to
show your name to whoever opens it, and to show you the name on
the account of anyone who creates one through it. Nothing you
have logged is involved — no dive, site, trip, gear item,
course, certification, contact, person or tag — and nobody
you have not invited learns anything either way, except that
whoever holds your invite link, however it reached them, sees
your name. And where you create your account through a
member’s invite link, you grant the operator the
permission that needs, and only that: to show that member the
name on your account, as it is and as you change it, for as long
as both accounts exist — never your address, and nothing
you log. The privacy policy’s section 4.8 sets out the
same in its own register.
</p>
<p className="text-foreground mb-4">
Where you make a check-in link, you grant the operator the
further permission that act needs, and only that: to show your
check-in page — the details, figures and card fronts it
prints — to whoever holds the link, until it expires a day
after you made it or you revoke it or make another. That is this
copy showing your entries to someone, at your request, and
nothing else you have logged is involved. The privacy
policy’s section 4.9 sets out the same in its own
register.
</p>
<p className="text-foreground mb-4">
Where you link a person you recorded to an account on this copy
— by typing its username, or by importing a file that
names it — you grant the operator the further permission
that act needs, and only that: to tell you whether an account
with that username exists here, to show you its current username
beside your person for as long as the link stands, and to write
that account’s identifier, which also encodes when the
account was created, into the exports you ask for. Nothing you
have logged is shown to that account, and it is told nothing
either way. The same holds the other way round: anyone here who
types your username can link a person to your account, and
learns that it exists, its current username and its identifier,
and nothing else. The privacy policy’s section 4.10 sets
out the same in its own register.
</p>
{commonsPrimary && (
<p className="text-foreground mb-4">
Where you propose a dive site of yours, or a change to a
Commons site, for OpenDiving Commons, you grant the operator
the further permission that act needs, and only that: to show
whoever reviews it what you proposed, your message, the name
on your account and how many of your proposals have been
accepted and declined; to correct it before accepting it; to
keep the proposal, tied to your account, until your account
goes; and to publish what is accepted, in the pool and in the
public copies of it. The words you tick go further than a
permission. In them you say that what you propose is from your
own diving and is not copied from another database, app or
publication, and you dedicate it to the public domain under{" "}
<a
href="https://creativecommons.org/publicdomain/zero/1.0/"
target="_blank"
rel="noreferrer"
className="underline hover:text-muted-foreground"
>
CC0 1.0
</a>
, which gives up your rights in it, for everyone, as far as
the law allows. What is accepted is public, never says who
proposed it, and stays if you delete your account; a change
accepted into a record from another source leaves that record
under its source’s licence. What is declined or
withdrawn publishes nothing, and a decline always comes with a
reason. Anyone can report a Commons record to the operator of
this copy, by the way section 13 gives, and a report is
answered by changing the record; a record cannot yet be
removed. The privacy policy’s section headed{" "}
<em>Proposing for OpenDiving Commons</em> sets out the same in
its own register.
</p>
)}
<p className="text-foreground mb-4">
That permission is deliberately no wider than what running the
Service takes, and the OpenDiving project holds itself to
keeping it that way: if a version of the software ever adds a
way to show what you entered to someone else, that feature
arrives with a permission of its own written here and a section
of its own on the privacy page, rather than leaning on this one.{" "}
{commonsPrimary
? "The invitation, check-in link, linking and proposal grants above are that rule being kept, not exceptions to it."
: "The invitation, check-in link and linking grants above are that rule being kept, not exceptions to it."}
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
6. Privacy and Data Protection
</h2>
<p className="text-foreground mb-4">
What this copy collects, what it keeps in your browser, how long
it keeps any of it, and who is answerable for it are set out in
the{" "}
<Link
href="/privacy"
className="underline hover:text-muted-foreground"
>
Privacy Policy
</Link>
, which describes this copy the same way these Terms do.
</p>
<p className="text-foreground mb-4">
Two things worth knowing without reading it:{" "}
{commonsPrimary
? "exporting what you have entered, your proposals for OpenDiving Commons aside,"
: "exporting everything you have entered"}{" "}
and deleting your account are both buttons in Settings, and
neither needs anyone’s permission.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
7. Open Source License (the OpenDiving project)
</h2>
<p className="text-foreground mb-4">
This section is about the software rather than about this
copy’s operation, and it speaks for the OpenDiving
project. OpenDiving is published under the GNU Affero General
Public License, version 3. Under it anyone may run, study, copy,
modify and redistribute the software, on the conditions the
licence sets out — chiefly that a derived version carries
the same licence and stays source-available.
</p>
<p className="text-foreground mb-4">
The licence also gives you something as someone merely using a
copy over a network: if the operator of this copy has modified
OpenDiving, section 13 of the AGPLv3 requires them to offer you
the source of their modified version. That offer is the
operator’s to make rather than the author’s —
including where the project runs this copy, and so owes it as
operator. The project publishes its own source publicly, and
that is not necessarily what is running here.
{projectOperated && (
<>
{" "}
On this copy the offer is made, under{" "}
<em>Who Runs This Copy</em> at the top of this page, along
with what identifies the build running here. The public
repositories this section speaks of are named there too.
That offer still leads with the request rather than the
link, because what section 13 owes you is the source of the
version running here, which a repository on its own does not
pin and the commit named there does.
</>
)}
</p>
<p className="text-foreground mb-4">
The licence text ships with the software and is the authority on
all of this. Nothing in these Terms adds to it or takes anything
away from it.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
8. Service Availability and Modifications
</h2>
<p className="text-foreground mb-4">
Whether this copy is available, and for how long, is the
operator of this copy’s to decide. They may modify or
discontinue features, take it down for maintenance, or stop
running it altogether. Nothing in the software guarantees
uptime, and the OpenDiving project promises none of it as the
software’s author: where it does not run this copy it
could not keep this one up if it wanted to, and where it does,
the promise would be the operator’s to make and it has
made none.
</p>
<p className="text-foreground mb-4">
These Terms are part of the software, so they change when the
software changes and ship in the same release. There is no
mechanism here that emails anyone about a change to them, and
this page is not going to promise one it does not have. What
exists instead is the software’s public history, where
every earlier version of this page can be read; which version
you are reading depends on which release of OpenDiving this copy
is running.
</p>
<p className="text-foreground mb-4">
This copy of OpenDiving is provided as-is by its operator, who
is responsible for its operation and for the data it holds. The
operator may replace this paragraph with its own terms.
{projectOperated && (
<>
{" "}
This copy’s operator has not replaced it, and has said
under <em>Who Runs This Copy</em> what it promises about
availability and what happens to your data if this beta
ends.
</>
)}
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
9. Limitation of Liability (the OpenDiving project)
</h2>
<p className="text-foreground mb-4">
This section speaks for the OpenDiving project, not for the
operator of this copy. To the maximum extent permitted by law,
the OpenDiving project, its contributors, and its copyright
holders shall not be liable to you for:
</p>
<ul className="list-disc list-inside text-foreground mb-4 space-y-2">
<li>
Any indirect, incidental, special, or consequential damages
</li>
<li>Loss of data, profits, or business interruption</li>
<li>Diving accidents or injuries of any kind</li>
<li>
Anything you decided on the strength of what the Service
showed you
</li>
<li>
Content entered into any copy of OpenDiving, and interactions
between the users of a copy where an operator has enabled any
</li>
</ul>
<p className="text-foreground mb-4">
This limitation is agreed for the benefit of the OpenDiving
project and its contributors. The contributors are not parties
to these Terms and rely on this section as third parties; so
does the project itself, wherever it is not the one running this
copy. Where it is, it is a party in the operator’s role,
and this section still limits only what it owes you as the
software’s author. It adds to, and does not narrow,
sections 15 to 17 of the AGPLv3.
</p>
<p className="text-foreground mb-4">
The operator of this copy speaks in a different role and says
nothing here, and that holds even where the project is the one
running this copy: what is limited above is the author’s
liability, never an operator’s. Their position is the last
paragraph of section 8, and it is theirs to replace.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
10. Indemnification (the OpenDiving project)
</h2>
<p className="text-foreground mb-4">
You agree to indemnify and hold harmless the OpenDiving project
and its contributors — not the operator of this copy
— from any claims, damages, or expenses arising from your
use of this copy of OpenDiving or your violation of these Terms.
</p>
<p className="text-foreground mb-4">
This section does not cover the operator of this copy. They are
not indemnified by it, and it reaches the project no further
where the project is the one running this copy: what is
indemnified is the writing of the software, never the running of
a copy of it. An operator who wants an indemnity has to ask for
one in terms of their own.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
11. Termination
</h2>
<p className="text-foreground mb-4">
The operator of this copy may suspend or close your account for
a breach of these Terms, and may stop running this copy
altogether. You can delete your own account at any time in
Settings; the Privacy Policy says what happens to your data when
you do.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
12. Governing Law
</h2>
<p className="text-foreground mb-4">
These Terms shall be governed by and construed in accordance
with the laws of the jurisdiction where the operator of this
copy primarily operates the Service, without regard to conflict
of law provisions.
{projectOperated && (
<>
{" "}
On this copy that is {PROJECT_OPERATOR.jurisdiction}, named
with the operator under <em>Who Runs This Copy</em> at the
top of this page.
</>
)}
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold text-foreground mb-4">
13. Contact Information
</h2>
<p className="text-foreground mb-4">
For anything to do with this copy — your account, your
data, {commonsPrimary && "a report about a Commons record, "}
what these Terms mean for you, or the Service being down —
the person to ask is whoever runs this copy of OpenDiving. The{" "}
<Link
href="/support"
className="underline hover:text-muted-foreground"
>
support page
</Link>{" "}
is how this copy offers to reach them.
</p>
<p className="text-foreground mb-4">
For a defect in the software itself — a bug, or a sentence
on a page like this one that the software does not live up to
— the OpenDiving project is who to tell, in its public
source repository. As the software’s author the project
cannot answer for how a copy it does not run is run: it has no
access to that copy and holds none of the data in it. Where the
project is this copy’s operator too, questions about how
this copy is run still go the way the paragraph above says, not
to the repository.
</p>
<p className="text-foreground mb-4">
There is deliberately no project address printed here.{" "}
{projectOperated && (
<>
None, that is, for the project as the software’s
author: the address under <em>Who Runs This Copy</em>{" "}
belongs to this copy’s operator, which is the role
that can act on what follows.{" "}
</>
)}
A question about your own account belongs to whoever runs this
copy, and the support page above is how to reach them — on
a copy the project runs itself, that page reaches the project in
the role that can act. Sent to the author instead, such a
question reaches people who cannot. How quickly the operator of
this copy answers, and whether they do, is theirs to say rather
than this page’s.
</p>
</section>
</div>
<div className="mt-8 pt-8 border-t border-border">
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between">
<p className="text-sm text-muted-foreground">
These Terms are effective as of November 2026 and apply to this
copy of OpenDiving.
</p>
<Link
href="/"
className="mt-4 sm:mt-0 text-sm font-medium text-foreground underline hover:text-muted-foreground"
>
Back to OpenDiving
</Link>
</div>
</div>
</CardContent>
</Card>
</div>
);
}