Djavaweb Coding Test

RecipeBuddy

SwiftUI + MVVM
Goal

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.

Tech constraints

Requirements by level

Level 1

Core (required, 60 pts)

Scoring guide:
list/detail 20, search 10, favorites 10, states 10, structure 10.

Level 2

Plus (nice to have, 25 pts)

Scoring guide:
sort/filter 10, offline-first 10, tests 5

Level 3

Pro (differentiator, 10 pts)

Scoring guide:
meal plan + shopping list 8, share sheet 2.

Bonus

Craftsmanship (up to 5 pts)

Sample data

place as recipes.json in the app bundle
				
					[
  {
    "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."
    ]
  }
]
				
			

Deliverables

Evaluation rubric

(100 pts)

Qualitative checks

Disqualifiers

Submission Form​

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.

If your file is larger than 20MB, please upload it to Google Drive and share the link below.