- Fix [class] binding overwriting CSS classes (use [ngClass] instead)
- Fix activities fetch returning wrong data for older dates (use year range)
- Add @HasPermission(readJournalEntry) to GET endpoints
- Apply delta adjustment to netPerformanceInPercentage (was cumulative)
- Fix realized profit to only include dividend/interest income (exclude SELL gross proceeds)
- Fix formatCurrency hiding $0 values (only hide null/undefined)
- Localize monthLabel, weekday headers, and dateLabel using Intl.DateTimeFormat
- Add snackbar feedback on note save/delete success and failure
- Remove unused date field from DTO, add @IsNotEmpty to note
- Add DEFAULT_CURRENCY fallback for userCurrency
- Add month/year range validation
- Fix January baseline by fetching previous year performance
- Add maxWidth to dialog for mobile
- Only reload calendar data when dialog reports changes
- Remove unused GfActivitiesTableComponent and user subscription from dialog
- Handle empty note save gracefully (skip API call if no existing note)
- Add dark mode support to dialog SCSS
- Add route title for browser tab
https://claude.ai/code/session_01XEieh1hHrXc1fcbnA7oBHn
Add a Tradezella-inspired trading journal feature to the Portfolio section.
This provides a monthly calendar view showing daily P&L (total portfolio change
as primary, realized P&L as secondary), color-coded days (green/red/grey),
activity counts, trading statistics, and a full day detail dialog with
activities list and journal notes.
Key changes:
- Database: JournalEntry model with Prisma migration
- Backend: Journal module with REST API (GET/PUT/DELETE /api/v1/journal)
- Frontend: GfJournalCalendarComponent (UI library), journal page with
day detail dialog, new "Journal" tab in Portfolio section
- Shared: Permissions, DTOs, response interfaces, route definitions
https://claude.ai/code/session_01XEieh1hHrXc1fcbnA7oBHn
* Extend FIRE page with projection information at retirement date
* Update changelog
---------
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
* feat(lib): move ConfirmationDialogType to common lib
* fix(lib): move SubscriptionType to enums
* feat(lib): move validateObjectForForm util to common lib
* feat(lib): move GfDialogFooterComponent to ui lib
* feat(lib): move GfDialogHeaderComponent to ui lib
* feat(lib): move SymbolPipe to common lib
* feat(lib): move CreateAccountBalanceDto to common lib
* feat(lib): move IsCurrencyCode validator to common lib
* feat(lib): move UpdateAssetProfileDto to common lib
* feat(lib): move UpdateUserSettingDto to common lib
* feat(lib): move CreateAccessDto to common lib
* feat(lib): move UpdateAccessDto to common lib
* feat(lib): move CreateTagDto to common lib
* feat(lib): move UpdateTagDto to common lib
* feat(lib): move CreatePlatformDto to common lib
* feat(lib): move UpdatePlatformDto to common lib
* feat(lib): move CreateOrderDto to common lib
* feat(lib): move UpdateOrderDto to common lib
* feat(lib): move RuleSettings interface to common lib
* feat(lib): move CreateAccountDto TransferBalanceDto UpdateAccountDto to common lib
* feat(lib): move CreateAccountWithBalancesDto to common lib
* feat(lib): move CreateAssetProfileDto and CreateAssetProfileWithMarketDataDto to common lib
* feat(lib): move AuthDeviceDto to common lib
* feat(lib): move simplewebauthn interfaces to common lib
This includes AssertionCredentialJSON, AttestationCredentialJSON, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON.
* feat(lib): move UpdateMarketDataDto to common lib
* feat(lib): move UpdateBulkMarketDataDto to common lib
* feat(lib): move CreateWatchlistItemDto to common lib
* feat(lib): move DeleteOwnUserDto to common lib
* feat(lib): move UserItem interface to common lib
* feat(lib): move UpdateOwnAccessTokenDto to common lib
* feat(lib): move PropertyDto to common lib