Foodly is a modern iOS food delivery application built to provide a seamless and intuitive experience for users to browse, order, and track food deliveries from their favorite restaurants. The app is developed using Swift and UIKit, leveraging the VIPER architecture for a clean, scalable, and maintainable codebase. Firebase powers the backend for authentication, real-time database, and push notifications.
- User Authentication: Secure sign-up, login, and logout using Firebase Authentication.
- Menu Browsing: Explore the food menu divided into four categories: burgers, pizza, cakes and tacos.
- Restaurant Browsing: Explore a curated list of nearby restaurants.
- Order Placement: Add items to the cart, customize orders, and checkout seamlessly.
- User Profile: Change profile information, such as setting a profile picture.
- Language: Swift
- UI Framework: UIKit
- Architecture: VIPER
- Backend: Firebase (Authentication, Firestore)
- Dependency Management: Swift Package Manager (SPM)
- Minimum iOS Version: iOS 15.0
- Xcode 16.0 or later
- iOS 15.0 or later
- Firebase account for backend configuration
- Clone the Repository:
git clone https://github.com/Demerro/Foodly.git cd Foodly - Install Dependencies
- Open
Foodly.xcodeprojin Xcode. - Dependencies are managed via Swift Package Manager and will be resolved automatically.
- Open
- Configure Firebase
- Create a Firebase project at Firebase Console.
- Add an iOS app to your Firebase project and download the
GoogleService-Info.plistfile. - Place
GoogleService-Info.plistin the root of the Xcode project. - Enable Firebase Authentication and Firestore in the Firebase Console.
- Build and Run
- Select your target device or simulator in Xcode.
- Press
Cmd + Bto build andCmd + Rto run the app.
Foodly follows the VIPER architecture, ensuring modularity and separation of concerns:
- View: UIKit view controllers and UI components.
- Interactor: Business logic and data handling.
- Presenter: Mediates between View and Interactor.
- Entity: Data models.
- Router: Navigation logic.
- Worker: Encapsulates specific tasks such as network requests (e.g., fetching menus from Firebase) or data processing (e.g., fetch and process nearby restaurants from MapKit). Workers are used by Interactors to keep business logic modular and reusable.
Below are screenshots of Foodly, grouped by user flow:
| First | Second | Third |
|---|---|---|
![]() |
![]() |
![]() |
| Login | Sign Up | Forget Password |
|---|---|---|
![]() |
![]() |
![]() |
| Home | Food Category | Food Details | Food Search | Restaurants Search |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| Cart | Make Order |
|---|---|
![]() |
![]() |
| Profile | Preferences |
|---|---|
![]() |
![]() |
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a feature branch (
git checkout -b feature/your-feature). - Commit your changes (
git commit -m "Add your feature"). - Push to the branch (
git push origin feature/your-feature). - Open a Pull Request.
This project is licensed under the MIT License. See the LICENSE.txt for details.
For questions or feedback, open an issue on GitHub.
The design was taken from https://workux17.gumroad.com/l/phanx














