Skip to content

MahmoudAlaa92/Herfety

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧵 Handmade Marketplace App - iOS

An iOS e-commerce solution built with love for small artisans and handmade vendors. This app was designed to provide a seamless shopping and selling experience, integrating secure payments, modern architecture, and elegant user experience.


🚀 Project Overview

Handmade Marketplace is a fully functional mobile app that allows users to:

  • Explore handmade products from multiple vendors.
  • Sign up and log in using social platforms (Facebook, Google, Apple).
  • Purchase products securely using Stripe.
  • Leave reviews and ratings on purchased products.
  • Browse user-friendly interfaces built with UIKit.

🏗️ Architecture - MVVM + Design Patterns + SOLID Principles

We implemented the Model-View-ViewModel (MVVM) design pattern to ensure:

  • Clean separation of concerns.
  • Easier testability and maintainability.
  • Reactive UI updates via Combine.

Additional design patterns used:

  • Factory – For object creation (products, users, reviews).
  • Coordinator – For handling navigation flow.
  • Singleton – For shared managers.

📦 Packages & Frameworks Used

We leveraged powerful Swift libraries and Apple frameworks to deliver a production-ready experience:

  • Alamofire – Networking layer for REST APIs.
  • Firebase – Authentication, Firestore, and hosting backend services.
  • Stripe iOS SDK – Secure payments with Apple Pay support.
  • Cosmos – Star rating control for reviews.
  • Kingfisher – Downloading & caching images.
  • Lottie – Animated vector illustrations for engaging UI.
  • Loading Buttons – Custom styled loading buttons.
  • SkeletonView – Placeholder skeletons for loading states.
  • ViewAnimator – One-line view animations for smooth UX.
  • SwiftyJSON – Easy JSON parsing.
  • SDWebImage – Image caching & loading.
  • Realm – Local database for offline-first experience.
  • SwiftGen – Code generation for assets & strings.
  • SwiftLint – Linting to enforce Swift style guidelines.
  • Combine – Reactive programming for UI binding.
  • Async/Await – Modern concurrency and background task handling.
  • Core ML – For intelligent recommendations and classifiers (future features).

💳 Payment Integration with Stripe

Stripe’s EmbeddedPaymentElement API is used for a secure and customizable checkout:

  • Supports multiple vendors.
  • Apple Pay ready.
  • Secure client secret flow via backend.

Highlights:

  • Seamless checkout experience.

🎨 UI Design with UIKit

Using UIKit allowed us to build:

  • Responsive layouts with Auto Layout.
  • Reusable custom components like CardViewCell.
  • A smooth, animated checkout flow.
  • Localization support for multiple languages.

🔐 Authentication with Firebase

We use Firebase Authentication to simplify sign-in:

  • Google Sign-In
  • Facebook Login
  • Apple Sign-In

Firebase handles token validation, user identity, and security. The sign-in status syncs with Firestore user data.


🌐 Networking with Alamofire

We used Alamofire to manage all HTTP networking:

  • Easy to send authenticated requests.
  • Upload and download product images.
  • Fetch product listings, vendor data, reviews.

🛍️ Product Browsing & Reviews

Users can:

  • Browse curated product categories.
  • See detailed product views with images, prices, and highlights.
  • Add reviews with star ratings and comments.
  • View other customers’ feedback.

All reviews are stored in Firestore and linked by productId.


📱 UX Focused Features

We focused on simplicity, delight, and trust.


📚 Conclusion

This project blends solid architecture (MVVM), modern UI with UIKit, and powerful integrations like Stripe and Firebase to deliver a feature-rich, scalable handmade marketplace app.

✨ We believe small makers deserve big tech. ✨

HerfetyCover Screenshot 2025-06-16 at 6 34 41 PM Screenshot 2025-06-16 at 6 35 03 PM Screenshot 2025-08-30 at 12 41 55 AM Screenshot 2025-06-16 at 6 36 57 PM Screenshot 2025-06-16 at 6 48 21 PM Screenshot 2025-06-16 at 6 39 24 PM Screenshot 2025-09-07 at 7 20 54 PM Screenshot 2025-06-16 at 6 42 58 PM Screenshot 2025-06-16 at 6 44 30 PM Screenshot 2025-06-16 at 6 44 45 PM Screenshot 2025-06-16 at 6 43 22 PM Screenshot 2025-06-16 at 6 44 11 PM Screenshot 2025-06-16 at 6 45 53 PM Screenshot 2025-08-30 at 12 40 26 AM Screenshot 2025-06-16 at 6 47 34 PM Screenshot 2025-06-16 at 6 47 48 PM Screenshot 2025-08-30 at 12 38 30 AM Screenshot 2025-09-07 at 7 35 43 PM