Commit Graph

425 Commits

Author SHA1 Message Date
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
Ulas Kalayci bc61311ebc fix(settings): resolve scope error for CalDAV/CardDAV load functions
Root cause: loadCalDAVAccounts and loadCardDAVAccounts were defined
inside the render function but called from bindIcsEvents (outside render),
causing ReferenceError when accessing Settings page.

Changes:
- Move loadCalDAVAccounts and loadCardDAVAccounts to top-level functions
- Add user parameter to both functions (no longer in render scope)
- Update all recursive calls to pass user parameter
- Move initial load code from bindIcsEvents to render function

Fixes the "loadCalDAVAccounts is not defined" error in v0.47.0.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 22:27:48 +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 82a1f2c239 feat: add flexible reminder options for birthdays
Add support for customizable birthday reminders with preset offsets
(none, at time, 15min, 1h, 1d, 2d, 1w, 2w) and custom intervals.
Users can now configure when to be reminded of upcoming birthdays.

- Add migration 31: reminder_offset, reminder_custom_amount, reminder_custom_unit to birthdays table
- Update POST/PUT /birthdays routes to accept reminder fields
- Add getOffsetMinutes() helper in birthday service
- Update birthdayReminderAt() to calculate reminder time with offset
- Modify syncBirthdayReminder() to handle empty offset (no reminder)
- Add renderBirthdayReminderSection() UI component
- Move reminder-custom CSS from calendar.css to reminders.css
- Add protocol check to service worker (non-http protocol guard)

All translations already present in de.json.
Tests: 109 passing, 0 failing.

Co-Authored-By: Rafael Foster <rafaelfoster@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 20:31:42 +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 2c948eb235 chore: release v0.40.1 2026-05-01 17:57:30 +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
Ulas Kalayci f3dbbb37d7 fix: preserve dmy=DD.MM.YYYY, add dmy_slash for DD/MM/YYYY
The PR changed dmy from dots to slashes, breaking existing users.
Revert dmy to dots (backward compat), add dmy_slash for DD/MM/YYYY.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 15:28:18 +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 2588cc43f1 chore: release v0.39.2 2026-05-01 09:46:54 +02: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
Rafael Foster f1050e1fdb Merge branch 'main' of github.com:rafaelfoster/oikos 2026-04-30 13:44:58 -03:00
Rafael Foster 04aa5f5527 feat(calendar): remember last selected view 2026-04-30 13:40:11 -03:00
ulsklyc 345350c80b fix: prevent dashboard horizontal overflow on portrait mobile (#111) (#113)
Two root causes fixed:
- dashboard.css: remove `overflow: visible` from the "Admin Dashboard Layout"
  block that overrode the earlier `overflow: clip`, letting child content escape
  the dashboard container and cause layout overflow
- layout.css: replace `overflow-x: clip` with `overflow-x: hidden` on
  .app-content so layout overflow is properly contained at the scroll
  container level (clip only clips painting, not layout)

Co-authored-by: Ulas Kalayci <ulas.kalayci@googlemail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 17:24:28 +02:00
Ulas Kalayci 1615b6bd0a chore: release v0.38.3 2026-04-30 13:16:13 +02:00
Ulas Kalayci edd8d0889d ux: accent glow on quick-add input after successful item add 2026-04-30 09:13:48 +02:00
Ulas Kalayci e10516d32f ux: pulse error border on repeated validation failures 2026-04-30 09:13:06 +02:00
Ulas Kalayci d720772939 ux: empty state CTA fades in with delay to draw attention 2026-04-30 09:11:45 +02:00
Ulas Kalayci acec9db260 ux: suppress success toasts after 50 saves (long loop) 2026-04-30 09:11:04 +02:00
Ulas Kalayci f1f307388e ux: hide search kbd hint after first keyboard use (long loop) 2026-04-30 09:10:30 +02:00
Ulas Kalayci 89deb7b0ee ux: FAB entry animation stops after 5 views (long loop) 2026-04-30 09:09:39 +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 6e40ba89df fix(calendar): zeige korrekte Fehlermeldung bei zu großem Anhang; nutze --module-accent statt --module-calendar im Dropzone-CSS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 07:15:14 +02:00
Rafael Foster 4aa9bc2a48 fix(calendar): tighten modal and attachment rendering 2026-04-29 22:44:25 -03: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 5fd2ff80ad fix(ux): dashboard-metriken — wert-zahl xl/bold, label 2xs/uppercase 2026-04-29 21:04:49 +02:00
Ulas Kalayci 8e75a2584b feat(nav): küche-super-modul in desktop-sidebar — konsistent mit mobile nav 2026-04-29 21:04:26 +02:00
Ulas Kalayci 6974d7a86d fix(ux): more-icon auf ellipsis; sidebar-labels ab 1280px statt 1440px 2026-04-29 21:03:13 +02:00
Ulas Kalayci e7f0b21de9 fix(ux): such-overlay input nach oben — standard scan-pfad oben→unten 2026-04-29 21:02:34 +02:00
Ulas Kalayci 17232cf35f fix(ux): touch-targets auf 44px (iOS-Minimum) anheben 2026-04-29 21:02:00 +02:00
Rafael Foster 3b93cf0643 Merge branch 'ulsklyc:main' into main 2026-04-29 15:30:32 -03:00
Ulas Kalayci dcc87f02d8 fix: kitchen tabs bar cleared by second container.innerHTML in shopping.js 2026-04-29 20:14:30 +02:00
Ulas Kalayci bf345380a2 feat: link kitchen-tabs.css in index.html 2026-04-29 20:02:04 +02:00