- 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
* Add webauthn
* Complete WebAuthn device sign up and login
* Move device registration to account page
* Replace the token login with a WebAuthn prompt if the current device has been registered
* Mark the current device in the list of registered auth devices
* Fix after rebase
* Fix tests
* Disable "Add current device" button if current device is registered
* Add option to "Stay signed in"
* Remove device list feature, sign in with deviceId instead
* Improve usability
* Update changelog
Co-authored-by: Matthias Frey <mfrey43@gmail.com>
Co-authored-by: Thomas <4159106+dtslvr@users.noreply.github.com>