227 Commits

Author SHA1 Message Date
Ulas Kalayci ee53f1cfd7 feat: add Polish (pl) locale
Full Polish translation covering all UI modules — tasks, calendar,
shopping, meals, budget, notes, contacts, birthdays, recipes,
documents, housekeeping, and settings. Polish is now selectable in
Settings → Language.

Bumps to v0.50.0.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 23:12:57 +02:00
Ulas Kalayci e024a8eaf9 chore: release v0.49.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 20:20:57 +02:00
Ulas Kalayci 9762db8d0f chore: release v0.48.3 2026-05-06 16:24:22 +02:00
Ulas Kalayci 367770e05c chore: release v0.48.2 2026-05-06 14:51:38 +02:00
Ulas Kalayci 9ef93987d6 chore: release v0.48.1 2026-05-06 10:39:53 +02:00
Ulas Kalayci 1a51c14d0d chore: release v0.48.0 2026-05-06 10:08:01 +02:00
Ulas Kalayci 2a48fb7af0 feat: multi-person assignment for tasks and calendar events
- DB migration v32: task_assignments and event_assignments join tables
  with CASCADE delete; existing assigned_to data migrated automatically
- Tasks API: accepts assigned_to as array, returns assigned_users[]
  with json_group_array; filter uses EXISTS on task_assignments
- Calendar API: same pattern via event_assignments; serializeEvent
  includes assigned_users array
- Recurring task completion copies all assignments to the new instance
- Frontend: shared UserMultiSelect component with avatar stack display
  (renderAvatarStack, renderUserMultiSelect, getSelectedUserIds,
  bindUserMultiSelect); tasks.js and calendar.js use it in modals
  and card/agenda views
- CSS: user-multi-select.css with avatar-stack and user-ms classes
- 14 new tests covering CRUD, JSON aggregation, EXISTS filter,
  and CASCADE behavior for both task and event assignments

Closes #125
2026-05-06 10:04:41 +02:00
Ulas Kalayci f0503f3df1 chore: release v0.47.5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 07:37:49 +02:00
Ulas Kalayci 2da5295f87 chore: release v0.47.4 2026-05-06 07:00:40 +02:00
Ulas Kalayci 56b2fd471d chore: release v0.47.3 2026-05-06 01:45:38 +02:00
Ulas Kalayci 704e75260f Füge Puppeteer als dev dependency hinzu für Screenshot-Generierung
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-05 12:55:36 +02:00
Ulas Kalayci 289b079f47 chore: bump version to 0.47.2
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-05 07:06:29 +02:00
dependabot[bot] 46aa5774e8 chore(deps): bump the production-dependencies group with 2 updates (#124)
Bumps the production-dependencies group with 2 updates: [express-rate-limit](https://github.com/express-rate-limit/express-rate-limit) and [tsdav](https://github.com/natelindev/tsdav).


Updates `express-rate-limit` from 8.4.1 to 8.5.0
- [Release notes](https://github.com/express-rate-limit/express-rate-limit/releases)
- [Commits](https://github.com/express-rate-limit/express-rate-limit/compare/v8.4.1...v8.5.0)

Updates `tsdav` from 2.1.8 to 2.2.0
- [Release notes](https://github.com/natelindev/tsdav/releases)
- [Changelog](https://github.com/natelindev/tsdav/blob/main/CHANGELOG.md)
- [Commits](https://github.com/natelindev/tsdav/compare/v2.1.8...v2.2.0)

---
updated-dependencies:
- dependency-name: express-rate-limit
  dependency-version: 8.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: tsdav
  dependency-version: 2.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-05 07:04:14 +02:00
Ulas Kalayci fd5423f6c5 chore: bump version to 0.47.1
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 22:28:17 +02:00
Ulas Kalayci 10ef7006cd chore: bump version to v0.47.0
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 21:51:21 +02:00
Ulas Kalayci 43225ee20c chore: bump version to v0.46.0 2026-05-04 20:32:26 +02:00
Ulas Kalayci d371e2b554 chore: release v0.45.0
CardDAV contacts integration with multi-value fields

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 19:11:20 +02:00
Ulas Kalayci 9c4f876c5b Merge branch 'feature/cardav-contacts'
# Conflicts:
#	package-lock.json
2026-05-04 19:10:13 +02:00
Ulas Kalayci db5f95059f chore: release v0.44.1
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 16:39:16 +02:00
Ulas Kalayci 3f77fdb11d Fix Migration 30 code quality issues
C1 (CRITICAL): Refactor test-carddav.js to import migrations
- Import MIGRATIONS from server/db.js instead of duplicating SQL
- Export MIGRATIONS array from server/db.js
- Use better-sqlite3 to apply Migration 30 dynamically
- Ensures future changes to Migration 30 are reflected in tests

I1 (IMPORTANT): Add UNIQUE index on carddav_uid
- Create idx_contacts_carddav_uid_unique partial index
- Prevents duplicate CardDAV contacts per account+addressbook
- WHERE clause excludes NULL values (manual contacts allowed)
- Add test to verify unique constraint enforcement

I3 (IMPORTANT): Rename cardav → carddav (RFC 6352 compliance)
- Table: cardav_accounts → carddav_accounts
- Table: cardav_addressbook_selection → carddav_addressbook_selection
- Column: contacts.cardav_* → contacts.carddav_*
- Index: idx_cardav_* → idx_carddav_*
- Test file: test-cardav.js → test-carddav.js
- Package.json: test:cardav → test:carddav
- All test assertions updated

All 25 tests pass.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 10:55:30 +02:00
Ulas Kalayci 18310dbfe5 feat(cardav): add Migration 30 for CardDAV contacts schema
Add comprehensive database schema for CardDAV multi-account contacts sync:

New tables:
- cardav_accounts: Store CardDAV server credentials
- cardav_addressbook_selection: Per-account addressbook enable/disable
- contact_phones: Multiple phone numbers per contact with labels
- contact_emails: Multiple email addresses per contact with labels
- contact_addresses: Multiple postal addresses per contact with labels

Extended contacts table with 9 new columns:
- organization, job_title, birthday, website, photo, nickname
- cardav_account_id (FK to cardav_accounts, ON DELETE SET NULL)
- cardav_uid (vCard UID from server)
- cardav_addressbook_url (source addressbook URL)

Features:
- UNIQUE constraints on (cardav_url, username) and (account_id, addressbook_url)
- CASCADE delete for addressbook selection and contact sub-tables
- Performance indices for cardav_uid and email lookups
- Support for manual contacts (NULL cardav_account_id)
- is_primary flag for phone/email/address selection

Test coverage:
- 23 comprehensive tests verify all tables, constraints, indices
- FK CASCADE delete behavior validated
- UNIQUE constraints enforced
- Data integrity scenarios tested

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 10:47:16 +02:00
Ulas Kalayci dc0352545a chore: release v0.44.0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:53:01 +02:00
Ulas Kalayci 4bca84a609 test(caldav): add test suite for CalDAV multi-account sync
Add comprehensive test coverage for CalDAV multi-account functionality:
- Schema validation for caldav_accounts and caldav_calendar_selection tables
- UNIQUE constraint enforcement on account credentials
- Foreign key CASCADE delete behavior
- Calendar selection enable/disable filtering
- Target calendar columns in calendar_events table

All 7 tests pass using Node.js in-memory SQLite.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:44:06 +02:00
Ulas Kalayci 4bce97dd04 chore: release v0.43.0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 07:03:41 +02:00
Ulas Kalayci 9b29d1847c feat: automatische geplante Backups mit Rotation
Phase 1.3 - Automatische Backups:
- Cron-basierter Scheduler (Standard: täglich 2 Uhr)
- Konfigurierbar über .env (Zeitplan, Verzeichnis, Anzahl)
- Automatische Rotation: behält nur letzte N Backups (Standard: 7)
- UI in Settings → Backup: Status-Anzeige und manueller Trigger
- Tests: 7 erfolgreiche Tests für Scheduler-Funktionalität

Neue Umgebungsvariablen:
- BACKUP_ENABLED (Standard: true)
- BACKUP_SCHEDULE (Standard: 0 2 * * *)
- BACKUP_DIR (Standard: ./backups)
- BACKUP_KEEP (Standard: 7)
- TZ (für Zeitzone)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 07:02:38 +02:00
Ulas Kalayci 99a2280c02 chore: release v0.42.0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 06:52:35 +02:00
Ulas Kalayci 6eae4bae24 chore: release v0.41.0 2026-05-01 18:40:24 +02:00
Ulas Kalayci 2c948eb235 chore: release v0.40.1 2026-05-01 17:57:30 +02:00
Ulas Kalayci f21c6b0ca9 chore: release v0.40.0 2026-05-01 17:43:32 +02:00
Ulas Kalayci 2588cc43f1 chore: release v0.39.2 2026-05-01 09:46:54 +02:00
Ulas Kalayci 270c8cda9d chore: release v0.39.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 08:24:30 +02:00
Ulas Kalayci ef1f9e9383 chore: release v0.39.0 2026-04-30 19:54:44 +02:00
Ulas Kalayci f926babe38 chore: release v0.38.4 2026-04-30 17:25:31 +02:00
Ulas Kalayci 1615b6bd0a chore: release v0.38.3 2026-04-30 13:16:13 +02:00
Ulas Kalayci 4a050e92a8 chore: release v0.38.2
Fix recurring events with FREQ=WEEKLY;INTERVAL=N;BYDAY ignoring the
interval when crossing a week boundary (e.g. Friday → Monday).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 10:51:01 +02:00
Ulas Kalayci a6ecf7e9ca chore: release v0.38.1 2026-04-30 10:42:51 +02:00
Ulas Kalayci a02063a9f0 chore: release v0.38.0 2026-04-30 09:19:46 +02:00
Ulas Kalayci 5a93ac36aa chore: release v0.37.2 2026-04-30 08:20:36 +02:00
Ulas Kalayci 3cd6eb40d4 chore: release v0.37.1 2026-04-30 07:44:30 +02:00
Ulas Kalayci 3a99734b4c chore: release v0.37.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 07:16:03 +02:00
Ulas Kalayci 4f80903b04 chore: release v0.36.1 2026-04-29 21:33:10 +02:00
Ulas Kalayci 3f69c7c698 chore: release v0.36.0 2026-04-29 21:15:26 +02:00
Ulas Kalayci 137bc9ba23 chore: release v0.35.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 20:49:08 +02:00
Ulas Kalayci 6575aed1d6 chore: release v0.34.1 2026-04-29 20:15:30 +02:00
Ulas Kalayci 7215fae6a3 chore: release v0.34.0 2026-04-29 20:02:43 +02:00
Ulas Kalayci 7e137d1c21 feat: add kitchen-tabs utility, CSS, token and test 2026-04-29 19:55:28 +02:00
Ulas Kalayci a872ac52a9 chore: release v0.33.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 19:03:04 +02:00
Ulas Kalayci 02e12bad54 chore: release v0.33.0 2026-04-29 16:54:53 +02:00
Ulas Kalayci bf498b0a12 chore: release v0.32.3 2026-04-29 16:48:06 +02:00
Ulas Kalayci 6c069fc99c chore: release v0.32.2 2026-04-29 13:13:19 +02:00