A modern item trading and marketplace mobile app built with React Native and Expo. Swipe through items, match with other users, and chat to arrange trades—all in a beautiful, intuitive interface.
- Email/Password Registration: Create an account with email and password
- Anonymous Login: Quick access with just a name
- Profile Management: Update your name and profile photo
- Add Items: List your items with photos, descriptions, and categories
- Categories: Organize items by category:
- Electronics (Eletrônicos)
- Clothing (Roupas)
- Furniture (Móveis)
- Books (Livros)
- Sports (Esportes)
- Toys (Brinquedos)
- Home (Casa)
- Other (Outros)
- Manage Your Items: View, edit, and delete your listed items
- Swipe Interface: Tinder-like card deck for browsing items
- Like/Dislike: Swipe right to like, left to pass
- Smart Matching: Get matched when both users like each other's items
- Match Notifications: Celebrate matches with beautiful animations
- Real-time Messaging: Chat with your matches
- Match History: View all your matches sorted by recent activity
- Unread Indicators: See when you have new messages
- Framework: Expo ~54.0.31
- Runtime: React Native 0.81.5
- Language: TypeScript
- Navigation: Expo Router (file-based routing)
- State Management: React Context API
- Storage: AsyncStorage (local persistence)
- Animations: React Native Reanimated
- Gestures: React Native Gesture Handler
- UI Components: Custom themed components with dark mode support
- Node.js (v18 or higher recommended)
- npm or yarn
- Expo CLI (installed globally or via npx)
- iOS Simulator (for Mac) or Android Emulator, or Expo Go app on your device
-
Clone the repository
git clone <repository-url> cd rebox
-
Install dependencies
npm install
-
Start the development server
npm start # or npx expo start -
Run on your preferred platform
- Press
ifor iOS simulator - Press
afor Android emulator - Scan QR code with Expo Go app on your device
- Press
wfor web browser
- Press
npm start- Start the Expo development servernpm run android- Start the app on Android emulatornpm run ios- Start the app on iOS simulatornpm run web- Start the app in web browsernpm run lint- Run ESLint to check code qualitynpm run reset-project- Reset to a blank project (moves current code toapp-example)
rebox/
├── app/ # Expo Router file-based routes
│ ├── (auth)/ # Authentication screens
│ │ ├── login.tsx
│ │ └── register.tsx
│ ├── (tabs)/ # Main tab navigation
│ │ ├── index.tsx # Swipe feed
│ │ ├── matches.tsx # Matches list
│ │ ├── my-items.tsx # User's items
│ │ └── profile.tsx # User profile
│ ├── add-item.tsx # Add new item screen
│ ├── chat/ # Chat screens
│ │ └── [matchId].tsx
│ └── item/ # Item detail screens
│ └── [itemId].tsx
├── components/ # Reusable UI components
│ ├── auth/ # Authentication components
│ ├── chat/ # Chat components
│ ├── item/ # Item-related components
│ ├── match/ # Match components
│ ├── swipe/ # Swipe deck components
│ └── ui/ # Generic UI components
├── contexts/ # React Context providers
│ ├── auth-context.tsx
│ ├── items-context.tsx
│ └── matches-context.tsx
├── hooks/ # Custom React hooks
├── services/ # Business logic and data services
│ ├── auth-service.ts
│ ├── item-service.ts
│ ├── match-service.ts
│ └── storage.ts
├── types/ # TypeScript type definitions
├── constants/ # App constants (categories, theme)
└── utils/ # Utility functions
All data is stored locally using AsyncStorage. The app uses a service layer pattern to abstract storage operations:
- User authentication and profiles
- Items and categories
- Likes, dislikes, and matches
- Messages and chat history
When a user likes an item:
- The like is recorded
- The system checks if the item's owner has liked any of the current user's items
- If both users have liked each other's items, a match is created
- Users are notified and can start chatting
Built with React Native Gesture Handler and Reanimated for smooth, native-feeling swipe animations. Cards can be swiped left (dislike) or right (like) with haptic feedback.
- Create components in the
components/directory - Add services in the
services/directory for data operations - Use contexts in
contexts/for global state management - Create custom hooks in
hooks/for reusable logic
The app uses a theme system with support for light and dark modes. Use the useThemeColor hook to access theme colors:
const backgroundColor = useThemeColor({}, "background");
const textColor = useThemeColor({}, "text");- 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
This project is private and proprietary.
Built with ❤️ using Expo and React Native