# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] --- ## [1.0.0] - 2026-04-13 ### Added - Branding: app renamed to "Armarium"; browser tab title updated - Branding: `Logo_horizontal.svg` in navbar, `Logo_vertikal.svg` on login/register, `Icon.svg` as favicon - Branding: navbar logo inverts colors in dark mode via `dark:invert` - Responsive layout: mobile-first redesign across all pages - Responsive layout: sidebar becomes a slide-in overlay drawer on mobile (hamburger in navbar) - Responsive layout: mobile backdrop closes sidebar on outside click or navigation - Responsive layout: main content padding reduced on mobile (`p-4 lg:p-8`), sidebar margin shifted to `lg:` breakpoint - Responsive layout: tables (accounts, expenses, transactions) get `min-w` and `overflow-x-auto` for horizontal scroll on mobile - Responsive layout: notifications panel becomes a full-width top drawer on mobile (`fixed top-[57px] left-0 right-0`), dropdown on desktop - Responsive layout: desktop sidebar toggle button hidden on mobile (`hidden lg:flex`) - Database: migrated from SQLite to PostgreSQL; connection configured via `.env` variables (`DB_NAME`, `DB_USER`, `DB_PASSWORD`, `DB_HOST`, `DB_PORT`) - Database: added `psycopg2-binary` as PostgreSQL adapter; added `.env.example` for onboarding - i18n: full 4-language support (DE/FR/IT/EN) via ngx-translate; translation files in `assets/i18n/` - i18n: language selector in Profile settings, persisted to backend `Profile.language` field and `localStorage` - i18n: browser language auto-detection on Login and Register pages - i18n: `LanguageService` for centralised language init, detection and switching - i18n: canton names translated per UI language via `canton_names` keys; ZH = "Zürich" (DE), "Zuerich" (EN), "Zurigo" (IT), "Zurich" (FR) - Calendar year view: clicking a month card opens a modal with an enlarged month view - Sidebar collapse toggle in navbar: sidebar can be collapsed to icon-only view and expanded again - Collapsed sidebar: flyout submenus for Budgets and Accounts with backdrop to close on outside click - Collapsed sidebar: tooltips on hover for all navigation icons - Dark/Light mode toggle in navbar with sun/moon icons; preference persisted in localStorage (dark mode default) - iCal feed: `GET /api/calendar/ical-url/` returns personal iCal feed URL per user - iCal feed: `GET /api/calendar/ical///` serves `.ics` file with deadlines and expense due dates (HMAC-SHA256 token auth) - Calendar: "Subscribe" button in header opens popup with iCal feed URL and copy button ### Changed - Calendar day detail: replaced bottom panel with a slide-in drawer from the right side - All UI strings replaced with i18n translation keys (DE/FR/IT/EN) across all pages and components ### Fixed - Profile: canton and language selects not saving — replaced `[value]`/`(change)` with `[ngModel]`/`(ngModelChange)` for reliable Angular select binding - Calendar: canton selector not reflecting the profile canton on load - Sidebar collapse button was not wired to any action - Sidebar flyout submenus were clipped inside collapsed sidebar due to `overflow-y-auto` - iCal feed: removed unused `pytz` import that caused `ModuleNotFoundError` - i18n: translations not loading due to `src/assets` missing from `angular.json` asset sources --- ## [0.1.0] - 2026-03-08 ### Added #### Backend (Django) - Initialized Django project with `core` configuration app and `finance` app - Configured SQLite3 as development database - Integrated Django REST Framework with JWT authentication via `djangorestframework-simplejwt` - Enabled JWT token blacklist for secure logout and token rotation - Configured `django-cors-headers` to allow requests from Angular frontend (`localhost:4200`) - Implemented rate limiting: 5/min (auth), 200/min (authenticated users), 20/min (anonymous) - Configured environment variables via `python-dotenv` (SECRET_KEY, DEBUG, ALLOWED_HOSTS, CORS) - Added media file handling for avatar image uploads #### Data Models - `Account` – asset, expense, and revenue account types with balance tracking - `Transaction` – double-entry bookkeeping with source and destination accounts - `Budget` – 7 categories (fixed expenses, mobile/internet, subscriptions, leisure, tax reserves, insurance, loans) - `Expense` – 10 categories with optional due date and notes - `Profile` – user profile with avatar (image + color), name, email, and canton (all 26 Swiss cantons) - `Deadline` – 5 types (tax, insurance, invoice, personal, other) #### REST API - `POST /api/auth/register/` – user registration - `POST /api/auth/token/` – JWT login - `POST /api/auth/token/refresh/` – token refresh - `POST /api/auth/logout/` – logout with token blacklist - `POST /api/auth/password/` – password change - `GET/POST/PUT/DELETE /api/accounts/` – account management - `GET/POST/PUT/DELETE /api/transactions/` – transaction management - `GET/POST/PUT/DELETE /api/budgets/` – budget management - `GET/POST/PUT/DELETE /api/expenses/` – expense management - `GET/POST/PUT/DELETE /api/deadlines/` – deadline management - `GET/PUT/DELETE /api/profile/` – user profile with avatar upload #### Frontend (Angular) - Initialized Angular 21.2 project using standalone component architecture - Integrated Tailwind CSS v3.4 for utility-first styling - Integrated Flowbite 4.0.1 as UI component library (initialized via `initFlowbite()` in shell) - Integrated ApexCharts 3.46.0 for data visualization - Added `typings.d.ts` for Flowbite TypeScript module declaration - Implemented `ApiService` for all HTTP communication with the Django REST API - Implemented `AuthService` for JWT token storage and management - Implemented `authGuard` to protect routes requiring authentication - Implemented `authInterceptor` to attach Bearer token to all outgoing requests and handle 401 errors - Configured `SidebarService` for sidebar open/close state management #### Pages & Components - Login and Register pages with JWT-based authentication - Shell layout with responsive sidebar and navbar (user avatar, canton display) - Dashboard with KPIs (total income, fixed costs, expenses, available balance, savings rate) and ApexCharts bar and donut charts - Accounts page with full CRUD for asset, expense, and revenue accounts - Budgets page with category grouping and budget suggestions per category - Expenses page with category filtering and due date tracking - Transactions page with double-entry transaction management - Calendar page with year and month view, Swiss public holidays and school holidays by canton (2025–2026), expense due dates and personal deadlines - Profile page with avatar upload, color selection, name, email, and canton selection