The native SwiftUI iPhone app for Potluck β the Singapore home-cook marketplace at potluckhub.io connecting home chefs with food lovers. Discover talented local cooks, browse their menus, and book authentic home-cooked dining experiences.
Companion to the Potluck web platform β the home-cook marketplace site potluckhub.io. This app talks directly to the production Potluck API (
api.potluckhub.io) β no mock data.
| Explore | Dishes | Chef Profile | Sign In | Bookings |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
- Explore home chefs β featured carousel, full directory, search, and nine cuisine filters ordered Singapore-local first (Malay, Chinese, Indian, Halal, Vegetarian, Thai, Japanese, Korean, Western)
- Browse dishes β a photo-rich grid of menus across every chef, with prices and ratings
- Verified & Featured chefs β trust badges backed by Potluck's in-person site-visit verification (how it works), with featured chefs highlighted
- Chef profiles β bio, specialties, social links, full menu, and live guest reviews
- Write reviews & share β rate a chef (1-5 stars), write a review, and share chefs & dishes via the system share sheet
- Booking & online payment β pick a date and guest count, then pay in-app by credit/debit card (Stripe), PayPal, or PayNow (HitPay) through a secure hosted checkout with live order-status polling
- Accounts β register / sign in against the live API, with tokens stored securely in the Keychain
- My bookings β track requested and confirmed dining experiences
| Area | Choice |
|---|---|
| UI | SwiftUI (iOS 17+), NavigationStack, TabView |
| Networking | async/await URLSession, Codable, typed APIError |
| Auth | JWT access/refresh tokens persisted in the Keychain |
| State | ObservableObject view models per screen |
| Project gen | XcodeGen (project.yml) |
| Backend | Potluck REST API β https://api.potluckhub.io/api/v1 (catalog/auth) + https://potluckhub.io/api (checkout & reviews, shared with the website and Android app) |
Potluck/
βββ App/ # @main entry, Theme (brand palette), RootView (tabs)
βββ Networking/ # APIClient, PotluckService, CheckoutService, ReviewsService, Models
βββ Auth/ # AuthManager (session) + Keychain wrapper
βββ Components/ # Reusable views (RemoteImage, RatingLabel, Pill, statesβ¦)
βββ Features/
βββ Explore/ # Chef discovery + chef detail
βββ Dishes/ # Menu grid + dish detail
βββ Booking/ # Booking + payment sheet (Stripe / PayPal / HitPay)
βββ Reviews/ # Write-a-review sheet
βββ Bookings/ # My bookings
βββ Profile/ # Auth sheet + profile
The API wraps every response in a { success, data, pagination? } envelope; APIClient
unwraps it generically. Prices are stored as integer cents and ratings sometimes arrive
as strings and sometimes as numbers β a FlexNumber decoder handles both.
Requires Xcode 26 (App Store uploads need the iOS 26 SDK) and XcodeGen (brew install xcodegen).
# Generate the Xcode project from project.yml
xcodegen generate
# Open and run
open Potluck.xcodeprojThe app points at the production API out of the box, so chefs and dishes load immediately.
# Archive
xcodebuild archive -project Potluck.xcodeproj -scheme Potluck \
-configuration Release -destination 'generic/platform=iOS' \
-archivePath build/Potluck.xcarchive
# Export a signed App Store IPA
xcodebuild -exportArchive -archivePath build/Potluck.xcarchive \
-exportOptionsPlist ExportOptions.plist -exportPath build/export
# Upload to App Store Connect
xcrun altool --upload-app -f build/export/Potluck.ipa -t ios \
--apiKey <KEY_ID> --apiIssuer <ISSUER_ID>- Bundle ID:
io.potluckhub.app - Version: 1.3 (build 20260703)
MIT





