Commit Graph

812 Commits

Author SHA1 Message Date
czacheur 4aa2db7c63 Update pl.json (#140)
CI / Tests (Node.js 22.x) (push) Successful in 56s
Docker Publish / Build & Push Image (push) Failing after 2m11s
corrected double quotation mark at the end of the line to typo quotation and quotation mark.
2026-05-09 10:13:36 +02:00
Ulas Kalayci 4aaa6a1589 fix: rate-limit /manifest.webmanifest route (CodeQL #9)
Applies the existing apiLimiter middleware to the manifest route,
which performs a DB lookup without prior rate limiting.

Closes https://github.com/ulsklyc/oikos/security/code-scanning/9
2026-05-09 10:09:29 +02:00
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 761408ae7c fix: correct housekeeping module bugs after merge
- Restore migration order: remove spurious v30 birthday-reminders entry
  inserted before CardDAV (v30) and birthday-reminders (v31), which caused
  a duplicate v31 on fresh installs
- Restore birthdayReminderAt() offsetMin handling (regression from merge)
- Fix check-in INSERT: check_out was set to checkIn instead of NULL,
  making sessions invisible to loadOpenSession (IS NULL query)
- Implement check-out path in toggleSession() — only check-in was reachable
- Wrap GET /task-templates in try/catch per project convention
- Fix DELETE response envelopes: { ok: true } → { data: ... }
- Remove housekeeping worker exclusion from GET /auth/users
- Replace toISOString() with local-date helper to avoid UTC date shift
- Use user currency preference in money() instead of hardcoded BRL
- Replace hardcoded #7C3AED fallbacks in style attrs with CSS token
- Add German translations for documents folder and settings housekeeping keys
- Remove DESIGN.md and IMPLEMENTATION.md (AI planning artifacts)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 20:18:26 +02:00
Rafael Foster 22ec13e559 feat: add housekeeping module for household staff management
* Adding flexible reminder options to birthdays

* Fix database migration merge conflict

* Truncate calendar popup descriptions

* Log app version on backend startup

* Add host-mounted data and backup folders

* feat: add housekeeping module

* fix: align housekeeping UI and add task creation

* refactor: rebuild housekeeping experience

* feat: support multiple housekeeping staff

* feat: integrate housekeeping visits with calendar

* feat: refine housekeeping visits and payments

* feat: add housekeeping staff visit logs

* feat: add housekeeping receipts and document folders

* feat: localize housekeeping folders and chores

* feat: refine housekeeping tabs and document folders

* fix: sync housekeeping tab active state

* feat: use configured app name in onboarding and manifest
2026-05-08 20:14:51 +02:00
ulsklyc d19689a1ab Merge pull request #137 from ulsklyc/add-claude-github-actions-1778261951158
Add Claude Code GitHub Workflow
2026-05-08 19:40:25 +02:00
ulsklyc 123592d5a3 "Update Claude Code Review workflow" 2026-05-08 19:39:13 +02:00
ulsklyc d9faa37ee5 "Update Claude PR Assistant workflow" 2026-05-08 19:39:12 +02:00
Ulas Kalayci 9762db8d0f chore: release v0.48.3 2026-05-06 16:24:22 +02:00
ulsklyc 358c23d204 Merge pull request #132 from ulsklyc/feat/violet-rebrand
feat: rebrand accent color to Violet #6c3aed
2026-05-06 16:23:24 +02:00
Ulas Kalayci 9883abda79 feat: rebrand accent color to Violet #6c3aed
Replace Amber brand color with Violet (#6c3aed) across the entire app.

- tokens.css: accent palette → Violet (light #6c3aed, dark #a78bfa)
- Logo, favicon, PWA icons, Apple touch icon regenerated
- GitHub Pages (index.html, install.html): accent + inline SVG updated
- generate-icons.js: gradient updated for future icon generation
- Semantic colors (warning, notes, meals) intentionally unchanged
2026-05-06 16:06:43 +02:00
Ulas Kalayci 3603a946c4 docs: expand v0.48.2 changelog entry with brand color rationale 2026-05-06 15:06:55 +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
ulsklyc 1629356a6d fix: add missing submit button to CalDAV and CardDAV add account modals (#130)
The onSave callback was being executed immediately on modal open (its
purpose is to wire up event listeners), causing the required-fields
error to appear instantly and leaving the form with no way to submit.

Both forms now include modal-actions buttons in the content HTML, and
onSave correctly attaches a submit event listener instead of running
validation directly.

Fixes #128

Co-authored-by: Ulas Kalayci <ulas.kalayci@googlemail.com>
2026-05-06 10:37:35 +02:00
ulsklyc 8dfd8e4fbf Merge pull request #129 from ulsklyc/feat/multi-assignment
feat: multi-person assignment for tasks and calendar events (v0.48.0)
2026-05-06 10:17:02 +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
ulsklyc ed6d641b67 Merge pull request #127 from ulsklyc/refactor/settings-sync-restructure
refactor(settings): Sync-Tab — CalDAV/CardDAV priorisiert, Heading-Bug gefixt
2026-05-06 07:36:50 +02:00
Ulas Kalayci c4cb52d042 feat(nav): shared sub-tabs component for settings and kitchen
Extracts the tab-bar UI into a reusable renderSubTabs() utility
(public/utils/sub-tabs.js + public/styles/sub-tabs.css) so all
sub-module navigation shares one implementation and visual style.

- Settings: replaces template-literal <nav class="settings-tabs">
  with renderSubTabs(); tabs now show icon + label (pill-style),
  group separators via separatorBefore, panel switching via onChange
- Kitchen: renderKitchenTabsBar() becomes a thin wrapper around
  renderSubTabs(); kitchen-tabs.css keeps only layout adjustment rules
- CSS: kitchen-tab* rules removed from kitchen-tabs.css,
  settings-tab-btn* rules removed from settings.css; both now
  inherit from sub-tabs.css
- tokens.css: adds --sub-tabs-height (52px default;
  kitchen overrides to --kitchen-tabs-height: 56px)
- test-browser-loader.mjs: resolves browser-absolute /utils/*.js
  imports to public/ directory for Node test compatibility

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 07:33:54 +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 2da5295f87 chore: release v0.47.4 2026-05-06 07:00:40 +02:00
Ulas Kalayci b545d83f64 fix: modal onClose callback, calendar popup truncation, datetime validation
- modal.js: add onClose callback to openModal(), fix _initialFormTimeout
  cleanup, deduplicate escape/overlay-click handlers in confirmModal,
  promptModal, selectModal using the new callback
- calendar.js: replace popup.innerHTML with insertAdjacentHTML (constraint),
  add truncateDescription() to cap long event descriptions at 500 chars
- validate.js: extend DATETIME_RE to cover ISO 8601 with ms/timezone,
  normalise datetime values to YYYY-MM-DDTHH:MM on input
- index.js: include app version in startup log message
- docker-compose.yml / .env.example: switch from named volume to
  host-mounted DATA_DIR/BACKUP_DIR with sane defaults
- docs/installation.md: document host-mount data paths

Co-Authored-By: Rafael Foster <rafaelfoster@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 07:00:07 +02:00
Ulas Kalayci 56b2fd471d chore: release v0.47.3 2026-05-06 01:45:38 +02:00
Ulas Kalayci d7cae21063 docs: archive cleanup plan, update SPEC and README for v0.45–v0.47
- Archive docs/designs/2026-05-04-repo-cleanup-design.md to docs/archive/designs/
- Remove docs/designs/2026-05-04-settings-sidebar-demo.html (implemented)
- SPEC.md: add CardDAV Accounts and CardDAV Addressbook Selection tables
- SPEC.md: expand Contacts table with multi-value fields, CardDAV columns, and
  new contact_phones / contact_emails / contact_addresses sub-tables
- SPEC.md: add birthday reminder_offset columns (v0.46.0)
- SPEC.md: update External Calendars table (apple→caldav migration note)
- SPEC.md: update Tasks module (bulk actions, v0.42.0)
- SPEC.md: update Contacts module (CardDAV multi-account sync, multi-value fields)
- SPEC.md: update Birthdays module (flexible reminder offsets, v0.46.0)
- SPEC.md: update Settings module (Synchronization tab, module toggles, scheduled
  backups, CardDAV UI, correct tab count and names)
- README.md: update Birthdays row (flexible reminder offsets)
- README.md: update Backup row (automatic scheduled backups)
- .gitignore: exclude screenshot scripts, seed scripts, backup files,
  docs/github-pages/ staging folder

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 01:45:00 +02:00
Ulas Kalayci 9acb10ab1d Passe GitHub Pages Installationsguide an neues Design an
- DM Sans + DM Serif Display statt Fraunces
- Purple Farbschema (#6C3AED) statt Blue (#2563EB)
- CSS-Variablen konsistent mit index.html (--ff-display, --text-1, --border)
- Logo SVG: Purple Gradient
- i18n: data-t statt data-i18n (inkl. JavaScript-Anpassung)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-06 01:37:18 +02:00
Ulas Kalayci 12ec14af7b Erweitere GitHub Pages Features und aktualisiere Beschreibungen
- Füge Documents, Recipes und Birthdays zu Feature-Grid hinzu (8 statt 6 Features für ausgewogene 4+4 Darstellung)
- Aktualisiere Calendar-Sync-Beschreibung mit CalDAV-Anbietern und ICS-Subscriptions
- Aktualisiere Budget (15 Währungen, Loan-Tracking), Contacts (CardDAV-Sync), Notes (Markdown-Support)
- Entferne Kanban Board aus Grid (bereits Teil von Task Management)
- Ergänze alle Übersetzungen (EN/DE) für neue und aktualisierte Features

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-05 13:06:54 +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 d00bb0aaa8 Redesign GitHub Pages: Hero-Layout, Sektionsreihenfolge, Dark Mode Farben
- Hero: Tablet-Screenshot neben Überschrift platziert, mobile Screenshot entfernt
- Grid-Layout für Hero-Bereich (Text links, Bild rechts)
- Sektionsreihenfolge: "Your Data. Your Private Place" vor "Features"
- Dark Mode Farben an App-Design angepasst (aus tokens.css):
  - Neutral-Skala: #1A1A18, #222220 statt #111015, #222130
  - Akzent: #818CF8 (Indigo-400) statt #A78BFA
  - Konsistente Farbgebung mit der App
- Responsive Design für neues Layout angepasst

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-05 12:55:30 +02:00
Ulas Kalayci 82f1a76a5d Update GitHub Page design and screenshots
- Implement modern design with DM Serif Display + DM Sans fonts
- Switch accent color to purple/violet (#6C3AED / #A78BFA)
- Add hero section with desktop + mobile mockups
- Add feature showcase with alternating layouts
- Add screenshot carousel
- Update all screenshots to new versions
- Maintain dark/light mode and EN/DE language support

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-05 12:36:20 +02:00
Ulas Kalayci dd5ba80541 Reorder GitHub Pages sections: Preview before Features
Improved content flow by showing screenshots (Preview section) before the Features section, giving visitors a visual first impression before diving into the feature list.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-05 11:29:11 +02:00
Ulas Kalayci f1dd8e5161 docs: update screenshots to reflect current UI state
Replace old screenshots with new ones showing updated dashboard design and weather widget. Update README to display mobile + desktop side-by-side, regenerate social preview images with new dashboard screenshot.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-05 11:22:37 +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 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 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 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 43225ee20c chore: bump version to v0.46.0 2026-05-04 20:32:26 +02:00
Ulas Kalayci 83d816c01b Merge branch 'feature/birthday-reminders' 2026-05-04 20:31:48 +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 df45fba70e docs: update README Contacts module description
Reflect v0.45.0 CardDAV multi-account sync and multi-value contact
fields (multiple phones/emails/addresses per contact).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 20:10:30 +02:00
Ulas Kalayci 84664279c3 docs: update BACKLOG and remove emojis from CHANGELOG
- BACKLOG.md: remove BL-11 (implemented in v0.45.0), strip "Completed
  Features" section (CHANGELOG is authoritative source)
- CHANGELOG.md: no emojis found (already clean)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 20:10:11 +02:00
Ulas Kalayci 601d136a70 docs: remove session-specific PROGRESS.md
Remove CardDAV v0.45.0 session tracking document. Information is
preserved in git history, CHANGELOG.md, and archived design docs.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 20:09:31 +02:00
Ulas Kalayci dd16078f7a docs: archive implemented plans, specs, and design documents
Move completed implementation plans (2026-04-20), design specs,
and audit documents to docs/archive/ for historical reference
while keeping the main docs/ directory focused on active
documentation.

Archived:
- 1 implementation plan (superpowers/plans/)
- 2 design specs (superpowers/specs/)
- 3 design documents (designs/)
- 5 audit/proposal documents (root level)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 20:09:23 +02:00
Ulas Kalayci 7349037880 docs: add repo cleanup design specification
Design document for comprehensive repository and documentation
maintenance after v0.45.0 release. Covers archiving strategy for
implemented plans/specs, BACKLOG/CHANGELOG updates, and README
improvements.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-04 20:06:44 +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