mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 08:27:04 +00:00
docs: expand Child Safety Standards for Play Store compliance
Google Play rejected v446 because the published Child Safety Standards did not explicitly prohibit CSAE, name a child-safety point of contact, describe the in-app reporting mechanism, or reference the app/developer as listed on Play. Rewrites the section in PRIVACY.md to: - Explain that Amethyst is a client, not a host: third-party relays host content and are responsible for moderation and any NCMEC reporting obligations (e.g. 18 U.S.C. §2258A). - Explicitly prohibit CSAE/CSAM in the app. - Document the in-app tools users have: Report Post, Report Account, Block Post/Account, Block Relay (NIP-51 Blocked Relay List), Mute Words/Hashtags. - Describe the escalation path: report in-app, block the hosting relay, report to NCMEC CyberTipline / INHOPE, optionally email the developer. - Provide a child-safety point of contact (amethyst@vitorpamplona.com) with realistic scope of action (forward to relay ops, drop the relay from default lists). - Reference the app name "Amethyst" and developer "Vitor Pamplona" as required by the checklist. Also surfaces the document from inside the app by adding an "About & Legal" section to Settings with two items: Privacy Policy and Child Safety Standards (anchor link to the section).
This commit is contained in:
+50
-2
@@ -33,9 +33,57 @@ The information you share is publicly visible to anyone reading from relays that
|
||||
|
||||
Information shared on Nostr should be assumed permanent for privacy purposes. There is no way to guarantee deleting or editing any content once posted.
|
||||
|
||||
## Child safety standards
|
||||
## Child Safety Standards
|
||||
|
||||
Amethyst does not knowingly collect information from children. The app has no age verification because it collects no personal information from anyone. The application is 17+. We rely on Google Play's age verification to make sure the user downloading the app is an adult. Since we do not control which relays the user connects to, there is no content moderation beyond the standard block post, block account, and report post and/or account that will hide the content from the user.
|
||||
Amethyst, published on Google Play by Vitor Pamplona, is committed to protecting children from sexual abuse and exploitation. These standards apply to the Amethyst app for Android.
|
||||
|
||||
### How Amethyst Works (and Why That Matters Here)
|
||||
|
||||
Amethyst is a decentralized Nostr client. **The app itself does not host, store, or moderate any user-generated content.** All content is hosted by independent third-party servers called **relays** that the user freely chooses to connect to. Amethyst is a viewer and a publisher; it has no central database, no upload servers, and no ability to delete content from the network. Content moderation, takedowns, and legal reporting are the responsibility of the **relay operators** who actually host the content.
|
||||
|
||||
What Amethyst provides — and what these Standards cover — is (1) a clear prohibition of CSAE, (2) in-app tools that let users report content, hide content, and disconnect from abusive relays, and (3) a contact point for escalation.
|
||||
|
||||
### Prohibition of Child Sexual Abuse and Exploitation (CSAE)
|
||||
|
||||
Amethyst strictly prohibits the use of the app to create, upload, share, solicit, or distribute child sexual abuse and exploitation (CSAE) material, including child sexual abuse material (CSAM), in any form, or to groom, exploit, endanger, or otherwise harm minors. Users who use Amethyst for these purposes are in violation of these Standards and of the laws of essentially every jurisdiction.
|
||||
|
||||
### In-App User Feedback and Reporting Mechanism
|
||||
|
||||
Amethyst provides in-app mechanisms for users to flag, hide, and disconnect from harmful content:
|
||||
|
||||
- **Report Post** — use the dropdown menu on any note to report it as illegal content, nudity, impersonation, spam, profanity, or other violations. The report is published as a signed Nostr report event so that relay operators and other clients can act on it.
|
||||
- **Report Account** — open a user's profile and use the report action to flag the account, with the same publication behavior.
|
||||
- **Block Post / Block Account** — hide a note or a user locally on your device.
|
||||
- **Block Relay (NIP-51 Blocked Relay List)** — if a particular relay is hosting CSAE/CSAM or refuses to act on reports, add it to your Blocked Relay List so Amethyst will no longer fetch from or publish to it. This is the strongest tool the app provides: it cuts your client off from servers that won't moderate.
|
||||
- **Mute Words and Hashtags** — filter out unwanted content from your feeds.
|
||||
|
||||
### Addressing CSAM
|
||||
|
||||
Because Amethyst does not host content, CSAM cannot be removed by Amethyst — it can only be removed by the relay operator who is actually hosting it, and reported to authorities by that operator under the laws that apply to them (in the United States, 18 U.S.C. §2258A makes hosting providers — not viewer applications — the entities required to report to the National Center for Missing & Exploited Children).
|
||||
|
||||
If you become aware of CSAM accessible via Amethyst, please:
|
||||
|
||||
1. **Report the content in-app** (select "Illegal Content") so the report propagates to relays and other clients, and
|
||||
2. **Block the relay** that is hosting the content using the in-app Blocked Relay List, so your client disconnects from it, and
|
||||
3. **Report the relay and the material directly to the authorities** who have jurisdiction over the hosting provider — for content reachable from the United States that is the **National Center for Missing & Exploited Children (NCMEC) CyberTipline** at https://report.cybertip.org/. For other jurisdictions see INHOPE members at https://www.inhope.org/.
|
||||
4. **Optionally email the contact below** with the relay URL and event ID. We cannot remove the content from the relay, but we can amplify the report to other relay operators we know, and where appropriate we will recommend that the offending relay be removed from any default relay list shipped with Amethyst.
|
||||
|
||||
### Compliance with Child Safety Laws
|
||||
|
||||
Amethyst is built and distributed to comply with applicable child safety laws and regulations, including Google Play's Child Safety Standards policy. Where Amethyst itself is subject to a legal obligation (for example, as a distributor on Google Play), we will cooperate with lawful requests from child-safety authorities. Obligations that attach to the **hosting** of content (such as 18 U.S.C. §2258A NCMEC reporting in the U.S.) apply to the relay operators, not to the viewer application.
|
||||
|
||||
### Child Safety Point of Contact
|
||||
|
||||
Questions, reports of relays hosting CSAE/CSAM, or requests related to child safety on Amethyst should be sent to:
|
||||
|
||||
- **Name:** Vitor Pamplona (developer, Amethyst for Android)
|
||||
- **Email:** amethyst@vitorpamplona.com
|
||||
- **What we can do:** acknowledge the report, forward it to relay operators we are in contact with, and consider removing the offending relay from any default/suggested relay list shipped with Amethyst. We cannot delete content from third-party relays — that is the relay operator's responsibility.
|
||||
- **What you should also do:** report directly to NCMEC (https://report.cybertip.org/) or your local INHOPE hotline, who can compel the actual hosting provider to act.
|
||||
|
||||
### Age Rating
|
||||
|
||||
Amethyst is rated 17+. The app does not knowingly collect information from children and has no account-creation flow that targets minors. We rely on Google Play's age-gating to restrict downloads to users 17+.
|
||||
|
||||
## Terms of Use
|
||||
|
||||
|
||||
+28
@@ -42,6 +42,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -77,6 +78,7 @@ fun AllSettingsScreen(
|
||||
nav: INav,
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val uriHandler = LocalUriHandler.current
|
||||
val scope = rememberCoroutineScope()
|
||||
var showResetMarmotDialog by remember { mutableStateOf(false) }
|
||||
var isResettingMarmot by remember { mutableStateOf(false) }
|
||||
@@ -261,6 +263,32 @@ fun AllSettingsScreen(
|
||||
)
|
||||
}
|
||||
|
||||
SettingsSection(R.string.about_legal) {
|
||||
SettingsItem(
|
||||
title = R.string.privacy_policy,
|
||||
icon = MaterialSymbols.Lock,
|
||||
onClick = {
|
||||
runCatching {
|
||||
uriHandler.openUri(
|
||||
"https://github.com/vitorpamplona/amethyst/blob/main/PRIVACY.md",
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
SettingsDivider()
|
||||
SettingsItem(
|
||||
title = R.string.child_safety_standards,
|
||||
icon = MaterialSymbols.Shield,
|
||||
onClick = {
|
||||
runCatching {
|
||||
uriHandler.openUri(
|
||||
"https://github.com/vitorpamplona/amethyst/blob/main/PRIVACY.md#child-safety-standards",
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
SettingsSection(R.string.danger_zone, isDanger = true) {
|
||||
if (hasPrivateKey) {
|
||||
SettingsItem(
|
||||
|
||||
@@ -1318,6 +1318,8 @@
|
||||
<string name="posting_policy">Posting policy</string>
|
||||
<string name="privacy_policy">Privacy Policy</string>
|
||||
<string name="terms_and_conditions">Terms & Conditions</string>
|
||||
<string name="child_safety_standards">Child Safety Standards</string>
|
||||
<string name="about_legal">About & Legal</string>
|
||||
<string name="not_available_acronym">N/A</string>
|
||||
<string name="relay_error_messages">Errors and Notices from this Relay</string>
|
||||
<string name="relay_monitor_reports">Relay Monitor Reports</string>
|
||||
|
||||
Reference in New Issue
Block a user