Skip to content

Feature proposal: Shopping list enhancements (multiple lists, categories, autocomplete, optional real-time sync)Β #60

Description

@mkocustos

Hi @Logarex πŸ‘‹

I've been contributing a few PRs to AvoCook (#17, #18, #37) and would love to take on a larger feature area. I'd like to propose a set of improvements to the shopping list and wanted to check in first β€” both to get your thoughts and to make sure this aligns with your vision for the app before I start building.

Current state

The app already ships a solid shopping list foundation (src/features/shopping/, ShoppingListScreen, recipe integration). Everything runs against a single list. These proposals extend that foundation.


Proposed work packages

WP1 β€” Multiple named lists with a default (foundation)

Refactor the store from a flat item array to listId β†’ { name, isDefault, items }. Add a list manager UI (create, rename, delete, set default). Migrate existing data on first launch. Everything below builds on this.

WP2 β€” List selection when adding from a recipe

When tapping "Add ingredients" in RecipeDetailScreen and more than one list exists, show a picker. Single-list behaviour is unchanged β€” no extra tap.
Depends on: WP1 Β· Effort: Low

WP3 β€” Checked-item UX: collapse completed items (independent)

Checked items move to the bottom automatically. A collapsible "Done (n)" section lets users expand it to uncheck a mistakenly ticked item.
Depends on: nothing Β· Effort: Low

WP4 β€” Supermarket category grouping (independent)

A local JSON mapping of ~200 common grocery items to supermarket sections (Produce, Dairy, Meat, Bakery, Frozen, etc.). Items group under section headers; unmatched items go to "Other". Users can manually reassign a category.
Depends on: nothing Β· Effort: Medium

WP5 β€” Autocomplete with suggestions

Inline suggestions while typing, drawn from the WP4 catalogue. Fuzzy/prefix matching. Selecting a suggestion pre-assigns its category.
Depends on: WP4 Β· Effort: Medium

WP6 β€” Move items between lists

Long-press or swipe on an item opens a "Move to …" context menu.
Depends on: WP1 Β· Effort: Low

WP7 β€” Per-list learned suggestions

Each list tracks item frequency ({ listId: { itemName: count } } in AsyncStorage). Autocomplete surfaces frequently-used items for the current list first.
Depends on: WP5 Β· Effort: Medium

WP8 β€” Optional real-time sync via Supabase (opt-in)

Users can enter a Supabase URL and anon key in Settings to enable real-time list sharing with others. Without a URL, the app stays fully local β€” Supabase is additive, not a dependency. Row-level security keeps lists private by default.
Depends on: WP1 Β· Effort: High


Suggested order

WP1 (foundation)
β”œβ”€β”€ WP2  (list picker in recipe view)
β”œβ”€β”€ WP6  (move between lists)
└── WP8  (optional Supabase sync)

WP3  (checked-item UX β€” independent)

WP4  (category mapping β€” independent)
└── WP5  (autocomplete)
    └── WP7  (learned suggestions)

Questions for you

  • Does this direction fit the vision you have for AvoCook, or does any part of it overshoot the scope?
  • Are there work packages you'd prefer to skip or defer?
  • Any architectural concerns I should be aware of before starting?
  • Would you prefer individual PRs per work package, or larger grouped PRs?

Happy to adjust the scope based on your feedback. I'd start with WP1 and WP3 only if you'd like to keep things incremental.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions