Add a Recipe/steps field to brew logging
Test and deploy / test-and-deploy (push) Successful in 1m16s

Free-text recipe (bloom, pours, timings) distinct from tasting notes and
next-time notes: new brews.recipe column (migration 007), form textarea,
shown under the recipe summary in brew history, carried by Brew again,
included in backups and the OpenAPI spec.

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
Shane Maynard
2026-08-09 08:02:06 -04:00
co-authored by Claude Fable 5
parent 16d5af83f7
commit f781930832
7 changed files with 40 additions and 9 deletions
+5 -3
View File
@@ -44,15 +44,17 @@ const brew = obj({
id: str, beanId: { ...str, nullable: true }, beanName: { ...str, nullable: true },
method: str, doseG: num, waterG: num, yieldG: num, grinder: str, grindSetting: str,
waterTempC: num, brewTimeS: { type: "integer", nullable: true },
bloomTimeS: { type: "integer", nullable: true }, rating: num, tastingNotes: str,
notes: str, brewedAt: str,
bloomTimeS: { type: "integer", nullable: true }, rating: num, recipe: str,
tastingNotes: str, notes: str, brewedAt: str,
});
const brewBody = obj({
beanId: { ...str, nullable: true },
method: { ...str, description: "One of the brew-method keys from GET /api/brew-methods" },
doseG: num, waterG: num, yieldG: num, grinder: str, grindSetting: str, waterTempC: num,
brewTimeS: { type: "integer", nullable: true }, bloomTimeS: { type: "integer", nullable: true },
rating: { ...num, description: "0-10" }, tastingNotes: str, notes: str,
rating: { ...num, description: "0-10" },
recipe: { ...str, description: "Free-text steps (bloom, pours, timings)" },
tastingNotes: str, notes: str,
});
const lot = obj({
id: str, origin: str, variety: str, process: str, producer: str,