A React Native (Expo Go) mobile app for hyper-local second-hand fashion trading among university students. Built as an MVP for the Thriftversity e-business project at Universitas Multimedia Nusantara.
| Feature | Status |
|---|---|
| Campus email verification (.ac.id) | ✅ |
| Browse & search listings | ✅ |
| Product detail with seller info | ✅ |
| Like / save items | ✅ |
| In-app chat between buyer & seller | ✅ Auto-reply simulation |
| Sell / post new listing | ✅ |
| Checkout flow with dummy QR | ✅ |
| COD meeting point selection | ✅ |
| Seller profile with ratings & badges | ✅ |
| Transaction history | ✅ |
| Mock GraphQL in-memory database | ✅ |
# 1. Install dependencies
npm install
# 2. Start the dev server
npx expo start
# 3. Scan the QR code in your terminal with Expo GoThat's it! The app will load directly on your device.
Use any email ending in .ac.id to log in:
Email: yourname@student.umn.ac.id
Password: anything (demo mode)
⚠️ Non.ac.idemails are rejected — this is the core identity verification feature.
thriftversity/
├── App.js # Root app entry
├── app.json # Expo configuration
├── src/
│ ├── context/
│ │ └── AuthContext.js # Authentication state
│ ├── data/
│ │ └── mockDatabase.js # In-memory dummy data
│ ├── graphql/
│ │ └── mockClient.js # GraphQL-style query/mutation API
│ ├── navigation/
│ │ └── AppNavigator.js # Tab + Stack navigation
│ ├── screens/
│ │ ├── AuthScreen.js # Login / Register
│ │ ├── HomeScreen.js # Browse + Search + Featured
│ │ ├── ProductDetailScreen.js # Full product view
│ │ ├── SellScreen.js # Post a new listing
│ │ ├── CheckoutScreen.js # 3-step checkout + dummy QR
│ │ ├── ChatScreen.js # Real-time-like messaging
│ │ ├── InboxScreen.js # Conversation list
│ │ ├── LikedScreen.js # Saved/liked items
│ │ ├── ProfileScreen.js # User profile & listings
│ │ └── SellerProfileScreen.js # View any seller's profile
│ └── utils/
│ └── theme.js # Colors, spacing, helpers
The app uses a mock GraphQL client (src/graphql/mockClient.js) that simulates backend queries and mutations using an in-memory JavaScript store — no real server or internet connection required.
gql.getProducts(filters) // Filter by category, search, price
gql.getFeaturedProducts() // Top picks for homepage
gql.getProductById(id) // Single product detail
gql.getMyListings() // Current user's listings
gql.getLikedProducts() // Saved/liked items
gql.getMe() // Current user profile
gql.getConversations() // Inbox threads
gql.getMessages(convId) // Messages in a thread
gql.getMyTransactions() // Purchase historymutations.toggleLike(productId)
mutations.addProduct(data)
mutations.sendMessage(convId, text, receiverId, productId)
mutations.createTransaction(productId, sellerId, amount)
mutations.completeTransaction(txId)
mutations.updateProfile(data)The checkout is a 3-step flow:
- Details — Item summary, COD meeting point selection, price breakdown (3% platform fee)
- Payment — Dummy QR code + mock e-wallet options (no real money moves)
- Confirmed — Transaction record + prompt to message seller to arrange meetup
| Token | Value |
|---|---|
| Primary | #2D6A4F (Forest Green — sustainability) |
| Accent | #E8A838 (Warm Amber) |
| Background | #F9F7F4 (Warm Off-White) |
| Surface | #FFFFFF |
- No real backend — all data is in-memory and resets on app restart
- Image upload uses preset stock images (camera not wired in demo)
- No push notifications (would require Expo Push or FCM)
- Payment is fully simulated (Midtrans Sandbox not integrated)
- No real-time WebSocket messaging (simulated with
setInterval)
Thriftversity E-Business Report — Program Studi Sistem Informasi, Fakultas Teknik dan Informatika, Universitas Multimedia Nusantara
Business model frameworks from Laudon & Traver's E-Commerce: Business. Technology. Society.