Build a small iPhone app named RecipeBuddy that lets users browse recipes, view details, save favorites, and optionally plan a weekly menu with a shopping list. Focus on SwiftUI, MVVM, async/await, Codable, state management, persistence, clean code, and basic UX.
Core (required, 60 pts)
Scoring guide:
list/detail 20, search 10, favorites 10, states 10, structure 10.
Plus (nice to have, 25 pts)
Scoring guide:
sort/filter 10, offline-first 10, tests 5
Pro (differentiator, 10 pts)
Scoring guide:
meal plan + shopping list 8, share sheet 2.
Craftsmanship (up to 5 pts)
[
{
"id": "r1",
"title": "Garlic Lemon Chicken",
"tags": ["quick", "protein"],
"minutes": 25,
"image": "https://picsum.photos/seed/r1/600/400",
"ingredients": [
{ "name": "Chicken breast", "quantity": "300 g" },
{ "name": "Garlic", "quantity": "3 cloves" },
{ "name": "Lemon", "quantity": "1 pc" },
{ "name": "Olive oil", "quantity": "2 tbsp" },
{ "name": "Salt", "quantity": "to taste" },
{ "name": "Pepper", "quantity": "to taste" }
],
"steps": [
"Marinate chicken with garlic, lemon juice, salt, pepper.",
"Pan sear with olive oil until cooked through.",
"Rest 2 minutes, slice, and serve."
]
},
{
"id": "r2",
"title": "Veggie Pasta Primavera",
"tags": ["vegetarian", "family"],
"minutes": 30,
"image": "https://picsum.photos/seed/r2/600/400",
"ingredients": [
{ "name": "Pasta", "quantity": "200 g" },
{ "name": "Broccoli", "quantity": "1 cup" },
{ "name": "Bell pepper", "quantity": "1 pc" },
{ "name": "Cherry tomatoes", "quantity": "10 pcs" },
{ "name": "Parmesan", "quantity": "30 g" }
],
"steps": [
"Boil pasta until al dente.",
"Sauté veggies lightly, season well.",
"Combine pasta and veggies, finish with parmesan."
]
},
{
"id": "r3",
"title": "Overnight Oats",
"tags": ["breakfast", "quick"],
"minutes": 10,
"image": "https://picsum.photos/seed/r3/600/400",
"ingredients": [
{ "name": "Rolled oats", "quantity": "1/2 cup" },
{ "name": "Milk", "quantity": "1/2 cup" },
{ "name": "Yogurt", "quantity": "1/4 cup" },
{ "name": "Honey", "quantity": "1 tbsp" },
{ "name": "Berries", "quantity": "1/3 cup" }
],
"steps": [
"Mix oats, milk, yogurt, honey in a jar.",
"Refrigerate overnight.",
"Top with berries before serving."
]
}
]
(100 pts)
Additionally, please include a short video (2-5 minutes) explaining your app. The video should demonstrate key features (e.g., browsing recipes, adding favorites, optional meal planning), explain your architecture (e.g., SwiftUI + MVVM implementation), and highlight how you handled the requirements and any challenges. Record using screen recording tools like Loom or QuickTime, upload to YouTube (set as unlisted for privacy), and provide the link in the submission form.