Are you Redi to find love??
Cornell's first and best dating app, connecting students through authentic campus experiences.
/backend- Node.js/Express API server with Firebase integration/frontend- React Native mobile app built with Expo/redi-web- Next.js landing page for marketing and waitlist
- Node.js 18+ and npm
- Expo CLI (
npm install -g @expo/cli) - Firebase project with Firestore and Authentication enabled
- Cornell NetID for testing
git clone <repository-url>
cd redi
npm install # Install root dependenciescd backend
npm install
# Create .env file with Firebase credentials
cp .env.example .env # Edit with your Firebase config
# Start development server
npm run dev # Runs on http://localhost:3001FIREBASE_PROJECT_ID=your-project-id
FIREBASE_CLIENT_EMAIL=your-service-account-email
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
REACT_APP_API_URL=http://localhost:3001cd frontend
npm install
# Configure Firebase (add your config files)
# - google-services.json (Android)
# - GoogleService-Info.plist (iOS)
# Start Expo development server
npm start # Choose platform (iOS/Android/Web)cd redi-web
npm install
# Start Next.js development server
npm run dev # Runs on http://localhost:3000npm run dev- Start development server with hot reloadnpm run build- Build TypeScript to JavaScriptnpm start- Run production servernpm run list-emails- List all waitlist emails
Located in /backend/scripts/:
-
Clean Email Data:
node scripts/clean-emails.jsRemoves test/fake emails and duplicates fromresponse.json -
Batch Upload Emails:
npx tsx scripts/upload-emails.tsUploads cleaned emails fromresponse.jsonto Firebase Firestore in batches- Processes emails in batches of 500 (Firestore limit)
- Automatically skips duplicates
- Updates global stats counter
- Includes verification and detailed logging
Usage Example:
cd backend
# First, clean the email data
node scripts/clean-emails.js
# Then upload to Firebase
npx tsx scripts/upload-emails.tsRequirements:
response.jsonfile in backend root containing array of{id, email}objects- Firebase project configured with proper credentials in
.env landing-emailsandstatsFirestore collections (auto-created if missing)
npm start- Start Expo development servernpm run android- Run on Android device/emulatornpm run ios- Run on iOS device/simulatornpm run web- Run in web browsernpm run lint- Run ESLint
npm run dev- Start Next.js development servernpm run build- Build for productionnpm start- Run production servernpm run lint- Run ESLint
users- Authentication data (netid, email, firebaseUid)profiles- Dating profiles (bio, photos, Cornell-specific data)landing-emails- Waitlist email collection
- Cornell NetID-based authentication
- Profile management with Cornell schools/majors
- Image uploads via Firebase Storage
- Matching system framework (algorithm TBD)
POST /api/users- Create new userPOST /api/users/login- User login
GET /api/profiles- List profiles (with filters)GET /api/profiles/me- Get current user's profileGET /api/profiles/:netid- Get profile by NetIDPOST /api/profiles- Create new profilePUT /api/profiles/me- Update current user's profileDELETE /api/profiles/me- Delete current user's profileGET /api/profiles/matches- Get potential matches
GET /api/landing-emails- Get waitlist emailsPOST /api/landing-emails- Add email to waitlist
# Backend tests (when implemented)
cd backend && npm test
# Frontend tests (when implemented)
cd frontend && npm testDeploy to your preferred platform (Heroku, Railway, Render, etc.) with environment variables configured.
# Build for production
cd frontend
npm run build:web # For web deployment
eas build # For app store builds (requires Expo account)
## Frontend Development Commands
```bash
# Start development server
npm start
# Run on specific platform
npm run ios
npm run android
npm run web
# Type checking
npx tsc --noEmit
# Linting
npm run lintAutomatically deployed via Netlify on push to main branch.
Available formatting commands:
From root directory (/Users/jujucrane/dev/redi):
- npm run format - Format all files across the entire codebase
- npm run format:check - Check formatting without making changes
- npm run format:backend - Format only backend files
- npm run format:frontend - Format only frontend files
- npm run format:web - Format only web files
From individual directories:
- Backend: npm run format, npm run lint, npm run lint:fix
- Frontend: npm run format, npm run format:check
- Web: npm run format
- Implement sophisticated matching algorithm
- Add comprehensive test coverage
- Implement push notifications
- Add real-time messaging
- Enhanced profile customization
- TPM: Juju Crane
- Designer/Frontend Dev: Clément Rozé
- Designer: Brandon Lee
- PM: Arsh Aggarwal
- Dev: Abrar Amin
Private project - Cornell DTI