Academy v4: 3 research-backed lessons (30 slides + audio); new bean logo; custom plan/lot names
Test and deploy / test-and-deploy (push) Successful in 59s

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
Shane Maynard
2026-08-09 14:30:42 -04:00
co-authored by Claude Fable 5
parent ec078116b4
commit 8b80c3fa6f
65 changed files with 1315 additions and 78 deletions
+6 -3
View File
@@ -35,11 +35,12 @@ function renderLots() {
const lotCell = document.createElement("td");
const strong = document.createElement("strong");
strong.textContent = lot.origin;
strong.textContent = lot.name || lot.origin;
const sub = document.createElement("div");
sub.className = "muted";
sub.style.fontSize = "11.5px";
sub.textContent = [lot.variety, lot.producer].filter(Boolean).join(" · ") || "—";
const subParts = lot.name ? [lot.origin, lot.variety, lot.producer] : [lot.variety, lot.producer];
sub.textContent = subParts.filter(Boolean).join(" · ") || "—";
lotCell.append(strong, sub);
const processCell = document.createElement("td");
@@ -107,7 +108,7 @@ function renderLots() {
deleteBtn.textContent = "Delete";
deleteBtn.addEventListener("click", (event) =>
guarded(event.currentTarget, async () => {
if (!confirm(`Delete the ${lot.origin} lot? This cannot be undone.`))
if (!confirm(`Delete the ${lot.name || lot.origin} lot? This cannot be undone.`))
return;
try {
await api(`/api/inventory/${lot.id}`, { method: "DELETE" });
@@ -178,6 +179,7 @@ function startEdit(lot) {
editingId = lot.id;
const form = document.getElementById("lot-form");
form.id.value = lot.id;
form.name.value = lot.name || "";
form.origin.value = lot.origin;
form.variety.value = lot.variety;
form.process.value = lot.process;
@@ -221,6 +223,7 @@ document.getElementById("lot-form").addEventListener("submit", (event) => {
guarded(submitBtn, async () => {
try {
const payload = {
name: data.name,
origin: data.origin,
variety: data.variety,
process: data.process,