Convex is a full-stack event discovery mobile application built with React Native CLI, Express, and MongoDB. The core feature of Convex is its Dynamic Category Theming, which adapts the UI based on the event category (e.g., Tech, Social, Corporate, Arts).
- Full Auth Flow: JWT-based access and refresh tokens, persisted securely.
- Role-based Access: Standard users and Admin users.
- Event Discovery: Filter/search events by category with dynamic theming.
- Explore Search: Nearby event discovery using MongoDB
2dspherewith:- current-location lookup
- city/location search
- selectable radius or city-wide scope
- Notifications UX: In-app notifications with unread counts on bell icons and full-message detail modal.
- Admin Workflow: User-created events enter moderation queue (approve/reject/request-more-proof).
- Organizer Tools: RSVP join/leave, attendee verification codes, and delete-request flow for events.
- Capacity Management: Real-time event joining with capacity caps.
- React Native CLI (not Expo)
- TypeScript
- React Navigation (Bottom Tabs + Stack)
- Zustand (Global State)
- Tanstack React Query (Server Cache + optimistic UI updates)
- React Native FastImage, React Native Reanimated, FlashList
- Axios (with interceptors)
- Node.js + Express
- TypeScript
- MongoDB + Mongoose (GeoJSON)
- JWT (jsonwebtoken)
- bcryptjs
- Zod Validation
- Node.js (v22.11+ recommended; frontend uses
>=22.11.0) - MongoDB connection string
- React Native environment set up for Android/iOS
- Navigate to the backend folder:
cd backend - Install dependencies:
npm install
- Set up environment variables:
Crucial: Ensure you enter a valid
cp .env.example .env
MONGODB_URIin the.envfile. - Start the server:
npm run dev
- Seed an admin user (optional):
npm run seed:admin admin@test.com
- Navigate to the frontend folder:
cd frontend - Install dependencies:
npm install
- For iOS (macOS only):
cd ios && pod install && cd ..
- Run the Metro bundler:
npm start
- Run on Android or iOS:
npm run android # OR npm run ios
- Set release backend URL (Vercel) for bundle-time inlining:
export REACT_NATIVE_API_BASE_URL=https://<your-backend>.vercel.app/api
- Build release APK:
cd frontend npm run android:assemble:release - APK output path:
frontend/android/app/build/outputs/apk/release/app-release.apk
- Set Vercel project root to
backend/. - Add these environment variables in Vercel:
MONGODB_URIJWT_SECRETJWT_REFRESH_SECRETJWT_EXPIRES_INJWT_REFRESH_EXPIRES_INCLOUDINARY_CLOUD_NAMECLOUDINARY_API_KEYCLOUDINARY_API_SECRETNODE_ENV=productionCORS_ORIGINS=https://<your-frontend-origin>(use*if only mobile clients)
- Deploy backend and verify:
curl https://<your-backend>.vercel.app/api/health
/backend/src/features- Express domain-driven routes, controllers, and services./backend/src/shared- Middlewares, config, and utilities./frontend/src/features- React Native domain-driven screens and components./frontend/src/shared- Reusable UI, hooks, and API clients./frontend/src/navigation- React Navigation configuration.
This app adheres to high aesthetic standards. By leveraging CategoryThemeProvider, the user interface transforms seamlessly depending on what the user is browsing, eliminating the generic "cookie-cutter" app feel and leaning into specialized aesthetics.