Hackathon PoC for a cross-platform Expo app: a swipe-first local gig marketplace with Google/phone account creation, double opt-in hustles, BST currency, profile-driven discovery, and Firebase Auth/Firestore wiring.
- Expo Router mobile app with Forge, Swipe, Hustles, Profile, onboarding, and locked Chat flows.
- BSTs (Blood, Sweat Tokens) for signup rewards, boost payments, purchases, and chat unlocks.
- Firestore-backed profiles, public profiles, gigs, matches, and messages.
- Hybrid gig matching with cached AI match profiles and local fallback scoring.
- Repo-hosted demo image references, so demos do not require Firebase Storage.
- A Firestore seed script for demo profiles, gigs, and optional current-user hustles.
- NativeWind/Tailwind styling for the SideHustle dark/light theme.
npm install
npm run startFor iOS/Android dependencies that are Expo-versioned, this project pins compatible package versions in package.json.
- Create or use a Firebase project with Auth and Firestore enabled.
- Enable Google sign-in and phone sign-in in Firebase Auth.
- Copy
.env.exampleto.envand add your Firebase web app values. - Deploy or paste
firestore.rulesafter seeding demo data. - Restart Expo so
EXPO_PUBLIC_*variables are loaded.
Seed shared demo data:
npm run seed:firestoreSeed full current-user hustles after you know your Firebase Auth UID:
npm run seed:firestore -- --current-user=<firebase-auth-uid>The Expo app never stores an OpenAI API key. For cached GPT-powered match profiles, run or deploy a server endpoint and point the app at it:
npm run ai-match:endpointSet OPENAI_API_KEY and optionally OPENAI_MATCH_MODEL on the server. Set EXPO_PUBLIC_SIDEHUSTLE_AI_MATCH_ENDPOINT in the app environment, for example http://localhost:8787/ai-match during web testing.