A full-stack mobile application for browsing interior design furniture across categories like Antique, Wooden, Marble, Glass, Metal, and Rattan.
- Mobile: React Native CLI + TypeScript
- Backend: NestJS + TypeORM + MySQL
- Auth: JWT (JSON Web Tokens)
- Theme: Dark greenish color palette
furniture-app/
├── backend/ # NestJS API server
│ ├── src/
│ │ ├── auth/ # Authentication (register, login, forgot/reset password)
│ │ ├── users/ # User profile management
│ │ ├── categories/ # Furniture categories
│ │ ├── furniture/ # Furniture items (CRUD, filters)
│ │ ├── contact/ # Contact inquiries
│ │ └── seed/ # Database seeding
│ └── .env # Environment variables
│
├── mobile/ # React Native app
│ ├── src/
│ │ ├── api/ # Axios API client + service modules
│ │ ├── components/ # Reusable UI components
│ │ ├── context/ # Auth context (state management)
│ │ ├── navigation/ # React Navigation setup
│ │ ├── screens/ # All app screens
│ │ └── theme/ # Colors, typography, spacing
│ └── App.tsx
└── README.md
- Node.js >= 18
- MySQL running on localhost:3306
- React Native development environment set up (Xcode for iOS / Android Studio for Android)
- Create the MySQL database:
mysql -u root -e "CREATE DATABASE IF NOT EXISTS furniture_db;"- Install dependencies and start:
cd backend
npm install
npm run start:devThe backend will start at http://localhost:3000 and automatically:
- Create all database tables (via TypeORM synchronize)
- Seed 6 categories, 30 furniture items, and a test user
- Test user credentials:
- Email:
test@furniture.com - Password:
password123
- Install dependencies:
cd mobile
npm install- For iOS:
cd ios && pod install && cd ..
npx react-native run-ios- For Android:
npx react-native run-android| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register | No | Register new user |
| POST | /api/auth/login | No | Login and get JWT |
| POST | /api/auth/forgot-password | No | Request password reset code |
| POST | /api/auth/reset-password | No | Reset password with code |
| GET | /api/users/profile | Yes | Get current user profile |
| PATCH | /api/users/profile | Yes | Update profile |
| PATCH | /api/users/change-password | Yes | Change password |
| GET | /api/categories | No | List all categories |
| GET | /api/categories/:id | No | Get category with furniture |
| GET | /api/furniture | No | List furniture (with filters) |
| GET | /api/furniture/:id | No | Get furniture detail |
| POST | /api/contact | Yes | Submit contact inquiry |
- Login/Register - Dark green themed auth screens
- Home - Featured furniture carousel, category chips, full furniture grid
- Categories - Browse by category (Antique, Wooden, Marble, Glass, Metal, Rattan)
- Furniture Detail - Image carousel, price, rating, dimensions, material, description
- Contact Us - Company info + inquiry form (can pre-fill from furniture detail)
- Profile - View/edit profile, change password, logout
- Forgot Password - Reset code sent to backend console (dev mode)
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=
DB_NAME=furniture_db
JWT_SECRET=furniture_app_secret_key_2026
JWT_EXPIRATION=7d
PORT=3000