diff --git a/AGENTS.md b/AGENTS.md index f4b4189..98f02eb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -43,6 +43,20 @@ Ground truth for saved drills: use a `google_apis` (non-Play) emulator image so - `context/` — app state (React context) - `utils/`, `types/`, `constants/`, `hooks/` — what they say +## Releases + +- Versions live in **app.json only** (`expo.version` + `expo.android.versionCode`); CI's `expo prebuild` stamps them over build.gradle, so bumping build.gradle alone gets silently reverted. +- Flow: merge PRs to main → bump app.json on main (`chore(release): bump to X.Y.Z (versionCode N)`) → create tag `vX.Y.Z` targeting main (GitHub release) → the tag run builds **and deploys to the Play internal track** via fastlane. Push-to-main runs build only. +- Every uploaded artifact needs a fresh, higher `versionCode` — a failed upload does *not* consume its code. +- Play rejects artifacts that declare the BILLING permission without a packaged Billing Library ≥ 6.0.1 (react-native-purchases satisfies this). + +### Production-day checklist (deliberately deferred until first prod rollout) + +- Play listing **App name → `Featherwork: Badminton Drills`**, plus descriptions and `store-assets/` screenshots/feature graphic/promo video (kept out of the listing until production on purpose). +- App content forms: Data safety (collects Purchase history + device IDs, nothing shared), content rating questionnaire, ads = none, target audience 13+. +- Privacy policy URL: `https://badmlabs.github.io/privacy.html`. +- Glance at the Pre-launch report, then promote the current internal release to Production (staged rollout: start at 20%, go 100% after ~48 quiet hours). + ## Conventions - Commit messages: Conventional Commits, `type(scope): description`. diff --git a/components/SettingsPanel.tsx b/components/SettingsPanel.tsx index ebb3698..013a52d 100644 --- a/components/SettingsPanel.tsx +++ b/components/SettingsPanel.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useState } from 'react'; import { Image, + Linking, Modal, ScrollView, StyleSheet, @@ -807,6 +808,23 @@ export function SettingsPanel({ )} + + About + + Linking.openURL('https://badmlabs.github.io/privacy.html').catch(() => {}) + } + accessibilityLabel="Privacy policy" + > + + Privacy Policy + + ); @@ -1408,6 +1426,23 @@ const styles = StyleSheet.create({ marginTop: spacing.xs, marginBottom: 7, }, + aboutRow: { + flexDirection: 'row', + alignItems: 'center', + gap: spacing.sm, + backgroundColor: palette.card, + borderWidth: 1, + borderColor: palette.cardBorder, + borderRadius: radii.md, + paddingVertical: 11, + paddingHorizontal: spacing.md, + }, + aboutRowText: { + ...sora('600'), + flex: 1, + color: palette.textPrimary, + fontSize: 13, + }, modeCard: { flexDirection: 'row', gap: 5,