← Engineering log
Household Shopping Lists Google Drive AI Skills

RobOS Shopping Lists: Grocery, Target & Costco Lists with Two-Way Google Docs and Mobile Form Controls

We added RobOS Shopping Lists (packages/shopping-lists) to the RobOS Household suite alongside RobOS Household and robos.tax. It comes pre-seeded with three store-tailored lists — 1) Grocery, 2) Target, and 3) Costco — with form-driven item entry, −/+ quantity steppers, 1-tap staple chips, per-row remove/undo buttons, a live mobile web companion (:19225), the /shopping-lists CLI & AI skill, and two-way synchronization with native Google Docs in Google Drive.

RobOS Shopping Lists desktop interface on the 1) Grocery tab with 3 store cards, form-driven Add Item card, 1-tap staple chips, aisle-grouped items, and Google Docs & Drive sync sidebar
RobOS Shopping Lists (packages/shopping-lists). Pre-seeded with 1) 🥬 Grocery, 2) 🎯 Target, and 3) 📦 Costco, featuring a structured Add Item form, −/+ quantity steppers, 1-tap staple pills, per-row check-off and remove buttons, and two-way Google Docs & Drive sync.

Why we built it. In the RobOS Household line of apps (Family Finances and robos.tax), statement reconciliation and spending categories start with what the household actually buys week to week. Keeping a shopping list in a raw notes doc on a phone works for reading, but typing bullet points on a mobile keyboard while pushing a cart through Costco or Target is clumsy. We wanted household shopping lists that are viewable as native Google Docs in Google Drive on any mobile phone while also providing form-like buttons to add, step quantities, check off, and remove items — pre-seeded out of the box with 1) Grocery, 2) Target, and 3) Costco.

1. Three Store-Tailored Household Lists: Grocery, Target & Costco

Rather than dumping weekly produce, pharmacy errands, and warehouse bulk cases into one generic list, packages/shopping-lists/lib/defaults.js seeds three store-specific lists in ~/.config/robos/household/shopping-lists.json:

  • 1) 🥬 Grocery (grocery / @grocery): Emerald accent theme with auto-detected aisles for Produce, Dairy & Eggs, Bakery, Meat & Seafood, Pantry & Dry Goods, Frozen, Beverages, Snacks, and Household, plus 12 one-tap staple chips (Organic Whole Milk, Pasture-Raised Eggs, Hass Avocados, Honeycrisp Apples, Sourdough Loaf, Baby Spinach, Greek Yogurt, Chicken Thighs, Cold Brew, San Marzano Tomatoes, Grass-Fed Butter, Bananas).
  • 2) 🎯 Target (target / @target): Bullseye red accent theme with aisles for Household Essentials, Personal Care & Beauty, Health & Pharmacy, Kitchen & Dining, Home & Storage, Kids & Pets, and Electronics & Tech, plus 10 one-tap staples (Free & Clear Laundry Pods, Dishwasher Pacs, Foaming Hand Soap, Sensodyne 2-Pack, Ziploc Bags, AA Batteries, Parchment Paper, Allergy Relief, Facial Tissues, USB-C Cable).
  • 3) 📦 Costco (costco / @costco): Warehouse blue accent theme with aisles for Kirkland Signature, Rotisserie & Deli, Bulk Produce, Meat & Poultry, Freezer Bulk, Pantry & Oils, Paper & Cleaning, and Beverages & Cases, plus 10 bulk staples (Hot Rotisserie Chicken, Kirkland Paper Towels, Kirkland Bath Tissue, 2L Extra Virgin Olive Oil, Kerrygold Butter 4pk, Butter Croissants, Organic Blueberries, Topo Chico Case, Wild Mahi-Mahi, Kirkland Mixed Nuts).
RobOS Shopping Lists switched to 2) Target showing bullseye red theme, Target staples, and household essentials
2) 🎯 Target Shopping List. Bullseye red theme, Target Circle coupon badges, and household/pharmacy aisle grouping.
RobOS Shopping Lists switched to 3) Costco showing warehouse blue theme, Kirkland Signature items, and case quantities
3) 📦 Costco Shopping List. Warehouse blue theme, Kirkland Signature aisle, and live mobile sync.

2. Form-Like Add/Remove Controls & Smart Multi-Store Paste

Every item interaction is button-driven so you never have to select and backspace text lines by hand:

  • Structured Add Item Form: Enter the item name, tap − / + to adjust quantity, pick a unit (ea, pack, lb, oz, gal, case, bag, box, bunch, bottle, jar), let detectAisle() auto-classify the store department, add an optional estimated unit price ($) and coupon/brand note, and attach a highlight badge (🔥 Must Have, 🏷️ Sale / Coupon, 🌿 Organic, ⭐ Store Brand / Fav).
  • Per-Row Stepper, Edit, Remove & Undo Buttons: Each item row has a circular check-off button (updating the SVG cart progress ring and remaining dollar estimate), inline − and + quantity steppers, an Edit dialog button, and a 🗑️ Remove button backed by a 12-level ↩ Undo stack and 🧹 Clear Checked.
  • Household Finance CSV Export: Clicking 💳 Export Household CSV exports the list with merchant, category, aisle, quantity, unit price, line total, and status so it drops straight into RobOS Household spending workflows.

3. Two-Way Google Docs in Google Drive + Mobile Web Form

To make the lists both readable/editable in the Google Docs mobile app and controllable via mobile form buttons, packages/shopping-lists combines two mobile surfaces:

Mobile Device Experience Preview showing the native Google Docs Mobile View for Costco Shopping List with checkboxes, aisles, and top link to the interactive mobile form
Google Docs Mobile View. Rendered by renderGoogleDocHtml() and uploaded as a native application/vnd.google-apps.document file in Google Drive.
Mobile Device Experience Preview showing the Interactive Form App on a mobile phone with store switcher tabs, form inputs, quantity steppers, and action buttons
Interactive Mobile Form App (:19225 & Apps Script). Touch-friendly form buttons to add, step quantities, check off, and remove items from your phone.
  1. Native Google Docs Synchronization (lib/google-drive-sync.js): Using your RobOS Google Cloud Account via robos-lib/google-drive-fetch, clicking ☁️ Sync All 3 Lists to Google Docs & Drive creates a RobOS Household Shopping Lists folder in Google Drive containing three native Google Docs (Grocery — RobOS Shopping List, Target — RobOS Shopping List, and Costco — RobOS Shopping List) plus shopping-lists.json. If you toggle checkboxes (☐ → ☑ or [x]) or type new ☐ Item — 2 pack lines in the Google Docs mobile app, parseGoogleDocText() pulls those edits back into RobOS.
  2. LAN QR Mobile Form (:19225) & Serverless Google Drive Apps Script: On home Wi-Fi or RobOS Private Networks, scanning the SVG QR code opens the live mobile web form on :19225 with instant Server-Sent Events (SSE) sync. For 5G cellular inside the store when your home PC is off, RobOS also writes Mobile-Form-Apps-Script/Code.gs and Index.html into your Google Drive folder — deploying it as a Google Apps Script Web App puts a live Tap Here to Add / Remove Items (Mobile Form) button at the top of each Google Doc.
Technical architecture diagram of RobOS Shopping Lists showing Input Surfaces & Skills, Household Store & Smart Parser, Two-Way Google Drive Sync Engine, and Google Drive & Mobile Access
Two-Way Google Docs & Mobile Form Architecture. Desktop UI, Mobile Web Companion (:19225), /shopping-lists CLI/Skill, and RobOS Voice route through the Smart Multi-Store Parser and Persistent Store to Google Drive.

4. The /shopping-lists AI Skill, CLI & Printable Guide

We also registered the /shopping-lists skill (plugins/robos/skills/shopping-lists/SKILL.md) across Claude Code, Codex, Antigravity, Copilot, and Gemini CLI, wired natural-language shopping commands into RobOS Voice (packages/voice-prompt/lib/skills-executor.js), and built a printable cheat sheet at http://127.0.0.1:19225/guide and packages/shopping-lists/PRINTABLE-GUIDE.md:

# Add items across Grocery, Target, and Costco in a single command $ node packages/shopping-lists/bin/shopping-lists.js add \ "2 gal organic milk $4.89 (whole), 4 avocados, laundry pods @target, kirkland paper towels @costco" Added 4 items: • 2 gal Organic milk → Grocery (Dairy & Eggs) • 4 Avocados → Grocery (Produce) • 1 Laundry pods → Target (Household Essentials) • 1 Kirkland paper towels → Costco (Kirkland Signature) # Check off, adjust quantity, ask status in voice mode, or print the command guide $ node packages/shopping-lists/bin/shopping-lists.js check "avocados" Checked off "Hass Avocados" on Grocery. $ node packages/shopping-lists/bin/shopping-lists.js qty "avocados" +2 Updated "Hass Avocados" quantity to 6 ea on Grocery. $ node packages/shopping-lists/bin/shopping-lists.js "what is on my costco list?" --spoken Your Costco list has 8 items to buy ($118.81 estimated): Hot Rotisserie Chicken, 2 pack Kirkland Signature Paper Towels, Extra Virgin Olive Oil (2L), Kerrygold Pure Irish Butter, Frozen Wild Blueberries (3lb), and 3 more. # Run the unit test suite (store, two-way Google Drive mock, QR, text commands) and headless E2E test $ node --test packages/robos-test/tests/shopping-lists/unit.test.js # ℹ tests 7 ℹ pass 7 ℹ fail 0 $ xvfb-run -a node --test packages/robos-test/tests/shopping-lists/e2e.test.js # ℹ tests 1 ℹ pass 1 ℹ fail 0