Releases: marcuscastelo/macroflows
v0.15.0
What's Changed
Features
- Unify clipboard copy/paste logic across edit views by extracting shared type guards by @Copilot in #1090
- Remove legacy error handling components after Sentry migration by @Copilot in #1309
- Improve MAX quantity UX: explicit macro selection, balance mode, and conflict previews by @Copilot in #1331
- feat: Max button toggle between respecting limits and forcing dominant macro by @Copilot in #1348
- feat: In-app clipboard store with RAM-only default and optional persistence by @Copilot in #1319
- Allow editing the name of GroupItem and RecipeItem by @Copilot in #1352
- refactor: remove specializedModalHelpers and adopt per-module modal components by @Copilot in #1360
- Feature: Allow single-item recipes with conversion multiplier by @Copilot in #1350
- feat: Import/Export JSON modal for backup & migration by @Copilot in #1369
- feat: Guest RAM demo mode — in-memory DB with seeded data by @Copilot in #1364
Bugfixes
- fix(clipboard): improve paste UX (use paste event + focused modal) by @marcuscastelo in #1315
- refactor(auth): remove unnecessary comment from signIn function by @marcuscastelo in #1324
- Update dev script and item schema type by @marcuscastelo in #1342
- Fix TypeError when hiding 'Peso desejado' in weight chart by @Copilot in #1362
- Move recipe loading check inside quantity update logic by @marcuscastelo in #1381
- Clarify output format and refactor recipe synchronization logic by @marcuscastelo in #1387
- Fix Favorites and Recents empty when search query/param is present (UI bug) by @marcuscastelo in #1394
- Fix ad-hoc recipe item edit to preserve explicit child quantity changes by @Copilot in #1389
- Persist template search tab preference in localStorage by @Copilot in #1400
- fix(macro-target): suppress toast on missing weight/profile during passive reads by @Copilot in #1402
- Fix recent food tracking for GroupItem and EAN-scanned foods by @Copilot in #1401
- Fix multi-item recipe out-of-sync false positives by @Copilot in #1429
- refactor(item): refactor item comparison and macro nutrient handling by @marcuscastelo in #1431
Improvements
- Simplify modal types using Accessor for reactive values by @Copilot in #1087
- Remove DAO terminology, standardize on DTO by @Copilot in #1314
- refactor: replace console calls with logging utility for consistent error tracking by @Copilot in #1325
- Fix MaxQuantityButton treating absolute macro values as per-kg targets by @Copilot in #1322
- Phase 5: Validate and document Item/ItemGroup unification completion by @Copilot in #1326
- Optimize effectiveAt to use sortedByDate with findLast instead of reverse by @Copilot in #1332
- Ban inline dynamic imports via ESLint rule by @Copilot in #1343
- Refactor database types and user mapping by @marcuscastelo in #1346
- refactor: replace handleApiError with showError + logging in documentation by @Copilot in #1345
- Add typedKeys utility for strongly-typed Object.keys by @Copilot in #1371
- Refactor: Remove duplicate UnifiedRecipeEditView component by @Copilot in #1366
- Add type guard for WeightChartType to replace type assertion by @Copilot in #1373
- Mock logging module in tests to prevent console output pollution by @Copilot in #1377
- feat(clipboard): improve icons with accessibility and mobile UX by @Copilot in #1370
- auth: Encapsulate infra exports — export only factories by @marcuscastelo in #1418
- Refactor user and guest logic with use cases by @marcuscastelo in #1421
- Migrate critical application-layer error handling to logging + showError pattern by @Copilot in #1399
- fix: recipe multiplier incorrectly scales macro grams and calories (should only affect mainQuantity) # by @Copilot in #1427
Other
- Merge rc/v0.14.0 into rc/v0.15.0 by @marcuscastelo in #1097
- v0.14.0 by @marcuscastelo in #1294
- Stable by @marcuscastelo in #1297
- Replace property assertion typeguards with __type discriminator checks by @Copilot in #1109
- Document GitHub Copilot instructions setup by @Copilot in #1318
- Update error handling guidelines after removal of handleApiError utility by @marcuscastelo in #1344
- Enhance README with multilingual support and improved layout by @marcuscastelo in #1378
- Update pnpm-lock.yaml by @marcuscastelo in #1419
- test(auth): Add tests for authUseCases facade module by @Copilot in #1420
Full Changelog: v0.14.0...v0.15.0
v0.14.0
What's Changed
Features
- feat(auth): implement google oauth authentication module by @marcuscastelo in #1030
- feat(telemetry): implement OpenTelemetry core setup and auto-instrumentation by @marcuscastelo in #1038
- feat(sentry): complete Sentry.io foundation setup and SDK integration by @marcuscastelo in #1040
- feat(sentry): complete error handling migration to Sentry integration by @marcuscastelo in #1043
- feat(telemetry): complete error handling integration with OpenTelemetry trace correlation by @marcuscastelo in #1046
- User Migration and Data Security Implementation by @marcuscastelo in #1058
Bugfixes
- refactor: upgrade ESLint rules from warnings to errors and fix type assertions by @marcuscastelo in #1019
- fix(ean): ensure camera stops after EAN scan by proper component cleanup by @marcuscastelo in #1022
- fix(weight-chart): fix OHLC period stability and add mobile responsiveness by @marcuscastelo in #1023
- fix(reactivity): resolve solid/reactivity warnings by @marcuscastelo in #1027
- fix(day-diet): refetch data after accepting day change by @marcuscastelo in #1028
- fix(ean): resolve modal auto-close mechanism after successful scan by @marcuscastelo in #1036
Improvements
- refactor(common): use date utility in TargetDayPicker by @marcuscastelo in #1033
- perf(day-diet): optimize day data fetching to avoid loading unused days by @marcuscastelo in #1035
- feat(build): add ts-unused-exports to detect unused TypeScript exports by @marcuscastelo in #1032
- refactor: major architectural overhaul implementing usecase pattern across all modules by @marcuscastelo in #1037
Other
- refactor(architecture): move realtime subscriptions to infrastructure layer by @marcuscastelo in #1029
- feat(performance): leverage existing Sentry Web Vitals + enhance user flow tracking by @marcuscastelo in #1047
- Implement comprehensive authentication UI components and user experience flows by @Copilot in #1049
- fix(auth): make redirectTo parameter mandatory by @marcuscastelo in #1051
- refactor(day-diet): rename owner to user_id in supabase mapper and clarify PR agent prompt by @marcuscastelo in #1066
- feat: Automatic profile creation for new OAuth users by @Copilot in #1067
- Enhance semver.sh with Robust Error Handling and Retry Logic for GitHub API Rate Limiting by @Copilot in #1089
- Fix: Weight UI does not update after add/remove/edit operations by @Copilot in #1094
- Fix: Enable macro goal editing for new users without existing profiles by @Copilot in #1095
Full Changelog: v0.13.0...v0.14.0
v0.13.0
What's Changed
Features
- Phase 1: Schema & Domain Layer for Item/ItemGroup Unification by @marcuscastelo in #901
- feat(profile): implement tabbed chart interface for memory optimization by @marcuscastelo in #919
- feat(recent-food): add server-side search with Portuguese diacritic support by @marcuscastelo in #937
- Implement unified modal system architecture and core context provider by @marcuscastelo in #944
- feat(day-diet): implement automatic day change detection with user confirmation by @marcuscastelo in #956
- Recent Food System Refactoring and Performance Optimization by @marcuscastelo in #958
- feat: integrate DomainError support with comprehensive error handling system by @marcuscastelo in #966
- feat: implement enhanced food search with fuzzy matching and scoring by @marcuscastelo in #982
Bugfixes
- Fix date normalization and remove date-fns dependency by @marcuscastelo in #907
- Refactor immediate prompt creation into a separate script by @marcuscastelo in #916
- perf(profile): optimize weight chart performance for mobile devices by @marcuscastelo in #923
- fix(profile): macro calorie values now display correctly instead of showing 0 kcal by @marcuscastelo in #954
- fix(search): implement optimized favorites search with database-direct RPC by @marcuscastelo in #993
- fix(unified-item): resolve recipe quantity inconsistency after synchronization by @marcuscastelo in #994
Improvements
- Phase 2: Infrastructure Layer Migration for Unified Item/ItemGroup Model by @marcuscastelo in #902
- Phase 3: Application Layer for Item/ItemGroup Unification by @marcuscastelo in #904
- Migrate ItemGroupEditModal functionality to UnifiedItemEditModal by @marcuscastelo in #909
- Marcuscastelo/issue885-itemview-migration by @marcuscastelo in #910
- fix: add version validation workflow for PRs to stable by @marcuscastelo in #911
- Phase 4: UI Migration for Item/ItemGroup Unification by @marcuscastelo in #908
- Add loading indicators for search modals by @marcuscastelo in #913
- Create reusable context menu item components by @marcuscastelo in #914
- refactor(ui): unify copy button components by @marcuscastelo in #918
- Standardize button styles with reusable components by @marcuscastelo in #917
- refactor(application): remove unused dayId parameters from meal operations by @marcuscastelo in #929
- refactor(unified-item): use repository pattern in UnifiedItemEditModal by @marcuscastelo in #955
- feat(domain): add custom error classes for all domain invariants and business rules by @marcuscastelo in #964
- refactor: reduce schema duplication across domain modules by @marcuscastelo in #968
- test: add comprehensive domain module test coverage for issue #660 by @marcuscastelo in #967
- chore(day-diet): finalize days table rename from days_test to days by @marcuscastelo in #979
Other
- chore: rename repository from marucs-diet to macroflows by @marcuscastelo in #928
- Add Claude Code GitHub Workflow by @marcuscastelo in #977
- refactor: complete UnifiedItem migration by removing all legacy Item/ItemGroup modules by @marcuscastelo in #988
Full Changelog: v0.12.0...v0.13.0
v0.12.0
What's Changed
Features
- Refactor CopyLastDayButton: show only days with registered diet and add summary copy list by @marcuscastelo in #775
- Refactor item group and meal components for improved modularity and context usage by @marcuscastelo in #847
- Show user initial as fallback for profile icon by @marcuscastelo in #862
Bugfixes
- feat(food): improve food search with diacritic-insensitive and composed multi-word matching by @marcuscastelo in #751
- Add backend outage detection and notification banner by @marcuscastelo in #753
- Fix single click to open ItemEditModal in ItemGroupEditModal by @marcuscastelo in #759
- Enhance recipe search with partial and diacritic-insensitive matching by @marcuscastelo in #762
- Improve food search, error handling, and add backend outage detection by @marcuscastelo in #763
- Refactor weight module, improve progress calculation, and add debug utilities by @marcuscastelo in #778
- fix(ui): show pt-BR not-found message and always show action buttons when no diet for today by @marcuscastelo in #815
- Adjust date handling for measure and weight components by @marcuscastelo in #813
- fix: restore and refactor macro overflow logic to prevent exceeding macro targets by @marcuscastelo in #823
- feat: fix recipe search ignoring user-selected quantity and prepared multiplier (#743) by @marcuscastelo in #863
- Improve ContextMenu behavior and styling by @marcuscastelo in #899
Improvements
- feat(github-issue): introduce unified GitHub Issue Agent and documentation improvements by @marcuscastelo in #803
- Refactor and cleanup: remove legacy macro/weight utils, update macro logic, and clarify prompts by @marcuscastelo in #805
- Refactor search tab handling with debouncing by @marcuscastelo in #814
- refactor: rename Measure to BodyMeasure and update all related components for clarity and consistency by @marcuscastelo in #810
- fix(version): remove
vprefix from version in package.json, update docs and release scripts by @marcuscastelo in #826 - Refactor Progress prop naming and improve weight evolution UI by @marcuscastelo in #827
- perf: optimize food reordering logic to reduce O(n²) to O(n) complexity by @marcuscastelo in #845
- feat: remove BackButton from ModalHeader and standardize modal closing behavior by @marcuscastelo in #844
Other
- Update v0.12.0 by @marcuscastelo in #749
- refactor: optimize isSearchCached to prevent full table scan and improve performance by @marcuscastelo in #777
- Marcuscastelo/issue783 by @marcuscastelo in #807
- Refactor barcode references to EAN by @marcuscastelo in #809
- Batch fetch foods by IDs for 'recent' tab by @marcuscastelo in #812
- Refactor search tab logic for improved maintainability by @marcuscastelo in #808
- Add onboarding instructions and example environment file by @marcuscastelo in #825
- refactor(shared): improve debug and error context handling, enhance agent workflow by @marcuscastelo in #828
- Refactor convertApi2Food function to shared utils by @marcuscastelo in #861
- feat: implement lazy loading and intersection observer for chart components by @marcuscastelo in #898
Full Changelog: v0.11.0...v0.12.0
v0.11.0
What's Changed
Features
- Make version display less intrusive by @marcuscastelo in #632
- Rename openToasts to visibleToasts and implement deduplication logic by @marcuscastelo in #643
- Refactor day-diet and item-group components for improved UX by @marcuscastelo in #688
- Add ComboBox component and enhance WeightChart functionality by @marcuscastelo in #697
- feat(profile): use ComboBox for diet and gender fields with translations and consistent UI by @marcuscastelo in #719
- feat: add confirmation dialogs before deleting weight and measure entries by @marcuscastelo in #721
- feat(ui): add MaxQuantityButton and integrate in ItemEditModal for macro-based max input by @marcuscastelo in #725
Bugfixes
- Fix ApexCharts locale configuration for pt-BR by @marcuscastelo in #633
- Fix macro overflow calculation for item groups by @marcuscastelo in #634
- Refactor type guards and template handling by @marcuscastelo in #636
- Refactor and modularize item group components and utilities by @marcuscastelo in #692
- Fix onDelete handler in ItemGroupEditModalActions by @marcuscastelo in #710
- Refactor and enhance error handling, prompt automation, and domain logic; update documentation and templates by @marcuscastelo in #712
- feat(search, recipe, template): enhance search UI, centralize template logic, and improve recent items handling by @marcuscastelo in #714
- fix(recipe): allow empty arrays for items and improve PR automation (#726) by @marcuscastelo in #728
- fix: handle Supabase duplicate EAN error in food repository and add utility with tests by @marcuscastelo in #747
Improvements
- Refactor item group handling and improve code quality by @marcuscastelo in #597
- Refactor item group handling and improve code quality by @marcuscastelo in #607
- refactor: remove deprecated date utilities and item group editor tests by @marcuscastelo in #608
- Refactor Field Hooks: Consolidation, Cleanup, and Type Safety by @marcuscastelo in #609
- Centralize Default Tab for Template Search by @marcuscastelo in #610
- Refactor date handling in Measure component by @marcuscastelo in #611
- Refactor clipboard actions to use useClipboard hook by @marcuscastelo in #613
- ESLint/Prettier Code Quality and Formatting Refactor by @marcuscastelo in #614
- refactor: remove deprecated Editor pattern and migrate to pure functions by @marcuscastelo in #615
- refactor: eliminate UI code duplication and unify header/action patterns by @marcuscastelo in #617
- refactor: eliminate createMirrorSignal anti-pattern across all context providers by @marcuscastelo in #618
- feat: complete toast system refactor with smart queue management by @marcuscastelo in #619
- Refactor to SolidJS resource patterns and remove Loadable by @marcuscastelo in #637
- Migrate legacy controllers to DDD modules by @marcuscastelo in #641
- refactor: standardize application layer error handling and user feedback across modules by @marcuscastelo in #720
Other
- v0.10.0 by @marcuscastelo in #566
- ci: remove outdated version update workflows and pre-commit hooks by @marcuscastelo in #691
- Refactor icons and update dependencies by @marcuscastelo in #690
- Enable editing for complex recipes by @marcuscastelo in #696
- v0.11.0 by @marcuscastelo in #732
Full Changelog: v0.10.0...v0.11.0
v0.10.0
Changelog - v0.10.0
🚀 Highlights
-
DAO & Domain Schema Evolution:
Major refactor to unify, simplify, and modernize the data access layer and domain models. Introduced discriminated unions for all domain schemas and removed legacy and deprecated types.- All DAO schemas now utilize their own respective schemas for parsing.
- The
__typeproperty is now used as a discriminant in schemas; nullable and optional values are supported. - Massive removal of deprecated code, legacy files, and duplicated logic.
-
Item/Recipe/Group Overhaul:
FoodItemis now consistently renamed and replaced byItemacross the codebase.- Item group and recipe modals refactored for better structure, deduplication, and code sharing.
- Factory functions implemented for
ItemGroup, and all manual object creation replaced. - External modals (TemplateSearch, ItemEdit, RecipeEdit) extracted and deduplicated.
-
Improved Modal System:
- Modal components now all use a compound component pattern.
- Modals have improved visibility logic, structure, and reactivity.
- Unified modal context and removed unused modal providers.
- New "back" button on all modals to improve mobile usage.
-
Refined UX & Feedback:
- Toast notifications for user feedback on data loading, errors, and actions.
- Centralized and improved error handling, replacing most
console.errorcalls. - Loading states and toasts improved for async actions.
- Environment variable configuration centralized and validated via Zod.
- Better variable naming, code comments, and clearer TODOs.
-
Performance & Correctness:
- Real-time data refetch with Supabase.
- Improved commit counting and versioning logic for better CI/CD reliability.
- GitHub Actions workflow now updates
VERSIONfile on merges to RC branches. - Rate limiting and try/catch guards added to API routes.
- Various bugfixes related to duplicate foods, chart rendering, recents order, etc.
🆕 Features
-
Discriminated Unions in Domain Schemas:
All domain schemas now support discriminated unions via__type. -
Item Group/Recipe Enhancements:
- Unified naming and components for food items and item groups.
- Added "unlink recipe" button.
- Refactored item and recipe editing for more intuitive UX.
- Improved and deduplicated PreparedQuantity handling and typing.
-
Environment Config:
All environment variables are now loaded, validated, and accessed in a centralized, type-safe manner. -
Toast System:
- Created and integrated a custom toast system for error, loading, and success feedback.
-
Recent Foods:
- Improved logic for handling and displaying recent foods.
- Added ability to remove items from recents.
-
Signal Refactoring:
- Many stateful contexts and modules now use SolidJS signals for improved reactivity and performance.
latestWeightand other state are now managed with signals.
🛠️ Refactors & Cleanups
-
DAO & Schema Refactor:
- Removed redundant
__typeproperties and unused imports. - Deprecated types replaced with DAO pattern.
- Simplified insert/update logic for DayDiet, ItemGroup, and Recipe.
- Removed redundant
-
Modal & Component Structure:
- All modals now follow the compound component pattern.
- Deduplicated modal logic across editors (item, group, recipe).
- Code reorganization: extracted, moved, and cleaned up modal and context files.
-
CI/CD and Scripts:
- Fixed script paths and improved version generation logic in workflows.
- Semver script rewritten for robustness, especially for RC branches.
- Added tests and refined commit counting to exclude main/master.
-
Project Housekeeping:
- Old files from filter-branch and legacy code removed.
- Comment and TODO improvements throughout.
- README and LICENSE updated.
🐞 Bugfixes
-
Charts & Data:
- Year now displays correctly on weight chart.
- Chart lows/highs rendering and hiding bugs fixed.
- Macro targets and day macros now update correctly.
-
Recents & Duplicates:
- Recents tab respects descending order.
- Fixed duplicate foods and improved filtering.
-
Miscellaneous:
- Recipe modal bugs fixed (e.g., modal not opening, deletion issues).
- TypeScript compilation and domain architecture errors resolved.
- Toast and error handling integrated in all major flows.
🔧 CI/CD & Automation
- GitHub Actions:
- New workflow updates
VERSIONon merge to RC branches. - Improved semver and version bumping automation.
- Commit count logic now excludes main and master branches.
- Automated changelog and version handling for releases.
- New workflow updates
🗑️ Removed / Deprecated
- Legacy & Deprecated Code:
- All deprecated types, legacy files, duplicated modals, and unused code removed.
- Old scripts and files kept from previous filter-branch operations deleted.
Full list of changes:
See the pull request diff and commit history for details.
v0.9.0
What's Changed
Features
- [#485] Warn user when they go above max macros of the day by @marcuscastelo in #541
- Create Toast System and replace all error alerts with toasts by @marcuscastelo in #543
- Loading toasts for backend communication by @marcuscastelo in #546
- Add BarCode icon instead of text by @marcuscastelo in #548
Improvements
- [Improvement] Make semver.sh work on RCs by @marcuscastelo in #539
- Do not focus on item group name when modal is opened by @marcuscastelo in #549
Other
- [RC] v0.9.0 by @marcuscastelo in #540
Full Changelog: v0.8.3...v0.9.0
v0.8.3
What's Changed
Features
- [#534] Modal animation by @marcuscastelo in #535
- [#533] Group weights 2-by-2 weeks for now by @marcuscastelo in #536
- [Feature] Version display by @marcuscastelo in #537
Improvements
- [Improvement] Ean not found message by @marcuscastelo in #538
Full Changelog: v0.8.2...v0.8.3
v0.8.2
What's Changed
Bugfixes
- [Hotfix] Fix blank vercel build by @marcuscastelo in #532
Full Changelog: v0.8.1...v0.8.2
v0.8.1
What's Changed
Bugfixes
- Fix "Profile page crashes server-side" by @marcuscastelo in #530
Full Changelog: v0.8.0...v0.8.1