Borrow Better. Dress Smarter.
UniFit is a peer-to-peer marketplace designed specifically for college students to borrow and lend clothes. Built with React Native and Expo, it addresses the common challenge of having endless events but limited outfits, while promoting sustainable fashion practices.
"Endless events, limited outfits."
College life is filled with events, parties, interviews, and special occasions, but buying new clothes for every occasion is expensive and unsustainable. Most items are worn once and then sit unused, taking up space. While borrowing from friends is great, it's not always reliable. Sometimes even if you order clothes, they don't arrive before the event.
UniFit solves these problems by connecting college students in a trusted community where they can:
- Always look and feel your best β no matter the occasion
- Save money or earn income through your closet
- Share over hoarding β dress well, live light
- Clothing Discovery: Browse available clothing items by category, color, and size
- Item Posting: Upload and list clothing items for rent with detailed descriptions
- Borrowing System: Request to borrow items with customizable rental periods
- Activity Management: Track pending requests and manage borrow/return status
- User Profiles: Personalized profiles with avatar and user information
- Clothing Categories: Formal, Casual, Going Out, Athleisure, Loungewear, Outerwear, Vacation, Workwear, Costume
- Advanced Filtering: Filter by category, color, size, and availability
- Search Functionality: Search through available items
- Modern UI/UX: Clean, intuitive interface with smooth animations
- Image Upload: Easy photo upload for item listings
- Real-time Updates: Live status updates for borrow requests
- Responsive Design: Optimized for both iOS and Android
- Cost-Effective: Save money by borrowing instead of buying for one-time events
- Sustainable: Reduce fashion waste by sharing clothes within your community
- Convenient: Access a variety of styles without the commitment of ownership
- Reliable: Built-in trust system and user verification for safe borrowing
- Community: Connect with fellow students and build lasting relationships
- Formal Events: Homecoming, graduation, job interviews
- Theme Parties: Halloween, Greek life events, themed socials
- Seasonal Occasions: Holiday parties, spring break, summer events
- Everyday Style: Try new trends without the investment
- React Native (0.76.9) - Cross-platform mobile development
- Expo (52.0.46) - Development platform and tools
- Expo Router (4.0.20) - File-based routing
- TypeScript - Type-safe development
- React Native Reanimated - Smooth animations
- Expo Linear Gradient - Beautiful gradient effects
- React Native Dropdown Picker - Custom dropdown components
- Expo Vector Icons - Icon library
- React Native Gesture Handler - Touch interactions
- Firebase Authentication - User authentication and management
- Firestore - NoSQL cloud database
- Firebase Storage - Image and file storage
- Firebase Hosting - Web deployment
- Jest - Testing framework
- ESLint - Code linting
- TypeScript - Static type checking
The app includes the following main screens:
- Home: Browse and search clothing items
- Post: Create new clothing listings
- Activity: Manage borrow requests and transactions
- Profile: User profile and settings
- Login/Onboarding: Authentication and user setup
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI
- iOS Simulator (for iOS development)
- Android Studio (for Android development)
-
Clone the repository
git clone <repository-url> cd UniFit
-
Install dependencies
npm install # or yarn install -
Environment Setup
# Copy the example environment file cp .env.example .env # Edit .env with your actual API keys nano .env
-
Firebase Setup
- Create a Firebase project at Firebase Console
- Enable Authentication, Firestore, and Storage
- Update
firebaseConfig.jswith your Firebase configuration - Set up Firestore security rules in
firestore.rules
-
Environment Configuration
- Copy your Firebase configuration to
firebaseConfig.js - Ensure all required Firebase services are enabled
- Copy your Firebase configuration to
-
Start the development server
npm start # or yarn start -
Run on device/simulator
# iOS npm run ios # Android npm run android # Web npm run web
The project uses environment variables to securely store API keys and configuration. Here's how to set them up:
OPENAI_API_KEY- Your OpenAI API key for AI features
FIREBASE_API_KEY- Firebase API key (can be moved from firebaseConfig.js)FIREBASE_AUTH_DOMAIN- Firebase auth domainFIREBASE_PROJECT_ID- Firebase project IDFIREBASE_STORAGE_BUCKET- Firebase storage bucketFIREBASE_MESSAGING_SENDER_ID- Firebase messaging sender IDFIREBASE_APP_ID- Firebase app IDFIREBASE_MEASUREMENT_ID- Firebase measurement IDNODE_ENV- Environment (development/production)
import { ENV_CONFIG, OPENAI_API_KEY_CONFIG } from './config/env';
// Access your API key
const apiKey = OPENAI_API_KEY_CONFIG;
// Validate environment on startup
ENV_CONFIG.validateApiKeys();- The
.envfile is automatically ignored by Git - Never commit API keys to version control
- Use
.env.exampleas a template for required variables
UniFit/
βββ app/ # Main application screens
β βββ (tabs)/ # Tab-based navigation screens
β β βββ home.tsx # Home screen with item browsing
β β βββ post.tsx # Item posting screen
β β βββ activity.tsx # Activity management screen
β β βββ profile.tsx # User profile screen
β β βββ _layout.tsx # Tab navigation layout
β βββ login.tsx # Authentication screen
β βββ onboarding.tsx # User onboarding flow
β βββ _layout.tsx # Root layout
βββ components/ # Reusable UI components
β βββ ListingModal.tsx # Item detail modal
β βββ edit-listing.tsx # Edit listing component
βββ contexts/ # React contexts
βββ hooks/ # Custom React hooks
βββ config/ # Configuration files
βββ assets/ # Static assets (images, fonts)
βββ firebaseConfig.js # Firebase configuration
βββ firestore.rules # Firestore security rules
βββ firestore.indexes.json # Firestore indexes
βββ package.json # Dependencies and scripts
- Create a new Firebase project
- Enable the following services:
- Authentication (Email/Password)
- Firestore Database
- Storage
- Update the configuration in
firebaseConfig.js
The app uses the following Firestore collections:
users- User profiles and informationposts- Clothing item listingsborrowRequests- Borrow request transactions
Run the test suite:
npm testexpo build:iosexpo build:androidexpo build:web- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Built with Expo
- Powered by Firebase
- Icons from Expo Vector Icons
For support and questions, please open an issue in the GitHub repository or contact the development team.
UniFit - Connecting communities through shared fashion experiences.