kiwi/app/db/migrations
pyr0ball a523cb094e perf(browser): replace LIKE scans with FTS5; cache category counts
- Add migration 021: recipe_browser_fts FTS5 table on category + keywords
  columns, eliminating LIKE '%keyword%' full sequential scans on 3.1M rows
- _count_recipes_for_keywords now uses FTS5 MATCH (O(log N) vs O(N))
- browse_recipes reuses cached count, eliminating the second COUNT(*) scan
  per page request; ORDER BY r.id replaces the unindexed ORDER BY title sort
- Module-level _COUNT_CACHE keyed by (db_path, keywords) means domain-switch
  category counts are computed once per process lifetime

feat(find): dietary preset grid, Big 9 allergen pills, Hard Day Mode surface

- Dietary constraints replaced with toggle-button preset grid (8 options)
  + free-text "Other" field; removes dense freeform text input
- Allergies replaced with Big 9 pill picker (peanuts, tree nuts, shellfish,
  fish, milk, eggs, wheat, soy, sesame) + "Other" for custom entries
- Hard Day Mode surfaced as a standalone aria-pressed button above the
  dietary collapsible; no longer buried inside a collapsed section
- Active-state dot indicators on both collapsibles show filter engagement
  at a glance without expanding

fix(a11y): aria-describedby wiring for wildcard checkbox and tag inputs (#40)

- Persistent hint spans replace placeholder-only instructions for constraint
  and allergy fields (WCAG 3.3.2)

fix(browse): auto-select highest-count category on domain switch (#41)

- Eliminates the 3-decision cold start (domain → category → content)
- Surprise Me button added for zero-decision random navigation
2026-04-08 23:10:48 -07:00
..
001_initial_schema.sql chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
002_inventory_and_products.sql chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
003_receipt_data.sql chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
004_tagging_system.sql chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
005_receipt_staged_status.sql feat: migrations 005-011 — fix receipts column bug + recipe engine tables 2026-03-30 22:33:25 -07:00
006_element_profiles.sql feat: migrations 005-011 — fix receipts column bug + recipe engine tables 2026-03-30 22:33:25 -07:00
007_recipe_corpus.sql fix: data pipeline — R-vector parser, allrecipes dataset, unique recipe index 2026-03-31 21:36:13 -07:00
008_substitution_pairs.sql feat: migrations 005-011 — fix receipts column bug + recipe engine tables 2026-03-30 22:33:25 -07:00
009_staple_library.sql feat: migrations 005-011 — fix receipts column bug + recipe engine tables 2026-03-30 22:33:25 -07:00
010_recipe_feedback.sql feat: migrations 005-011 — fix receipts column bug + recipe engine tables 2026-03-30 22:33:25 -07:00
011_rate_limits.sql feat: migrations 005-011 — fix receipts column bug + recipe engine tables 2026-03-30 22:33:25 -07:00
012_user_settings.sql feat: recipe engine Phase 3 — StyleAdapter, LLM levels 3-4, user settings 2026-03-31 14:15:18 -07:00
013_background_tasks.sql fix: renumber background_tasks migration 006→013 (conflict with element_profiles) 2026-03-31 14:28:10 -07:00
014_nutrition_macros.sql feat: recipe engine — assembly templates, prep notes, FTS fixes, texture backfill 2026-04-02 22:12:35 -07:00
015_recipe_fts.sql fix: add FTS5 sync triggers so recipe inserts are indexed immediately 2026-04-02 23:14:22 -07:00
016_recipe_fts_triggers.sql fix: add FTS5 sync triggers so recipe inserts are indexed immediately 2026-04-02 23:14:22 -07:00
017_household_invites.sql feat: add household_invites migration (017) 2026-04-04 22:27:56 -07:00
018_saved_recipes.sql feat: saved recipes, recipe browser, and recipe detail panel 2026-04-08 14:35:02 -07:00
019_recipe_collections.sql feat: saved recipes, recipe browser, and recipe detail panel 2026-04-08 14:35:02 -07:00
020_browser_telemetry.sql feat: saved recipes, recipe browser, and recipe detail panel 2026-04-08 14:35:02 -07:00
021_recipe_browser_fts.sql perf(browser): replace LIKE scans with FTS5; cache category counts 2026-04-08 23:10:48 -07:00