Commit Graph

116 Commits

Author SHA1 Message Date
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 c465713418 refactor(settings): prioritize CalDAV/CardDAV in sync tab, fix heading hierarchy
Open standards (CalDAV, CardDAV, ICS) now appear first in the Sync tab
under a dedicated "CalDAV & CardDAV" section, making self-hosted sync
options prominent. Cloud services (Google, Apple) move to a secondary
"Cloud-Dienste" section. Fixes raw <h2> heading in CalDAV card — now
uses consistent settings-card__title like all other cards.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 07:22:39 +02:00
Ulas Kalayci 6cdef0102c feat(settings): add dedicated Sync tab with CardDAV contacts integration
- Rename Calendar tab to Synchronization with two sections:
  * Calendar Sync (Google, Apple, CalDAV, ICS)
  * Contact Sync (CardDAV) - NEW
- Add visual tab grouping with CSS separators between sections
- Implement CardDAV account management UI:
  * Add/delete accounts
  * Enable/disable addressbooks
  * Manual sync trigger
  * Connection testing
- Add UX improvements:
  * Status badges (success/error/syncing)
  * Empty states with onboarding
  * Inline help tooltips (prepared)
  * Breadcrumb navigation (prepared)
- Update i18n keys in all 14 locales
- All 109 tests passing

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 21:50:59 +02:00
Ulas Kalayci 2a4a6b945b docs: update documentation for CalDAV multi-account feature
- README.md: Updated Calendar feature description to mention multi-account CalDAV support
- docs/SPEC.md: Added caldav_accounts and caldav_calendar_selection table schemas, updated external_source enum, documented target columns
- public/locales/en.json: Added missing CalDAV i18n keys (calendarEnabled, calendarDisabled, calendarsRefreshed, deleteAccountConfirm, lastSync)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:51:38 +02:00
Ulas Kalayci 3c9b2840e7 feat(caldav): add Settings UI and Event Modal CalDAV target selection
- Add CalDAV accounts card to Settings page with:
  * List of configured accounts showing URL and last sync
  * Expandable calendar list with enable/disable checkboxes
  * Sync Now, Refresh Calendars, and Delete actions per account
  * Add Account modal with name, URL, username, password fields
- Add CalDAV target selector to event modal:
  * Dropdown showing local and all enabled CalDAV calendars
  * Grouped by account using optgroups
  * Pre-selects current target when editing events
  * Includes target_caldav_account_id and target_caldav_calendar_url in save
- Add CalDAV component styles to settings.css:
  * Account cards with header, meta, and action sections
  * Expandable calendar details with checkboxes and color dots
  * Empty state for no accounts
- Add missing i18n keys for calendar enable/disable, refresh, delete confirm
- Load CalDAV targets async when modal opens
- Admin-only access to account management

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:41:02 +02:00
Ulas Kalayci e149f5c01e feat(caldav): add German and English i18n keys 2026-05-04 08:34:31 +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 d61bdab65d Merge origin/main into improvement-dashboard-customization
Resolve sv.json conflict: take Swedish subcategory translations from
main and loan keys from PR branch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 17:42:23 +02:00
Rafael Foster 2b4f7352ed Refactor widget size selector to show only numeric dimensions 2026-05-01 09:18:44 -03:00
Rafael Foster f5377bd2f1 Improve dashboard widget sizing controls 2026-05-01 09:05:20 -03:00
Rafael Foster 9c5f8c9a99 Add dashboard widget customization 2026-05-01 08:53:25 -03:00
Rafael Foster e34ba33f9b Refine loan tab filtering and date formats 2026-05-01 08:24:39 -03:00
Rafael Foster 79f55cbfbc Improve loan dashboard interactions 2026-05-01 08:09:12 -03:00
Rafael Foster 977bee8a3a Separate budget and loan views 2026-05-01 07:52:43 -03:00
Ulas Kalayci 8489022186 i18n: complete Swedish translation and fill missing keys in all locales
Translates remaining English strings in sv.json (attachment, API tokens,
budget categories, backup, onboarding, offline banner).

Also adds missing keys (calendar/notes color names, emptyHint texts,
shortcut labels, tasks.navLabelOverdue, birthdays.photoOptional) to all
13 other locale files so every language is now complete against de.json.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 08:23:13 +02:00
Andreas Olsson 647b9a9aa0 Update swedish translation
Updated non translated strings to swedish.
2026-05-01 06:38:32 +02:00
Rafael Foster 9a80b785c8 Refine budget loan entry flow 2026-04-30 23:20:25 -03:00
Rafael Foster ce107c80a4 Add budget loan tracking 2026-04-30 23:12:38 -03:00
Ulas Kalayci e59a9818a9 fix(i18n): add time format translations to all 13 missing locales
Also translate server error message to English and remove stale
comment from calendar.js catch block.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:54:12 +02:00
Rafael Foster 8c9a5c6aa2 feat(settings): add time format preference 2026-04-30 13:48:35 -03:00
Ulas Kalayci 3f69c7c698 chore: release v0.36.0 2026-04-29 21:15:26 +02:00
Rafael Foster 3b93cf0643 Merge branch 'ulsklyc:main' into main 2026-04-29 15:30:32 -03:00
Ulas Kalayci b59c63bbb7 feat: add nav.kitchen, nav.search and shortcuts.goKitchen i18n keys 2026-04-29 19:54:07 +02:00
Rafael Foster f44d018d5c fix(docs): restore backups without helper script 2026-04-29 14:35:59 -03:00
Rafael Foster 0cbd93e4e0 feat(settings): add database backup management 2026-04-29 14:04:04 -03:00
Ulas Kalayci 3fc95da48f fix: innerHTML violations, German translations, and PT diacritics
- Replace innerHTML with replaceChildren/insertAdjacentHTML in birthdays.js and calendar.js (hook compliance)
- Translate calendar attachment i18n keys to German in de.json
- Fix missing diacritical marks in pt.json attachment strings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 16:53:45 +02:00
Rafael Foster d9218a4941 feat(calendar): add overlapping layout and event attachments 2026-04-29 08:53:07 -03:00
Ulas Kalayci 2e3c84db56 fix(i18n): complete tasks and documents translations for all 15 locales
Add missing tasks.statusArchived, archiveButton, archivedToast,
kanbanArchived, reminderNeedsDueDate and translate the documents
section from English placeholders into all supported languages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 12:24:34 +02:00
Rafael Foster 1ca8110d56 fix(documents): improve upload modal and document theme 2026-04-29 06:27:37 -03:00
Rafael Foster 72fca92066 feat(documents): add family document management 2026-04-29 06:14:29 -03:00
Rafael Foster 6eafe80395 feat(tasks): add archive button in list cards 2026-04-29 05:51:52 -03:00
Rafael Foster 175725a41c Merge branch 'ulsklyc:main' into main 2026-04-29 05:48:02 -03:00
Ulas Kalayci 06adc0f3f5 feat: add edit button for ICS subscriptions (#100)
Adds a pencil-icon edit button to each ICS subscription row. Clicking it
opens a modal to update name, color, and shared visibility via PATCH
/calendar/subscriptions/:id. Adds updatedToast i18n key to all 15 locales.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 10:37:16 +02:00
Rafael Foster 0e7142edc2 feat(tasks): advanced reminders UI and recurrence layout improvements 2026-04-29 05:33:06 -03:00
Ulas Kalayci 7940ea4ded release: v0.31.0 — family-contacts integration & settings restructure
- Family member records now store phone, email, and birthday, auto-synced
  to Contacts and Birthdays modules (PR #99 by @rafaelfoster)
- Settings gets dedicated Family and API Tokens tabs (admin-only)
- Avatar editor redesigned with icon buttons; tab bar fits standard width
- Dentist calendar icon normalised to 'tooth'; theme reset bug fixed
- i18n: missing family field translations added to 12 locales

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 07:20:53 +02:00
Rafael Foster 5062e1e61f Improve account profile and sidebar details 2026-04-28 21:11:49 -03:00
Rafael Foster d22f3c1034 Separate API token settings tab 2026-04-28 20:31:53 -03:00
Rafael Foster 69897666fb Refine family settings and calendar dentist icon 2026-04-28 20:28:50 -03:00
Rafael Foster 7b85db9b07 Sync family members with contacts and birthdays 2026-04-28 20:04:13 -03:00
Ulas Kalayci ed65cf099c fix(i18n/el): correct typo Διδαγραφή → Διαγραφή in recipes.deleteConfirm 2026-04-28 15:49:01 +02:00
Serhiy Bobrov a67a225b96 feat(locales): update recipe translations across multiple languages
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 15:03:10 +03:00
Rafael Foster 33e4afc009 Refine calendar icon picker 2026-04-27 21:53:18 -03:00
Rafael Foster 1d1d2291e5 Add calendar event icons and flexible date inputs 2026-04-27 21:38:06 -03:00
Ulas Kalayci 688d6a6efa feat(ux): kontextuelle Onboarding-Tipps in Empty-States aller Module 2026-04-27 22:31:01 +02:00
Ulas Kalayci 56252d3537 feat(desktop): globale Keyboard Shortcuts (/, n, ?, g+Buchstabe) 2026-04-27 22:29:09 +02:00
Ulas Kalayci 048e31e933 feat(pwa): Offline-Banner in App-Shell, reminders.css lazy geladen
Zeigt automatisch wenn navigator.onLine === false.
Blendet sich aus sobald Verbindung wiederhergestellt.
reminders.css aus globalem <link> entfernt (wird lazy geladen).
2026-04-27 22:24:42 +02:00
Rafael Foster 7e4db48a9f Merge branch 'main' of github.com:rafaelfoster/oikos 2026-04-27 08:52:18 -03:00
Rafael Foster 6e410cb671 Add member editing and profile pictures 2026-04-27 08:09:00 -03:00