Frontend build fixes:
- Add formatDateTimeISO and parseISODate to formatters.ts
- Add default type parameter to fetchGraphQL function
- Add toggleMobileDrawer and mobileDrawerOpen to uiStore
- Add compact prop to CompanySwitcher component
- Add JournalEntryDraft types to accounting.ts
- Add reopened/locked fields to FiscalYear type
- Fix documentProcessing.ts import
Closes books-0rs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
UX improvements (books-8lo):
- Use PageHeader component for consistent header with breadcrumbs
- Add responsive mobile breakpoints
- Improve accessibility with aria-labels
- Better information hierarchy
Fixes (books-1rp):
- Add missing validateCVRModulus11 function to formatters
- Fixes TypeScript errors in Kunder.tsx and CompanySetupWizard.tsx
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Uses the DemoDataDisclaimer component to inform users that data
shown on these pages is for demonstration purposes only.
Closes books-wzq
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Creates a recurring Hangfire job that compares bank account balances
from Enable Banking with the corresponding ledger accounts:
- Runs daily via Hangfire recurring schedule
- Supports manual trigger per company via GraphQL
- Flags discrepancies > 1 cent with detailed logging
- Includes retry logic for transient failures
Closes books-5tg
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add decodeHtmlEntities function to formatters.ts for handling HTML entity decoding
- Add CompanyRole type and role helper functions (getRoleLabel, getRoleColor)
- Add useActiveCompanyRole hook for getting current user's company role
- Add Ledger.Core and QuestPDF project references to backend
- Add additional fields to CompanyReadModelDto
Closes books-hzt
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The username text next to the profile icon in the header was already
removed in a previous commit.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The user's name/email is no longer displayed next to the profile avatar
in the header. The avatar dropdown menu remains functional for accessing
user settings and logout.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Delete the quick booking page, components, and store:
- HurtigBogforing.tsx page
- simple-booking/ components (AccountQuickPicker, BankTransactionCard, QuickBookModal, SplitBookModal)
- simpleBookingStore.ts
Remove related navigation and shortcuts:
- Route from routes.tsx
- Menu item from Sidebar
- goToHurtigBogforing shortcut and navigation route
- Command palette icon reference
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Backend:
- Cookie + OIDC + API Key authentication schemes
- ApiKeyAuthenticationHandler with SHA-256 validation and 24h cache
- AuthController with login/logout/profile endpoints
- API Key domain model (EventFlow aggregate, events, commands)
- ApiKeyReadModel and repository for key validation
- Database migration 002_ApiKeys.sql
- CORS configuration for frontend
Frontend:
- authService.ts for login/logout/profile API calls
- authStore.ts (Zustand) for user context state
- ProtectedRoute component for route guards
- Header updated with user display and logout
- GraphQL client with credentials: include
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- .env.example: Documentation template
- .env.development: Local dev defaults (localhost:5000)
- .env.production: Production defaults (relative /graphql path)
- Updated .gitignore to track non-secret env files
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Backend (.NET 10):
- EventFlow CQRS/Event Sourcing with PostgreSQL
- GraphQL.NET API with mutations and queries
- Custom ReadModelSqlGenerator for snake_case PostgreSQL columns
- Hangfire for background job processing
- Integration tests with isolated test databases
Frontend (React/Vite):
- Initial project structure
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>