diff --git a/apps/mobile/src/app/(tabs)/home.tsx b/apps/mobile/src/app/(tabs)/home.tsx
index 3aa63ae..37a2c8d 100644
--- a/apps/mobile/src/app/(tabs)/home.tsx
+++ b/apps/mobile/src/app/(tabs)/home.tsx
@@ -135,6 +135,10 @@ export default function HomeScreen() {
⭐ Dina sparade recept
+ router.push("/submit-recipe")}>
+ ✍️ Skicka in eget recept
+
+
{/* Matlager – städat, öppnas per plats eller som helhet (spec §8). */}
🧺 {t("home.inventory")}
diff --git a/apps/mobile/src/app/submit-recipe.tsx b/apps/mobile/src/app/submit-recipe.tsx
new file mode 100644
index 0000000..3f8e09c
--- /dev/null
+++ b/apps/mobile/src/app/submit-recipe.tsx
@@ -0,0 +1,143 @@
+import { useState } from "react";
+import { router } from "expo-router";
+import { api, ApiError } from "@/lib/api";
+import { t } from "@/lib/i18n";
+import { Body, Button, Card, Heading, Input, Screen, Small, Spacer, Title } from "@/components/ui";
+import { spacing } from "@/lib/theme";
+
+/**
+ * Skicka in eget recept (spec §35). Enkel mall: titel + ingredienser
+ * (mängd + gram/kilo) + tillagning. Skickas som fritext → AAMOS
+ * (STRUCTURE_RECIPE_TEXT) tolkar och strukturerar, workern AI-granskar,
+ * dubblettkollar, finskriver och auto-publicerar – märkt med ditt namn.
+ */
+
+type Phase = "form" | "done" | "premium";
+
+export default function SubmitRecipeScreen() {
+ const [title, setTitle] = useState("");
+ const [ingredients, setIngredients] = useState("");
+ const [steps, setSteps] = useState("");
+ const [busy, setBusy] = useState(false);
+ const [error, setError] = useState(null);
+ const [phase, setPhase] = useState("form");
+
+ const canSubmit =
+ title.trim().length >= 3 && ingredients.trim().length >= 3 && steps.trim().length >= 3;
+
+ const submit = async () => {
+ if (!canSubmit || busy) return;
+ setBusy(true);
+ setError(null);
+ // Bygg en tydlig fritext-mall som AI:n tolkar robust.
+ const text = [
+ `Titel: ${title.trim()}`,
+ "",
+ "Ingredienser:",
+ ingredients.trim(),
+ "",
+ "Gör så här:",
+ steps.trim(),
+ ].join("\n");
+ try {
+ await api("/v1/recipes", { method: "POST", body: { mode: "free_text", text } });
+ setPhase("done");
+ } catch (err) {
+ if (err instanceof ApiError && err.status === 402) {
+ setPhase("premium");
+ } else {
+ setError(err instanceof Error ? err.message : t("common.error"));
+ }
+ } finally {
+ setBusy(false);
+ }
+ };
+
+ if (phase === "done") {
+ return (
+
+
+ 🎉 {t("submit.successTitle")}
+ {t("submit.successBody")}
+
+
+
+ );
+ }
+
+ if (phase === "premium") {
+ return (
+
+
+ ⭐ {t("submit.premiumTitle")}
+ {t("submit.premiumBody")}
+
+
+
+ );
+ }
+
+ return (
+
+ {t("submit.title")}
+ {t("submit.subtitle")}
+
+
+ {t("submit.titleLabel")}
+
+
+
+ {t("submit.ingredientsLabel")}
+
+
+
+ {t("submit.stepsLabel")}
+
+
+
+ {error && (
+ <>
+ {`⚠️ ${error}`}
+
+ >
+ )}
+
+ void submit()}
+ loading={busy}
+ disabled={!canSubmit}
+ />
+
+ {t("submit.reviewNote")}
+
+ );
+}
diff --git a/apps/mobile/src/locales/sv/common.json b/apps/mobile/src/locales/sv/common.json
index 01cecc8..5909db5 100644
--- a/apps/mobile/src/locales/sv/common.json
+++ b/apps/mobile/src/locales/sv/common.json
@@ -463,5 +463,22 @@
"barcode.info.noNutrition": "Ingen näringsinfo finns för den här produkten ännu.",
"barcode.info.scanAgain": "Skanna igen",
"barcode.info.sourceOwn": "Källa: egen produktdatabas",
- "barcode.info.sourceOff": "Källa: Open Food Facts"
+ "barcode.info.sourceOff": "Källa: Open Food Facts",
+ "submit.title": "Skicka in eget recept",
+ "submit.subtitle": "Fyll i mallen så finskriver och publicerar vår AI receptet – märkt med ditt namn.",
+ "submit.titleLabel": "Receptets namn",
+ "submit.titlePlaceholder": "t.ex. Mormors köttbullar",
+ "submit.ingredientsLabel": "Ingredienser (en per rad, med mängd)",
+ "submit.ingredientsPlaceholder": "2 dl vetemjöl\n500 g köttfärs\n1 gul lök\n1 dl mjölk\n1 tsk salt",
+ "submit.stepsLabel": "Gör så här",
+ "submit.stepsPlaceholder": "1. Hacka och fräs löken mjuk.\n2. Blanda färs, ägg, mjölk och kryddor.\n3. Rulla bollar och stek gyllene.",
+ "submit.button": "Skicka in receptet",
+ "submit.sending": "Skickar …",
+ "submit.reviewNote": "Vi jämför mot befintliga recept, putsar språket till samma standard och publicerar automatiskt. Dubbletter läggs inte ut.",
+ "submit.successTitle": "Tack – receptet är inskickat!",
+ "submit.successBody": "Vår AI läser igenom, granskar och finskriver det. Det publiceras strax, märkt med ditt namn, och dyker upp bland recepten.",
+ "submit.premiumTitle": "Egna recept ingår i Premium",
+ "submit.premiumBody": "Att skicka in och publicera egna recept ingår i Premium. Starta din provperiod eller uppgradera så kör vi.",
+ "submit.seePlans": "Se planer",
+ "submit.backHome": "Tillbaka"
}