diff --git a/app/Http/Controllers/InertiaMinimal/RecipeController.php b/app/Http/Controllers/InertiaMinimal/RecipeController.php
new file mode 100644
index 0000000..e0cecc5
--- /dev/null
+++ b/app/Http/Controllers/InertiaMinimal/RecipeController.php
@@ -0,0 +1,82 @@
+ Recipe::query()
+ ->paginate(12)
+ ->through(fn($recipe) => [
+ 'id' => $recipe->id,
+ 'title' => $recipe->title,
+ 'slug' => $recipe->slug,
+ 'image' => $recipe->getFirstMediaUrl('recipe_image', 'card'),
+ ]),
+ ]);
+ }
+
+ /**
+ * Display the specified resource.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param string $slug
+ * @return \Inertia\Response
+ */
+ public function show(Request $request, string $slug)
+ {
+ $recipe = Recipe::findBySlug($slug);
+
+ return Inertia::render('Recipes/Show', [
+ 'recipe' => [
+ 'id' => $recipe->id,
+ 'title' => $recipe->title,
+ 'slug' => $recipe->slug,
+ 'image' => $recipe->getFirstMediaUrl('recipe_image', 'show'),
+ 'summary' => $recipe->summary,
+ 'tags' => $recipe->tags->pluck('name'),
+ 'servings' => $recipe->servings,
+ 'preparation_minutes' => $recipe->preparation_minutes,
+ 'cooking_minutes' => $recipe->cooking_minutes,
+ 'difficulty' => Str::ucfirst(__('recipes.' . $recipe->difficulty)),
+ 'ingredients' => new IngredientsResource($recipe->ingredients),
+ 'instructions' => $recipe->instructions,
+ 'source_label' => $recipe->source_label,
+ 'source_link' => $recipe->source_link,
+ 'created_at' => $recipe->created_at,
+ 'structured_data' => [
+ 'description' => strip_tags($recipe->summary),
+ 'ingredients' => new StructuredDataIngredientsResource($recipe->ingredients),
+ 'instructions' => new InstructionsResource($recipe->instructions),
+ 'keywords' => implode(',', $recipe->tags->pluck('name')->toArray()),
+ ],
+ ],
+ ])->withViewData([
+ 'open_graph' => [
+ 'title' => $recipe->title,
+ 'image' => $recipe->getFirstMediaUrl('recipe_image', 'show'),
+ 'url' => URL::current(),
+ ],
+ ]);
+ }
+}
diff --git a/app/Http/Middleware/Inertia/HandleInertiaMinimalRequests.php b/app/Http/Middleware/Inertia/HandleInertiaMinimalRequests.php
new file mode 100644
index 0000000..8b4cdf8
--- /dev/null
+++ b/app/Http/Middleware/Inertia/HandleInertiaMinimalRequests.php
@@ -0,0 +1,53 @@
+ [
+ 'user' => $request->user(),
+ ],
+ 'flash' => [
+ 'error' => fn() => $request->session()->get('error'),
+ 'success' => fn() => $request->session()->get('success'),
+ 'warning' => fn() => $request->session()->get('warning'),
+ ],
+ 'ziggy' => function () use ($request) {
+ return array_merge((new Ziggy)->toArray(), [
+ 'location' => $request->url(),
+ ]);
+ },
+ ]);
+ }
+}
diff --git a/resources/js/InertiaMinimal/Components/Pagination.vue b/resources/js/InertiaMinimal/Components/Pagination.vue
new file mode 100644
index 0000000..d4ba623
--- /dev/null
+++ b/resources/js/InertiaMinimal/Components/Pagination.vue
@@ -0,0 +1,25 @@
+
+
+
+ Je hebt nog geen recepten opgeslagen.
+ Bron:
+
+ {{ recipe.source_label ?? recipe.source_link }}
+
+
+ {{ recipe.source_label }}
+
+ {{ recipe.title }}
+
+
diff --git a/resources/js/InertiaMinimal/Layouts/Default.vue b/resources/js/InertiaMinimal/Layouts/Default.vue
new file mode 100644
index 0000000..c36ed5d
--- /dev/null
+++ b/resources/js/InertiaMinimal/Layouts/Default.vue
@@ -0,0 +1,5 @@
+
+ Recipes
+
+
+ {{ recipe.title }}
+
+
+ {{ recipe.servings }} {{ servingsLabel }}
+
+ {{ recipe.difficulty }}
+
+ {{ recipe.preparation_minutes }} minuten
+
+ {{ recipe.cooking_minutes }} minuten
+ Ingrediƫnten
+
+ {{ list.title }}
+
+
+
+ Instructies
+
+
+
+