Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down
35 changes: 35 additions & 0 deletions components/SettingsPanel.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from 'react';
import {
Image,
Linking,
Modal,
ScrollView,
StyleSheet,
Expand Down Expand Up @@ -807,6 +808,23 @@ export function SettingsPanel({
</View>
</TouchableOpacity>
)}

<Text style={styles.sectionLabel}>About</Text>
<TouchableOpacity
style={styles.aboutRow}
onPress={() =>
Linking.openURL('https://badmlabs.github.io/privacy.html').catch(() => {})
}
accessibilityLabel="Privacy policy"
>
<MaterialCommunityIcons
name="shield-lock-outline"
size={17}
color={palette.textSecondary}
/>
<Text style={styles.aboutRowText}>Privacy Policy</Text>
<MaterialCommunityIcons name="open-in-new" size={14} color={palette.textMuted} />
</TouchableOpacity>
</>
);

Expand Down Expand Up @@ -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,
Expand Down
Loading