Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ImLukzy/ChefDash/llms.txt

Use this file to discover all available pages before exploring further.

ChefDash requires no external dependencies, no CocoaPods, and no Swift Package Manager packages — the entire project is self-contained vanilla SwiftUI. All you need is a Mac with Xcode 15 or later installed. Follow the steps below and you will be tapping burger ingredients in the simulator within minutes.

Minimum Requirements

RequirementVersion
Xcode15.0 or later
iOS deployment target17.0 or later
Swift5.9 or later
External dependenciesNone
No Swift Package Manager packages, CocoaPods, or Carthage dependencies are used. There is no Package.swift or Podfile to resolve — the project builds immediately after opening.

Steps

1

Clone the repository

Open Terminal and clone the ChefDash repository from GitHub:
git clone https://github.com/ImLukzy/ChefDash.git
This creates a ChefDash/ directory containing the full Xcode project.
2

Navigate into the project directory

The Xcode project lives one level deeper than the repository root:
cd ChefDash/ChefDash
You should now be inside the directory that contains ChefDash.xcodeproj.
3

Open the Xcode project

Launch the project directly from Terminal:
open ChefDash.xcodeproj
Xcode opens immediately — no dependency resolution or indexing delay since the project has no external packages.
4

Select a simulator and run

In the Xcode toolbar, click the device picker and choose iPhone 15 or any later model running iOS 17+. Then press ⌘R (or click the ▶ Run button) to build and launch the app.
iPhone 15 or iPhone 16 simulators are recommended because the floating tab bar and arcade layout are designed for the standard notch/Dynamic Island form factor. Older devices may show minor layout differences.
5

Explore the Home screen

On launch, the app presents HomeView — the title screen. You will see the “CHEF DASH” branding and a large orange “¡INICIAR PARTIDA!” button at the bottom of the screen. The custom tab bar with Home 🏠, Map 🗺, and Shop 🛒 icons floats above the device’s safe area.The initial coin balance starts at 150 coins, and the default player name is “Chef Novato” with the 👨‍🍳 avatar.
6

Start your first round

Tap “¡INICIAR PARTIDA!” on HomeView. The app navigates to MainMapView (the level select map) by setting gameState.activeTab = "map.fill". From there:
  1. Tap Level 1 — Burger Station (the only unlocked level on first launch).
  2. A pre-game modal appears showing the level details and the consumables you can equip from your shop inventory.
  3. Tap the start button inside the modal — gameState.activeTab switches to "kitchen_round", the tab bar hides, and RecipesView opens.
  4. The countdown begins. Tap each emoji ingredient in the correct order shown by the target recipe stack before time runs out.

App Entry Point

The entire application is bootstrapped in ChefDashApp.swift. This is where GameState is created and injected into the view hierarchy:
@main
struct ChefDashApp: App {
    @StateObject private var gameState = GameState()
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(gameState)
                .preferredColorScheme(.light)
        }
    }
}
GameState is instantiated as a @StateObject — SwiftUI owns the lifetime of this object and ensures it is created exactly once for the life of the app. It is then passed down as an @EnvironmentObject so any view in the hierarchy can access it without prop-drilling.
ChefDashApp sets .preferredColorScheme(.light), but ContentView immediately overrides this with .preferredColorScheme(.dark) on its root ZStack. This is intentional: the arcade dark background (Color(red: 0.08, green: 0.08, blue: 0.10)) and the floating tab bar are designed for a dark environment, and the override ensures the scheme is consistently dark regardless of the user’s system-wide appearance setting.

What Happens at Launch

When GameState.init() runs, it calls setupLevels(), which synchronously builds the full array of 20 Level structs:
  • Levels 1–3 are hand-authored with specific ingredient sets and recipe lists.
  • Levels 4–20 are generated procedurally by a loop that scales targetOrders, availableIngredients, possibleRecipes, and baseTime according to the level index.
The result is stored in gameState.levels, and levels[0] (Level 1 — Burger Station) has isUnlocked: true from the outset. All other levels start locked.

Build docs developers (and LLMs) love