Imported from mrzhiin/seekmate (
AGENTS.md). Install upstream withnpx skills add mrzhiin/seekmate. Copyright stays with the author.
AGENTS.md
Repo shape
- Single-package Expo + React Native app for Android only.
- Real boot flow is
index.ts→app/index.tsx→stack/rootStack.tsx. app/holds screens,stack/owns route registration/types,state/holds app-wide providers,lib/is shared infra, andstore/is persisted Zustand state.- Route registration and typing are centralized in
stack/screen.ts,stack/screenName.ts, andstack/screenParams.ts. app/singinis the real route folder, whilestack/screenName.tscontains bothScreenName.SinginandScreenName.Signin; do not “fix” the spelling unless you update every reference.- Use the
@/*alias fromtsconfig.jsoninstead of long relative imports. app/index.tsxis provider-heavy and importsglobal.cssonce at the root.state/web/index.tsxalso mountsAutoCheckInandWebRunneras side effects, so web-service changes can affect app startup.
Commands
- Package manager is
pnpm; there is no workspace file. - App scripts:
pnpm startpnpm prebuildpnpm buildpnpm build:apkpnpm build:apk:debug
- There are no repo scripts for lint, test, or typecheck. Use:
pnpm exec biome check .pnpm exec tsc --noEmit
- Android build flow is
pnpm prebuildfirst, thenpnpm buildorpnpm build:apk. - Current baseline:
pnpm exec biome check .passes, whilepnpm exec tsc --noEmitcurrently fails instack/rootStack.tsxon theScreens.map(...)navigator typing; do not assume that pre-existing error came from your change.
Env and build gotchas
- All app scripts load env through
dotenvx run -f .env.local .env --ignore=MISSING_ENV_FILE -- ...; Expo default env loading is intentionally disabled. .env.exampleusesAPP_PUBLIC_*names plusEXPO_NO_DOTENV=1andEXPO_NO_CLIENT_ENV_VARS=1.- If you add or rename an env, update all three:
app.config.ts,types/expoExtra.ts, andlib/config/index.ts. - Release signing is injected by
plugins/withSignedPlugin.tsonly when allAPP_RELEASE_*vars are set. - The Sentry Expo plugin is enabled only when
SENTRY_AUTH_TOKEN,SENTRY_PROJECT, andSENTRY_ORGANIZATIONare present. - CI release builds (
.github/workflows/android-release.yml) use pnpm 10 + Node 24, then runpnpm install --frozen-lockfile→pnpm run prebuild→pnpm run build→pnpm run build:apk. The workflow uploads both APK and AAB artifacts, but only APKs are attached to the GitHub Release.
Native and tooling
pnpm prebuildmutates native projects.android/andios/are gitignored here, so treat native output as generated unless the user explicitly wants native files inspected or regenerated.- Styling is Tailwind v4 + Uniwind.
app/index.tsximportsglobal.cssonce at the root;metro.config.cjsgeneratestypes/uniwind-types.d.ts, andbiome.jsonexcludes that file. - Babel only adds
react-native-worklets/plugin; keep that in mind before changing animation/worklets setup. - If you are working on release packaging, CI runs
pnpm exec tsx scripts/rename-apk.tsafterbuild:apk, and it expectsandroid/app/build/outputs/apk/release/output-metadata.jsonto exist.
