A child-friendly Halloween app for tracking your trick-or-treat haul. Log candy and houses, run a session to record your route on the map, and look back at past sessions.
- Home – Greeting and shortcuts to log your haul or start a trick-or-treat session.
- My Stash – Log candy (name, quantity, optional photo) and houses (name, notes, optional photo). Optionally link candy to your active session. Mark candy and houses as favorites.
- Session – Start a trick-or-treat session, pick or add a costume, and track your route on the map. Add house visits and log candy as you go. End the session to see a summary (route and haul).
- History – Browse past sessions (with candy and house counts). Tap a session to view its route and haul summary.
- Settings – Switch or add profiles (no account required). Set light, dark, or system theme. Optionally load sample data for development.
npm install
npm startOr use npx expo start. Then scan the QR code with Expo Go (Android) or the Camera app (iOS).
To generate a sample SQLite database with profiles, sessions, candy logs, and houses (written to scripts/seed/output/sweetstash.db):
npm run seedFor a development build with native modules (recommended for full map support):
npx expo prebuild
npx expo run:ios
# or
npx expo run:androidSweetStash is built with Expo Application Services (EAS). TestFlight is Apple’s beta channel: you upload an App Store–style iOS build to App Store Connect, then invite testers from the TestFlight tab.
- Apple Developer Program membership (paid). You need access to App Store Connect and the Apple Developer portal.
- Expo account (sign up at expo.dev). This repo is already linked to an EAS project via
app.config.js(extra.eas.projectId). - Local tools: Node.js, dependencies installed (
npm install), and the EAS CLI (npm install -g eas-clior usenpx eas-clibelow).
- In Apple Developer → Identifiers, ensure an App ID exists for the bundle identifier
com.sweetstash.www(must matchapp.config.js→ios.bundleIdentifier). - In App Store Connect → Apps, create a new app with that bundle ID, name SweetStash, and the same primary language you plan to use for the store listing.
- Accept agreements and fill in the minimum App Privacy details App Store Connect asks for; TestFlight internal testing still needs a coherent app record.
From the project root, log in and start a production build (this matches eas.json → build.production, including autoIncrement for iOS build numbers):
eas login
eas build --platform ios --profile productionEAS will prompt for or create signing credentials the first time. When the build finishes, you get an .ipa on the Expo dashboard.
Note: The npm script build:test:ios uses the preview profile, which is set up for internal distribution (not App Store / TestFlight). For TestFlight, use --profile production as shown.
Option A — EAS Submit (recommended)
eas submit --platform ios --latestFollow the prompts for Apple ID (and app-specific password) or an App Store Connect API key. EAS uploads the most recent successful production iOS build.
Option B — Transporter
Download the .ipa from the build page on expo.dev, open Apple’s Transporter app on a Mac, and deliver the .ipa to App Store Connect.
- In App Store Connect, open your app → TestFlight.
- Wait until Apple finishes processing the build (often minutes; sometimes longer for the first build).
- Internal testing: add users with an App Store Connect role on your team; they can install as soon as processing completes (no beta review).
- External testing: create a group, add testers’ emails, and submit the build for Beta App Review the first time you use external testers.
Bump version in app.config.js when you ship meaningful releases; the production profile’s autoIncrement in eas.json handles iOS build numbers for you.
- Expo (React Native) with expo-router
- expo-sqlite – Local database
- expo-file-system – Image storage
- expo-image-picker – Photo selection
- expo-location – Route tracking
- react-native-maps – Map display