@@ -7,28 +7,23 @@ Built with a modern MERN stack on the backend and React + React Native on the fr
77## Live Demo
88
99- ** Website:** [ zappify-sepia.vercel.app] ( https://zappify-sepia.vercel.app )
10- - ** Download APK:** https://expo.dev/accounts/devendra.mi/projects/zappify/builds/24237286-1ff7-4219-ac7a-6c103ff28d00
10+ - ** Download APK:** [ Zappify Android App ] ( https://expo.dev/accounts/devendra.mi/projects/zappify/builds/24237286-1ff7-4219-ac7a-6c103ff28d00 )
1111
1212---
1313
1414## Technology Stack
1515
16- ### Web Frontend
1716![ React] ( https://img.shields.io/badge/React_19-20232A?style=for-the-badge&logo=react&logoColor=61DAFB )
1817![ Vite] ( https://img.shields.io/badge/Vite-646CFF?style=for-the-badge&logo=vite&logoColor=white )
1918![ Framer Motion] ( https://img.shields.io/badge/Framer_Motion-0055FF?style=for-the-badge&logo=framer&logoColor=white )
2019![ CSS3] ( https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white )
2120![ Google OAuth] ( https://img.shields.io/badge/Google_OAuth-4285F4?style=for-the-badge&logo=google&logoColor=white )
2221![ Lucide React] ( https://img.shields.io/badge/Lucide_React-F56565?style=for-the-badge&logo=lucide&logoColor=white )
23-
24- ### Mobile App
2522![ React Native] ( https://img.shields.io/badge/React_Native-20232A?style=for-the-badge&logo=react&logoColor=61DAFB )
2623![ Expo] ( https://img.shields.io/badge/Expo-000020?style=for-the-badge&logo=expo&logoColor=white )
2724![ EAS Build] ( https://img.shields.io/badge/EAS_Build-4630EB?style=for-the-badge&logo=expo&logoColor=white )
2825![ AsyncStorage] ( https://img.shields.io/badge/AsyncStorage-FF6B35?style=for-the-badge&logo=react&logoColor=white )
2926![ React Navigation] ( https://img.shields.io/badge/React_Navigation-6B52AE?style=for-the-badge&logo=react&logoColor=white )
30-
31- ### Backend
3227![ Node.js] ( https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white )
3328![ Express.js] ( https://img.shields.io/badge/Express.js-000000?style=for-the-badge&logo=express&logoColor=white )
3429![ MongoDB] ( https://img.shields.io/badge/MongoDB-47A248?style=for-the-badge&logo=mongodb&logoColor=white )
@@ -38,11 +33,13 @@ Built with a modern MERN stack on the backend and React + React Native on the fr
3833![ Helmet] ( https://img.shields.io/badge/Helmet-FF6B35?style=for-the-badge&logo=helmet&logoColor=white )
3934![ Morgan] ( https://img.shields.io/badge/Morgan-000000?style=for-the-badge&logo=npm&logoColor=white )
4035![ Razorpay] ( https://img.shields.io/badge/Razorpay-02042B?style=for-the-badge&logo=razorpay&logoColor=3395FF )
41-
42- ### Infrastructure
4336![ Vercel] ( https://img.shields.io/badge/Vercel-000000?style=for-the-badge&logo=vercel&logoColor=white )
4437![ Docker] ( https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white )
4538![ GitHub Actions] ( https://img.shields.io/badge/GitHub_Actions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white )
39+ ![ AWS EC2] ( https://img.shields.io/badge/AWS_EC2-FF9900?style=for-the-badge&logo=amazonec2&logoColor=white )
40+ ![ Jest] ( https://img.shields.io/badge/Jest-C21325?style=for-the-badge&logo=jest&logoColor=white )
41+ ![ Cypress] ( https://img.shields.io/badge/Cypress-17202C?style=for-the-badge&logo=cypress&logoColor=white )
42+ ![ ESLint] ( https://img.shields.io/badge/ESLint-4B32C3?style=for-the-badge&logo=eslint&logoColor=white )
4643
4744---
4845
@@ -76,16 +73,22 @@ Users {
7673 String email UK
7774 String password
7875 Boolean isAdmin
76+ Date createdAt
77+ Date updatedAt
7978}
8079
8180Products {
8281 ObjectId _id PK
8382 ObjectId user FK
8483 String name
84+ String image
8585 String brand
8686 String category
87+ String description
8788 Number price
8889 Number countInStock
90+ Date createdAt
91+ Date updatedAt
8992}
9093
9194Orders {
@@ -94,9 +97,16 @@ Orders {
9497 Array orderItems
9598 Object shippingAddress
9699 String paymentMethod
100+ Object paymentResult
101+ Number taxPrice
102+ Number shippingPrice
97103 Number totalPrice
98104 Boolean isPaid
105+ Date paidAt
99106 Boolean isDelivered
107+ Date deliveredAt
108+ Date createdAt
109+ Date updatedAt
100110}
101111```
102112
@@ -263,6 +273,40 @@ VITE_RAZORPAY_KEY_ID=your_razorpay_key_id
263273
264274---
265275
276+ ## CI/CD & Testing
277+
278+ - GitHub Actions pipeline runs on every push and pull request
279+ - Linting with ESLint on both frontend and backend
280+ - Unit tests with Jest for email validation logic
281+ - Integration tests with Jest + Supertest for API routes
282+ - E2E tests with Cypress simulating real user flows (homepage, search, cart, login)
283+ - Automated deployment to AWS EC2 via SSH on every push to main
284+ - Dependabot configured for weekly dependency updates
285+
286+ Run backend tests:
287+ ``` bash
288+ cd backend
289+ npm test
290+ ```
291+
292+ Run E2E tests:
293+ ``` bash
294+ cd frontend
295+ npm run cy:open
296+ ```
297+
298+ ---
299+
300+ ## AWS EC2 Deployment
301+
302+ Backend is also deployed on AWS EC2 with PM2 process manager.
303+
304+ - EC2 instance: ` 13.218.101.177:5001 `
305+ - PM2 keeps the server alive and auto-restarts on crash
306+ - GitHub Actions auto-deploys on every push to main
307+
308+ ---
309+
266310## Docker
267311
268312``` bash
0 commit comments