Skip to content

Willie-Conway/iOS-Little-Lemon-Capstone-Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 

Repository files navigation

πŸ‹ Little Lemon Food Ordering App - iOS Development Capstone Project

Swift SwiftUI iOS Development Core Data Xcode

🎯 Project Overview

This iOS SwiftUI application represents the final capstone project for the Meta iOS Developer Professional Certificate program. The Little Lemon Food Ordering App provides a modern, intuitive dining experience for users to explore menu items and place orders seamlessly.

πŸ“± Live App Demo

Demo Video App Store Ready

πŸ“ Project Structure

πŸ“‚ Little-Lemon-Food-Ordering-App/
β”‚
β”œβ”€β”€ πŸ“‚ LittleLemonApp/
β”‚   β”œβ”€β”€ πŸ“‚ Assets.xcassets/
β”‚   β”‚   β”œβ”€β”€ AppIcon.appiconset/
β”‚   β”‚   β”œβ”€β”€ Logo.imageset/
β”‚   β”‚   β”œβ”€β”€ hero-image.imageset/
β”‚   β”‚   └── menu-item-images/
β”‚   β”œβ”€β”€ πŸ“‚ CoreData/
β”‚   β”‚   β”œβ”€β”€ Persistence.swift
β”‚   β”‚   β”œβ”€β”€ UserDataManager.swift
β”‚   β”‚   └── LittleLemonModel.xcdatamodeld
β”‚   β”œβ”€β”€ πŸ“‚ Models/
β”‚   β”‚   β”œβ”€β”€ MenuItem.swift
β”‚   β”‚   β”œβ”€β”€ MenuCategory.swift
β”‚   β”‚   └── UserProfile.swift
β”‚   β”œβ”€β”€ πŸ“‚ ViewModels/
β”‚   β”‚   β”œβ”€β”€ MenuViewModel.swift
β”‚   β”‚   β”œβ”€β”€ UserViewModel.swift
β”‚   β”‚   └── OrderViewModel.swift
β”‚   β”œβ”€β”€ πŸ“‚ Views/
β”‚   β”‚   β”œβ”€β”€ Onboarding/
β”‚   β”‚   β”‚   β”œβ”€β”€ OnboardingView.swift
β”‚   β”‚   β”‚   └── RegistrationForm.swift
β”‚   β”‚   β”œβ”€β”€ Home/
β”‚   β”‚   β”‚   β”œβ”€β”€ HomeView.swift
β”‚   β”‚   β”‚   β”œβ”€β”€ HeaderView.swift
β”‚   β”‚   β”‚   β”œβ”€β”€ HeroSection.swift
β”‚   β”‚   β”‚   └── CategoryFilter.swift
β”‚   β”‚   β”œβ”€β”€ Menu/
β”‚   β”‚   β”‚   β”œβ”€β”€ MenuView.swift
β”‚   β”‚   β”‚   β”œβ”€β”€ MenuItemCard.swift
β”‚   β”‚   β”‚   └── MenuDetailView.swift
β”‚   β”‚   β”œβ”€β”€ Profile/
β”‚   β”‚   β”‚   β”œβ”€β”€ ProfileView.swift
β”‚   β”‚   β”‚   └── ProfileForm.swift
β”‚   β”‚   └── Components/
β”‚   β”‚       β”œβ”€β”€ PrimaryButton.swift
β”‚   β”‚       β”œβ”€β”€ LittleLemonTextField.swift
β”‚   β”‚       └── RatingView.swift
β”‚   β”œβ”€β”€ πŸ“‚ Utilities/
β”‚   β”‚   β”œβ”€β”€ Constants.swift
β”‚   β”‚   β”œβ”€β”€ Extensions.swift
β”‚   β”‚   └── Validators.swift
β”‚   β”œβ”€β”€ LittleLemonApp.swift
β”‚   └── Styles.swift
β”‚
β”œβ”€β”€ πŸ“‚ Design Assets/
β”‚   β”œβ”€β”€ Canvas_Wireframe.fig
β”‚   β”œβ”€β”€ Canvas_Wireframe_Final.fig
β”‚   β”œβ”€β”€ PG_LittleLemon_StyleGuide.pdf
β”‚   β”œβ”€β”€ my-style-guide.pdf
β”‚   └── my-wireframe.pdf
β”‚
β”œβ”€β”€ πŸ“‚ Screenshots/
β”‚   β”œβ”€β”€ Onboarding.png
β”‚   β”œβ”€β”€ Home.png
β”‚   β”œβ”€β”€ Profile.png
β”‚   └── Menu Detail.png
β”‚
β”œβ”€β”€ πŸ“œ README.md
└── πŸ“œ LittleLemonApp.xcodeproj

✨ Key Features & Capabilities

🏠 Home Dashboard

  • Hero Banner with promotional content
  • Dynamic Menu Categories (Starters, Mains, Desserts, Drinks)
  • Featured Items section with visual highlights
  • Quick Order functionality for popular items

πŸ‘€ User Experience

  • Onboarding Flow with user registration
  • Profile Management with persistent storage
  • Order History tracking
  • Favorite Items bookmarking system

πŸ›οΈ Ordering System

  • Menu Browsing with detailed item views
  • Cart Management with real-time updates
  • Order Summary with pricing breakdown
  • Checkout Process with confirmation

βš™οΈ Technical Features

  • Data Persistence using Core Data
  • Form Validation for user inputs
  • Responsive Design for all iOS devices
  • Dark/Light Mode support

πŸ› οΈ Technical Skills Demonstrated

Swift & SwiftUI Mastery

SwiftUI MVVM Architecture State Management Core Data Custom Components

iOS Development Techniques

  • Programmatic Navigation with NavigationStack
  • Dynamic Layouts using VStack, HStack, and ZStack
  • Custom Modifiers for reusable styling
  • Gesture Recognizers for interactive elements
  • Animation & Transitions for smooth UX

Data Management

  • Core Data Models with relationships
  • UserDefaults for lightweight storage
  • ViewModels for business logic separation
  • Data Binding with @State, @Binding, @ObservedObject

πŸ“Š App Architecture

MVVM Pattern Implementation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Views       β”‚    β”‚   ViewModels    β”‚    β”‚     Models      β”‚
β”‚                 β”‚    β”‚                 β”‚    β”‚                 β”‚
β”‚ β€’ SwiftUI Views │◄──►│ β€’ Business Logic│◄──►│ β€’ Data Models   β”‚
β”‚ β€’ Components    β”‚    β”‚ β€’ State Mgmt    β”‚    β”‚ β€’ Core Data     β”‚
β”‚ β€’ UI Layout     β”‚    β”‚ β€’ Networking    β”‚    β”‚ β€’ Structures    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                        β”‚                        β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚
                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                          β”‚   Services    β”‚
                          β”‚               β”‚
                          β”‚ β€’ Persistence β”‚
                          β”‚ β€’ Validation  β”‚
                          β”‚ β€’ Utilities   β”‚
                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Components

  1. LittleLemonApp.swift - App entry point and main configuration
  2. MainTabView.swift - Root navigation structure
  3. Persistence.swift - Core Data stack management
  4. MenuViewModel.swift - Central business logic for menu operations

🎨 Design System

Color Palette

struct LittleLemonColors {
    static let primaryGreen = Color(hex: "#495E57")
    static let primaryYellow = Color(hex: "#F4CE14")
    static let secondaryOrange = Color(hex: "#EE9972")
    static let secondaryBeige = Color(hex: "#FBDABB")
    static let highlightWhite = Color(hex: "#EDEFEE")
    static let highlightBlack = Color(hex: "#333333")
}

Typography

  • Headlines: Markazi Text Bold (64pt, 40pt)
  • Subtitles: Karla Regular (40pt, 24pt)
  • Body Text: Karla Regular (20pt, 16pt)
  • Navigation: Karla Medium (20pt)

Spacing System

struct Spacing {
    static let xs: CGFloat = 4
    static let sm: CGFloat = 8
    static let md: CGFloat = 16
    static let lg: CGFloat = 24
    static let xl: CGFloat = 32
    static let xxl: CGFloat = 48
}

πŸš€ Getting Started

Prerequisites

  • Xcode 14+ (Recommended: Xcode 15)
  • iOS 16.0+ deployment target
  • Swift 5.9+ programming language
  • macOS 13.0+ for development

Installation Steps

  1. Clone the repository

    git clone https://github.com/Willie-Conway/Little-Lemon-Food-Ordering-App.git
  2. Navigate to project directory

    cd Little-Lemon-Food-Ordering-App
  3. Open project in Xcode

    open LittleLemonApp.xcodeproj
  4. Configure signing

    • Select your team in Signing & Capabilities
    • Or use "Personal Team" for simulator testing
  5. Build and Run

    • Select target device/simulator
    • Press ⌘ + R or click Run button
    • Wait for build to complete

Running on Physical Device

  1. Connect iOS device via USB
  2. Select device from Xcode device menu
  3. Trust developer certificate on device
  4. Build and run as usual

πŸ“± Screen Implementation Details

Onboarding Screen

  • Form Validation: Real-time input validation
  • Data Persistence: Saves user profile to Core Data
  • Navigation Control: Conditional navigation based on onboarding completion
  • Error Handling: User-friendly error messages

Home Screen

  • Hero Section: Dynamic promotional content
  • Category Filters: Interactive filtering system
  • Menu Grid: Responsive grid layout
  • Search Functionality: Real-time menu search

Profile Screen

  • Editable Form: In-place editing of user details
  • Data Binding: Two-way binding with Core Data
  • Image Picker: Profile photo selection
  • Preference Settings: Dietary preferences and notifications

Menu Detail Screen

  • Image Gallery: Swipeable image carousel
  • Ingredient List: Expandable ingredient details
  • Nutrition Facts: Modal nutrition information
  • Add to Cart: Quantity selector with price calculation

πŸ”§ Customization Guide

Adding New Menu Items

  1. Update MenuData.json in Resources folder
  2. Add new images to Assets.xcassets
  3. Run data import in MenuViewModel

Modifying Color Scheme

Edit Styles.swift:

extension Color {
    static let littleLemonGreen = Color("PrimaryGreen")
    // Add custom colors here
}

Adding New Features

  1. Create new View in Views/ directory
  2. Add corresponding ViewModel if needed
  3. Update navigation in MainTabView.swift
  4. Add necessary assets and localization

πŸ§ͺ Testing Strategy

Unit Tests

  • ViewModel logic testing
  • Model validation tests
  • Utility function tests

UI Tests

  • Navigation flow testing
  • User interaction testing
  • Form validation testing

Manual Testing Checklist

  • Onboarding flow completion
  • Profile data persistence
  • Menu filtering functionality
  • Cart management operations
  • Checkout process
  • App state restoration

πŸ“„ Data Models

UserProfile

struct UserProfile {
    var firstName: String
    var lastName: String
    var email: String
    var phoneNumber: String
    var profileImage: Data?
    var dietaryPreferences: [String]
    var orderHistory: [Order]
}

MenuItem

struct MenuItem: Identifiable {
    let id = UUID()
    let name: String
    let description: String
    let price: Double
    let category: MenuCategory
    let imageName: String
    let ingredients: [String]
    let nutrition: NutritionInfo
    let isFeatured: Bool
}

Order

struct Order: Identifiable {
    let id = UUID()
    let items: [OrderItem]
    let totalAmount: Double
    let orderDate: Date
    let status: OrderStatus
    let deliveryAddress: String?
}

πŸ† Project Achievements

βœ… Complete iOS App with 4 main screens
βœ… Core Data Integration for persistent storage
βœ… Custom UI Components with reusable design
βœ… Form Validation with user feedback
βœ… Responsive Design for all iOS devices
βœ… Professional Code Structure following best practices
βœ… App Store Ready packaging and configuration

πŸ“± Supported Devices

iPhone

  • iPhone 15 Pro Max (6.7")
  • iPhone 15 (6.1")
  • iPhone SE (4.7")

iPad

  • iPad Pro 12.9"
  • iPad Air 10.9"
  • iPad Mini 8.3"

Orientation Support

  • Portrait mode (Primary)
  • Landscape mode (Adaptive)

πŸ”— Dependencies

Built-in Frameworks

  • SwiftUI - UI framework
  • Core Data - Data persistence
  • Combine - Reactive programming
  • Foundation - Core functionality

No External Dependencies

This project uses only Apple's built-in frameworks, ensuring:

  • No package manager requirements
  • Easy compilation and distribution
  • Apple platform compatibility
  • Long-term maintenance simplicity

πŸ“ Development Notes

Challenges & Solutions

  1. State Management - Implemented @StateObject and @EnvironmentObject
  2. Data Persistence - Used Core Data with SwiftUI integration
  3. UI Consistency - Created custom modifier system
  4. Navigation Complexity - Implemented NavigationStack with programmatic control

Best Practices Implemented

  • Modular Architecture - Separated concerns with clear boundaries
  • Code Reusability - Custom components and modifiers
  • Error Handling - Comprehensive error catching and user feedback
  • Performance Optimization - Lazy loading and efficient data fetching

🀝 Contributing

While this is a capstone project, improvements are welcome:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/enhancement)
  3. Commit changes (git commit -m 'Add enhancement')
  4. Push to branch (git push origin feature/enhancement)
  5. Open a Pull Request

πŸ“ž Support & Issues

For technical issues or questions:

  1. Check existing GitHub Issues
  2. Create a new issue with:
    • Detailed description
    • Steps to reproduce
    • Device/iOS version
    • Screenshots if applicable

πŸ™ Acknowledgments

  • Meta iOS Developer Program for curriculum and guidance
  • Coursera Platform for course delivery
  • Apple Developer Documentation for comprehensive resources
  • SwiftUI Community for shared knowledge and patterns

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


Enjoy your meal with Little Lemon! πŸ‹βœ¨

Project Completed: Dec 15, 2023 Last Updated: Jan 28, 2025 Xcode Version: 15.2 Swift Version: 5.9

About

πŸ‹ Little Lemon Food Ordering App - iOS restaurant menu & ordering application built with SwiftUI for the Meta iOS Developer Certificate capstone project πŸ“±βœ¨

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages