Add Doris Kitchen household recipe app

This commit is contained in:
Fizzlepoof
2026-05-16 20:22:45 +00:00
parent 19f1f8c5e3
commit 9f614ca0e7
30 changed files with 2009 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ title or 'Doris Kitchen' }}</title>
<link rel="stylesheet" href="/static/app.css">
</head>
<body>
<header class="site-header">
<div>
<p class="eyebrow">Doris Kitchen</p>
<h1>Household Recipe Queue</h1>
<p class="lede">Pick recipes, bin bad ones, learn the household taste, and build a cheaper meal week without wasting half a packet of mince. Ha ha.</p>
</div>
<nav>
<a href="/">Queue</a>
<a href="/search">Search</a>
<a href="/planner">Planner</a>
</nav>
</header>
<main class="page-shell">
{% block content %}{% endblock %}
</main>
<script src="/static/app.js"></script>
</body>
</html>

View File

@@ -0,0 +1,73 @@
{% extends 'base.html' %}
{% block content %}
<section class="hero-grid">
<article class="card spotlight">
<p class="section-label">Household taste</p>
<h2>Leanne picks. Doris learns.</h2>
<p class="muted">Queue up web recipes, teach the household profile with yes/no decisions, and keep KitchenOwl for the final recipes worth keeping.</p>
<div class="action-row">
<button type="button" id="seed-button">Seed suggestion queue</button>
<a class="button-link" href="/search">Search a recipe idea</a>
</div>
</article>
<article class="card stats-card">
<div class="stats-grid">
<div><span>Suggested</span><strong id="count-suggested">0</strong></div>
<div><span>Approved</span><strong id="count-approved">0</strong></div>
<div><span>Saved</span><strong id="count-saved">0</strong></div>
<div><span>Rejected</span><strong id="count-rejected">0</strong></div>
<div><span>Plans</span><strong id="count-plans">0</strong></div>
</div>
<p class="muted" id="backend-note">Loading state…</p>
</article>
</section>
<section class="split-grid">
<article class="card">
<div class="section-heading">
<div>
<p class="section-label">Soft blacklist</p>
<h2>Terms to push down</h2>
</div>
</div>
<form id="blacklist-form" class="inline-form">
<input type="text" id="blacklist-name" placeholder="Add ingredient or term">
<button type="submit">Add / enable</button>
</form>
<div id="blacklist-items" class="chip-list muted">Loading…</div>
</article>
<article class="card">
<div class="section-heading">
<div>
<p class="section-label">Preference notes</p>
<h2>Household guidance</h2>
</div>
</div>
<form id="settings-form" class="stack-form">
<label>Notes
<textarea id="profile-notes" rows="4" placeholder="Budget, texture issues, favourite cuisines, or anything else useful."></textarea>
</label>
<label>Auto-import threshold
<input type="number" id="auto-import-threshold" min="50" max="100">
</label>
<label class="checkbox-row">
<input type="checkbox" id="auto-import-enabled">
<span>Allow auto-import when Doris is extremely confident</span>
</label>
<button type="submit">Save settings</button>
</form>
</article>
</section>
<section class="card">
<div class="section-heading">
<div>
<p class="section-label">Queue</p>
<h2>Recent recipe suggestions</h2>
</div>
</div>
<div id="suggestion-list" class="suggestion-grid muted">Loading…</div>
</section>
{% endblock %}

View File

@@ -0,0 +1,41 @@
{% extends 'base.html' %}
{% block content %}
<section class="hero-grid">
<article class="card">
<div class="section-heading">
<div>
<p class="section-label">Meal planner</p>
<h2>Build the week around a few anchor meals</h2>
</div>
</div>
<form id="planner-form" class="stack-form">
<label>Week start
<input type="date" id="week-start">
</label>
<label>How many dinners?
<input type="number" id="target-meals" min="3" max="7" value="5">
</label>
<label>Anchor ideas
<textarea id="planner-anchors" rows="5" placeholder="Ground beef potato skillet&#10;Chicken rice bowls&#10;Pasta bake"></textarea>
</label>
<button type="submit">Build the week</button>
</form>
</article>
<article class="card">
<p class="section-label">What this does</p>
<h2>Waste-aware planning</h2>
<p class="muted">The planner looks at approved and queued meals, then tries to pair dishes that reuse overlapping ingredients. That means less waste, less random spending, and fewer half-dead veg rattling in the fridge drawer.</p>
</article>
</section>
<section class="card">
<div class="section-heading">
<div>
<p class="section-label">Plan output</p>
<h2>Suggested meal week</h2>
</div>
</div>
<div id="plan-output" class="plan-grid muted">Generate a plan to see the meal lineup.</div>
</section>
{% endblock %}

View File

@@ -0,0 +1,28 @@
{% extends 'base.html' %}
{% block content %}
<section class="card search-card">
<div class="section-heading">
<div>
<p class="section-label">Recipe search</p>
<h2>Tell Doris what sort of dinner you want</h2>
</div>
</div>
<form id="search-form" class="stack-form">
<label>Search request
<textarea id="search-query" rows="3" placeholder="Asian inspired using ground beef with potatoes"></textarea>
</label>
<button type="submit">Find recipe suggestions</button>
</form>
</section>
<section class="card">
<div class="section-heading">
<div>
<p class="section-label">Results</p>
<h2>Candidate recipes</h2>
</div>
</div>
<div id="search-results" class="suggestion-grid muted">Search for something to load recipe cards.</div>
</section>
{% endblock %}