CodeCanyon Item Docs

Spendpath

React Native Income, Expense & Subscription Tracker with Tamagui UI & AdMob. Zero-backend, Expo SDK 57, local storage, charts, notifications, and PDF/CSV export.

1. Prerequisites

  • Node.js 20+ and npm 10+
  • Expo CLI via npx expo (no global install required)
  • Android Studio / Xcode for device builds (optional for Expo Go)
  • EAS CLI for store builds: npm i -g eas-cli

2. Installation

npm install --legacy-peer-deps
npx expo start

Run these commands from the project root (the SpendpathApp folder after unzipping). Scan the QR code with Expo Go, or press a / use a USB or wireless Android device with ADB. For AdMob native ads, create a development or EAS build (see below).

3. What works in Expo Go vs a native build

FeatureExpo GoDev / EAS build
UI, income, expenses, subscriptions, chartsYesYes
Local persistence (AsyncStorage)YesYes
PDF / CSV export (incl. income)YesYes
Notifications (permission + schedule)LimitedFull
AdMob banners / interstitialsPlaceholder onlyReal ads
Persistence uses AsyncStorage so the app runs in Expo Go. No custom native storage module is required to ship Spendpath.

4. Income tracking

Income is a separate module from expenses. Use the Income tab or Dashboard quick action to add money-in entries.

  • Dedicated categories: Salary, Freelance, Business, Investment, Gift, Refund, Other
  • Stored separately as incomes in Zustand / AsyncStorage
  • Screens: IncomeScreen, IncomeFormScreen, IncomeCard
  • Routes: /(tabs)/income, /income/new, /income/[id]
  • Dashboard shows period income, net (income − spend), and recent income
  • Charts / PDF / CSV exports include income alongside expenses

5. Change App Name, Logo, Splash & Package ID

App name

  1. Update app.json → expo.name and expo.slug.
  2. Update display name in src/config/appConfig.ts → appName.

Logo & splash

  1. Replace assets/icon.png (1024×1024 recommended).
  2. Replace assets/logo-mark.png / assets/logo-mark.svg and splash assets.
  3. Replace Android adaptive icons under assets/.
  4. Adjust splash backgroundColor in app.json (default #0F1C2E).

Package / Bundle ID

PlatformField
Androidexpo.android.package in app.json
iOSexpo.ios.bundleIdentifier in app.json

Default: com.codecanyon.spendpath

6. Configure Tamagui Themes

Theme tokens live in tamagui.config.ts. Primary brand color is coral (#FF5C4D) on ink navy (#0F1C2E).

// tamagui.config.ts
ink: '#0F1C2E',
coral: '#FF5C4D',
sage: '#6F9B86',
mist: '#EEF3F8',

Light / Dark / System mode is toggled in Settings and stored in Zustand. Runtime theme resolves system using the device color scheme.

7. Insert AdMob Ad IDs

Open src/config/appConfig.ts:

adsEnabled: true,
admob: {
  android: {
    banner: 'ca-app-pub-xxxxxxxx/yyyyyyyyyy',
    interstitial: 'ca-app-pub-xxxxxxxx/yyyyyyyyyy',
  },
  ios: {
    banner: 'ca-app-pub-xxxxxxxx/yyyyyyyyyy',
    interstitial: 'ca-app-pub-xxxxxxxx/yyyyyyyyyy',
  },
},

Also replace the App IDs in app.json under the react-native-google-mobile-ads plugin.

The project ships with Google test unit IDs so development works safely. Users can also toggle ads at runtime in Settings. Real ads require an EAS / development build (not Expo Go). The SDK is probed automatically when the native module is present.

Pin react-native-google-mobile-ads@16.0.0 (already in package.json). Newer minor versions can pull Play Services Ads that clash with Expo SDK 57 / Kotlin. The project also sets expo-build-properties kotlinVersion to 2.1.20 in app.json — keep that when you reskin.

8. Build APK / AAB / IPA with EAS

npm i -g eas-cli
eas login
eas build:configure

# Android APK (preview)
eas build -p android --profile preview

# Android AAB (Play Store)
eas build -p android --profile production

# iOS IPA
eas build -p ios --profile production

Profiles are defined in eas.json. After the build finishes, download the artifact from the Expo dashboard. Install with npm install --legacy-peer-deps (a .npmrc with legacy-peer-deps=true is included for EAS).

9. Project Structure

app/                 Expo Router screens
src/components/      Tamagui UI primitives, cards, AppLogo, IncomeCard
src/screens/         Feature screens (incl. IncomeScreen)
src/store/           Zustand + AsyncStorage
src/services/        Notifications, Export, Ads
src/config/          Buyer configuration
src/types/           TypeScript models
src/utils/           Currency, date & category helpers
tamagui.config.ts    Theme tokens
__tests__/           Jest unit tests
documentation/       Buyer HTML docs

10. Support Notes

  • Demo data seeds automatically when demoMode: true on first launch.
  • Settings → Load demo data forces a reload; Clear all data empties income, expenses, and subscriptions without auto-reseeding.
  • FX rates in src/utils/currency.ts are offline approximations.
  • Run npm run typecheck and npm test before publishing your reskin.
  • Install icons package is @tamagui/lucide-icons-2 (must match Tamagui v2).
  • Online copy of this documentation (public): https://assets.nexcesstech.com/spendpath/documentation/index.html