- Node.js 22+ — nodejs.org
- iOS: Xcode 15+ and CocoaPods (
sudo gem install cocoapods) - Android: Android Studio with Android SDK and JDK 17+
git clone https://github.com/mulkatz/cap2cal.git
cd cap2calcd app
npm install
cp .env.example .env # fill in Firebase config + API URLsWeb preview (fastest way to develop):
npm run dev # opens at http://localhost:5173Run on device:
npm run build
npx cap run ios # or: npx cap run androidcd backend/functions
npm install
npm run serve # starts Firebase emulatorFor production deployment:
firebase deploy --only functionscd web
npm install
cp .env.example .env # fill in Firebase + PostHog config
npm run devEach subproject has a .env.example file. Copy it to .env and fill in the values:
| Variable | Where | Description |
|---|---|---|
VITE_FIREBASE_* |
app/.env |
Firebase project config |
VITE_ANALYSE_API_URL |
app/.env |
URL of the analyse Cloud Function |
VITE_FIND_TICKETS_API_URL |
app/.env |
URL of the findTickets Cloud Function |
VITE_FEATURE_FLAGS_API_URL |
app/.env |
URL of the featureFlags Cloud Function |
VITE_REVENUECAT_* |
app/.env |
RevenueCat API keys (optional, see RevenueCat Setup) |
VITE_DEVELOPER_MODE_ENABLED |
app/.env |
Enable dev tools like crash testing (false in production) |
VITE_FIREBASE_* |
web/.env |
Firebase config for the landing page |
VITE_PUBLIC_POSTHOG_* |
web/.env |
PostHog analytics config |
The backend uses Firebase Secret Manager instead of .env files. See backend/functions/.env.example for the required secrets and set them with:
firebase functions:secrets:set SECRET_NAME# Build web assets
cd app && npm run build
# Sync and open native projects
npx cap sync
npx cap open ios # Archive in Xcode → Product → Archive
npx cap open android # Build → Generate Signed Bundle/APKiOS pod install fails:
cd app/native/ios/App && rm -rf Pods Podfile.lock && pod installAndroid build fails:
cd app/native/android && ./gradlew cleanPort 5173 in use:
npm run dev -- --port 3000- Read the Architecture to understand the system design
- Check CONTRIBUTING.md before submitting changes
- See RevenueCat Setup if you want to enable in-app purchases