1.0.4: Smarter auto-assign, quick dish entry, calendar fix, frictionless onboarding

- AutocompleteEngine: no-repeat rule now applies to all dishes (not just tagless ones); fallback still allows repeats when no alternative exists
- CalendarService: update existing events instead of delete+create to prevent duplicates; fix weekStartDate using plan date instead of currentWeekStart
- DishFormView: form stays open after saving in create mode for quick multi-dish entry; Done button to close; saved feedback banner
- OnboardingViewModel/FirstDishesStepView: dishes are now optional during onboarding; Finish button always enabled
- AnalyticsService: new events — onboarding_step_viewed(step) and auto_assign_used(filled, unfilled)
- Localization: dish_done and first_dishes_optional_hint added in 6 languages; release notes updated in all 6 languages
- Version bump: 1.0.3 → 1.0.4 (build 19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
alexandrev-tibco
2026-04-19 11:35:50 +02:00
parent c66132f494
commit 6c7e12b41f
25 changed files with 659 additions and 49 deletions
@@ -38,7 +38,8 @@
/* First Dishes */
"first_dishes_title" = "Etapa 4: Adicione seus pratos favoritos";
"first_dishes_subtitle" = "Adicione pelo menos 2 pratos para começar";
"first_dishes_subtitle" = "Adicione alguns pratos para começar mais rápido.";
"first_dishes_optional_hint" = "Opcional — você pode adicionar mais pratos pelo app a qualquer momento.";
"first_dishes_name_placeholder" = "Nome do prato";
"first_dishes_add_tag" = "Adicionar tag";
"first_dishes_add_dish" = "Adicionar prato";
@@ -104,6 +105,7 @@
"dish_delete_title" = "Excluir este prato?";
"dish_delete_message" = "Essa ação não pode ser desfeita";
"dish_cancel" = "Cancelar";
"dish_done" = "Concluído";
"dish_delete_blocked_title" = "Não é possível excluir";
"dish_delete_blocked_message" = "Você não pode excluir um prato atribuído à semana atual.";
"dish_delete_blocked_ok" = "OK";
@@ -284,3 +286,15 @@
"reminder_120" = "2 horas antes";
"first_dishes_limit_reached" = "Você chegou a 10 pratos. Toque em Concluir quando estiver pronto.";
// Social share
"share_instagram_subtitle" = "Compartilhar como fundo de Story";
"share_copy_image" = "Copiar imagem";
"share_copy_subtitle" = "Cole no WhatsApp, Telegram…";
"share_more_options" = "Mais opções";
"share_more_subtitle" = "Compartilhar com qualquer app";
"share_export_sheet_title" = "Compartilhar";
"share_copied" = "Imagem copiada!";
// Onboarding preview
"onboarding_welcome_preview_label" = "Sua semana pode ficar assim ✨";