Commit Graph

820 Commits

Author SHA1 Message Date
Ulas Kalayci 4b4d9a1ffd feat: generic CalDAV multi-account sync (#90)
Replaces single Apple CalDAV with generic multi-account CalDAV integration.

Features:
- Multiple CalDAV accounts (iCloud, Nextcloud, Radicale, Baikal)
- Per-account calendar selection via checkboxes
- Bidirectional sync (CalDAV ↔ Oikos)
- Optional outbound target selection per event
- Migration of existing Apple CalDAV data

Technical:
- New tables: caldav_accounts, caldav_calendar_selection
- New service: server/services/caldav-sync.js
- New API routes: /calendar/caldav/*
- Enhanced UI in Settings and Calendar event modal
- 7 new tests, all passing

Closes #90

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:52:36 +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 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 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 c5a9799983 feat(caldav): add calendar selection, sync, and API routes
- Add getCalendars() and updateCalendarSelection() to caldav-sync.js
- Add sync() function for bidirectional CalDAV synchronization
- Add getStatus() to report on all accounts and enabled calendars
- Add 8 new API routes to calendar.js for CalDAV account and calendar management
- All routes require admin role for security

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:32:46 +02:00
Ulas Kalayci 01ccf715e5 feat(caldav): add account management functions (add, list, update, delete) 2026-05-04 08:20:17 +02:00
Ulas Kalayci 59773bd797 feat(caldav): implement account CRUD operations
Add createAccount, updateAccount, deleteAccount functions with validation, error handling, and logging. Implements Task 3 from the CalDAV multi-account spec.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:00:49 +02:00
Ulas Kalayci 7b91fa5136 Fix caldav-sync.js imports to match Task 2 spec
Remove buildICS, escapeICS, unescapeICS imports - these will be
needed in Task 5 (Sync Functions), not in Task 2. Keep only the
4 functions specified in the Task 2 spec: parseICS, formatICSDate,
tzLocalToUTC, applyDuration.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 07:56:57 +02:00
Ulas Kalayci a159a57e9c feat(caldav): add caldav-sync service base structure with helpers
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 07:53:39 +02:00
Ulas Kalayci 4eb7e852fd feat: add DB migration for CalDAV multi-account support
- caldav_accounts table for account credentials
- caldav_calendar_selection table for calendar selection
- Migrate Apple CalDAV data to caldav tables
- Add target_caldav_* columns to calendar_events
- Update external_source CHECK to include 'caldav'
- Update external_calendars.source CHECK to include 'caldav'
- Enhance migration runner to support function-based migrations

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 07:42:57 +02:00
Ulas Kalayci 26168ebef0 docs: spec self-review - klarstellungen zu scope und designentscheidungen 2026-05-04 07:24:29 +02:00
Ulas Kalayci d9aa70eedf docs: design spec für generisches CalDAV Multi-Account Sync
- Transformation Apple CalDAV → generisch
- Multiple Accounts parallel
- Kalenderauswahl per Checkboxen
- Bidirektional mit Account-Auswahl
- Vollständige Architektur, DB-Schema, API, UI, Migration, Testing

Siehe Issue #90
2026-05-04 07:23:38 +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 3b02cb1aee docs: update BACKLOG, SPEC, README, and CONTRIBUTING to v0.41.0
- BACKLOG: added completed entries for v0.38.2–v0.41.0 (loans, widget sizes,
  date formats, birthday badge, calendar improvements, typography, reminders)
- SPEC: added Budget Loans and Budget Loan Payments data-model tables; updated
  Budget module description with Loans tab and API; updated Dashboard with
  widget size presets; corrected Settings tab count from 8 to 9
- README: Budget feature row now mentions the loans tracker
- CONTRIBUTING: added test:kitchen-tabs and test:setup to individual suite list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 20:16:26 +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
ulsklyc c9b8381206 Merge pull request #117 from rafaelfoster/improvement-dashboard-customization
Dashboard Customization & Widget Layout Enhancements
2026-05-01 17:42:34 +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 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 a97e0f1480 Merge PR #115: Complete Swedish translation and fix missing i18n keys
Translates remaining English strings in sv.json and fills missing keys
(calendar/notes colors, emptyHint texts, shortcuts, navLabelOverdue,
photoOptional) across all 14 locale files.

Co-Authored-By: Andreas Olsson <olsson82@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 08:23:27 +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 ef1f9e9383 chore: release v0.39.0 2026-04-30 19:54:44 +02:00
Ulas Kalayci 51bb0f95b2 feat(settings): add time format preference (24h/12h) (#114)
Co-authored-by: rafaelfoster <rafaelfoster@users.noreply.github.com>
2026-04-30 19:54:19 +02: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
Ulas Kalayci f926babe38 chore: release v0.38.4 2026-04-30 17:25:31 +02: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 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 ced49d43b6 feat: microinteraction long loops and polish improvements 2026-04-30 09:18:49 +02:00
Ulas Kalayci edd8d0889d ux: accent glow on quick-add input after successful item add 2026-04-30 09:13:48 +02:00