summaryrefslogtreecommitdiff
path: root/issues/013-quick-add-shopping-list.md
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-01-22 10:09:07 -1000
committerPeter Stone <thepeterstone@gmail.com>2026-01-22 10:09:07 -1000
commit7fd381a242f68b7c6f10db4e3ae0bb3d06e36a16 (patch)
treeabff0af0a0f3b057d7b1ad6d95dbefdf30c553c3 /issues/013-quick-add-shopping-list.md
parent583f90c5dedf0235fa45557359b0e6e7dd62b0f0 (diff)
Fix background image CORS issue
Switch from Unsplash Source API to Lorem Picsum which has proper CORS headers for cross-origin image loading. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'issues/013-quick-add-shopping-list.md')
-rw-r--r--issues/013-quick-add-shopping-list.md81
1 files changed, 81 insertions, 0 deletions
diff --git a/issues/013-quick-add-shopping-list.md b/issues/013-quick-add-shopping-list.md
new file mode 100644
index 0000000..e09ab92
--- /dev/null
+++ b/issues/013-quick-add-shopping-list.md
@@ -0,0 +1,81 @@
+# [FEATURE] Quick add for shopping list items
+
+## Description
+Add a quick add interface for shopping list items.
+
+## User Story
+As a user, I want to quickly add items to my shopping list without navigating away.
+
+## Technical Context
+- Requires decision on backend: PlanToEat API vs local SQLite
+- May need new table `shopping_items` if local
+- Could integrate with modal menu from issue #002
+
+## Test Strategy
+
+### Unit Test (Red)
+**File:** `internal/store/sqlite_test.go`
+
+```go
+func TestAddShoppingItem(t *testing.T) {
+ store := setupTestStore(t)
+
+ err := store.AddShoppingItem(ShoppingItem{
+ Name: "Milk",
+ Quantity: "1 gallon",
+ })
+
+ assert.NoError(t, err)
+
+ items, _ := store.GetShoppingItems()
+ assert.Len(t, items, 1)
+ assert.Equal(t, "Milk", items[0].Name)
+}
+```
+
+### E2E Test (Red)
+Quick-add form submits, item appears in list.
+
+## Proposed Approach
+
+1. **Decide backend:**
+ - Option A: PlanToEat API (if it supports shopping lists)
+ - Option B: Local SQLite table (simpler, offline-capable)
+
+2. **Database (if local):**
+ ```sql
+ CREATE TABLE shopping_items (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ name TEXT NOT NULL,
+ quantity TEXT,
+ checked BOOLEAN DEFAULT 0,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+ ```
+
+3. **Handler:**
+ - `POST /api/shopping/add` — add item
+ - `GET /api/shopping` — list items
+ - `PUT /api/shopping/{id}/check` — toggle checked
+ - `DELETE /api/shopping/{id}` — remove item
+
+4. **UI:**
+ - Quick-add form in modal menu (integrate with #002) or meals tab
+ - Simple input: item name, optional quantity
+ - List view with checkboxes
+
+## Affected Components
+- `internal/store/sqlite.go` (new table/methods)
+- `internal/store/sqlite_test.go`
+- `internal/handlers/handlers.go` (new endpoints)
+- `web/templates/partials/shopping-list.html` (new)
+- Potentially `web/templates/partials/modal-menu.html` (from #002)
+
+## Definition of Done
+- [ ] Can add items via quick-add form
+- [ ] Items persisted (API or local)
+- [ ] Items displayed in list view
+- [ ] Can check/uncheck items
+- [ ] Can delete items
+- [ ] Unit tests for store operations
+- [ ] E2E test for add flow