Commit Graph

143 Commits

Author SHA1 Message Date
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 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 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 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
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 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
Rafael Foster 4aa9bc2a48 fix(calendar): tighten modal and attachment rendering 2026-04-29 22:44:25 -03:00
Rafael Foster 6e177bb8c4 docs(api): document family documents endpoints 2026-04-29 18:07:18 -03:00
Rafael Foster 0cbd93e4e0 feat(settings): add database backup management 2026-04-29 14:04:04 -03:00
Rafael Foster d9218a4941 feat(calendar): add overlapping layout and event attachments 2026-04-29 08:53:07 -03:00
Rafael Foster 72fca92066 feat(documents): add family document management 2026-04-29 06:14:29 -03:00
Rafael Foster 9759f5e267 feat(tasks): add archived status support in API and schema 2026-04-29 05:33:06 -03:00
Rafael Foster 4d3c2688fe Prevent deletion of family members from contact list 2026-04-28 22:17:21 -03:00
Rafael Foster 5062e1e61f Improve account profile and sidebar details 2026-04-28 21:11:49 -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 6f8cc712a7 chore: release v0.30.3 2026-04-28 22:40:36 +02:00
Rafael Foster b4d74f239b Expand calendar event icon options 2026-04-27 22:22:30 -03:00
Rafael Foster 1d1d2291e5 Add calendar event icons and flexible date inputs 2026-04-27 21:38:06 -03:00
Ulas Kalayci 74dca56850 fix(google-sync): db.transaction → db.get().transaction in upsertGoogleEvents 2026-04-27 22:34:23 +02:00
ulsklyc 19e6569281 fix(google-sync): skip null items and await initial sync (#93)
Null/undefined items in the Google Calendar API response caused a
TypeError on `item.status` access, silently aborting the sync while
the OAuth callback had already redirected to the success page.

- Filter null items in `upsertGoogleEvents` with an early `continue`
- Await `sync()` in the OAuth callback so errors surface as
  `sync_error=google` redirects instead of false success

Resolves #92

Co-authored-by: Ulas Kalayci <ulas.kalayci@googlemail.com>
2026-04-27 17:24:37 +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
Rafael Foster b82a86c4b3 Add family roles to member management 2026-04-27 07:53:43 -03:00
Ulas Kalayci 6a575520aa chore: release v0.26.5 2026-04-27 12:51:10 +02:00
Ulas Kalayci 1821b7147a fix: path is not defined in renderPage and HAVING clause SQL error
- router.js: route-announcer used bare `path` variable which is not in scope
  inside renderPage(); replaced with `route.path`
- dashboard.js: shoppingLists query used `HAVING open_count > 0` without GROUP BY;
  SQLite rejects this — replaced with a WHERE subquery

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 12:24:39 +02:00
Rafael Foster 08199495b6 A lot of change in this commit. Changing the dashboard to get more data and the new features added 2026-04-26 21:18:59 -03:00
Rafael Foster 3c5a8c7eb3 Adding option for allowing users to define the Application visible name 2026-04-26 19:32:19 -03:00
Rafael Foster b0c1b8b6f9 Merge branch 'main' of github.com:rafaelfoster/oikos 2026-04-26 07:50:59 -03:00
Rafael Foster 394b4ea84e Adding Birthday tracking feature - to compete with FamilyWall 2026-04-26 07:36:53 -03:00
Ulas Kalayci cd68bbfae7 fix: remove CDN swagger UI, revert CSP, translate apiToken i18n keys to German
- Delete public/doc-assets/swagger.html and swagger-init.js (CDN dependency violates project constraints)
- Remove /docs route from server/index.js
- Revert styleSrc and fontSrc in CSP to not include cdn.jsdelivr.net
- Translate all 22 settings.apiToken* keys in de.json from English to German

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 08:57:21 +02:00
Rafael Foster 112b05508b Adding /api/v1/budget/categories and /api/v1/budget/categories endpoints 2026-04-25 12:58:38 -03:00
Rafael Foster 71c0552e34 Adding Rest API documentation page with Swgger download on the /docs endpoint 2026-04-25 12:50:50 -03:00
Rafael Foster bb44a90d48 Fixing API Token conflict with req.session 2026-04-25 12:34:10 -03:00
Rafael Foster 6e2dec66e8 Merge branch 'main' of github.com:rafaelfoster/oikos 2026-04-25 12:24:35 -03:00
Rafael Foster f43dee4cc0 Adding Rest API token with expiration and revocation options. 2026-04-25 12:22:58 -03:00
Ulas Kalayci 95934bac23 fix: review corrections for PR #86
- Remove .codex (Codex CLI artifact, not part of project)
- Restore CHANGELOG.md v0.23.17 entry (was deleted by contributor's fork)
- Restore version to 0.23.17 in package.json and package-lock.json
- Restore native translations for catFood, catLeisure, catEducation in ar, el,
  hi, ja, ru, sv, tr, uk, zh (PR had replaced them with English strings)
- Replace Portuguese seed names in migration 16 with English (housing, food,
  transport, personal_health, leisure, shopping_clothing, education,
  financial_other and all subcategory display names)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 17:01:06 +02:00
Rafael Foster bdd6e559d5 Replacing entire backend messages (especially logs) with English instead of Germany 2026-04-25 10:56:46 -03:00
Rafael Foster 140fa78ca1 Initial commit after fork. Moving Budget categories to Database and adding subcategories, with customization options 2026-04-25 10:05:27 -03:00
Ulas Kalayci e1ea0bdb7e fix(weather): show correct wind speed and unit for imperial units
When OPENWEATHER_UNITS=imperial, OpenWeatherMap returns wind speed in
mph directly — the server was incorrectly multiplying by 3.6 (m/s→km/h)
on top of that. All locale strings also hardcoded the unit label instead
of using a {{windUnit}} placeholder, so the label always read km/h.

Resolves #79

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 07:39:13 +02:00
Konrad M. 583d2543fb fix(tasks): overdue always first; sort by due date, priority as tiebreaker
effectiveDue() and sortTasks() added — same logic on client (tasks.js)
and server (dashboard.js urgentTasks moved from SQL to JS sort).
Applies in list-group, Kanban, and dashboard widget views.
SQLite DATE('now') replaced with new Date() for timezone-safe due_time.
2026-04-21 22:18:14 +02:00
Konrad M. 69c72f3abd feat(calendar): track external calendar name and color through Google/Apple sync
Google and Apple sync services now fetch calendar metadata and persist it via
upsertExternalCalendar(). The /calendar and /upcoming endpoints JOIN on
external_calendars to return cal_name and cal_color with every event.
2026-04-21 22:18:14 +02:00
Konrad M. 6cae070061 feat(db): add external_calendars table and link to calendar events (migration v14)
Stores display name and color per synced Google/Apple calendar.
calendar_events gains a calendar_ref_id FK for join-based name/color lookup.
2026-04-21 22:18:14 +02:00