Commit Graph

566 Commits

Author SHA1 Message Date
Rafael Foster 1d1d2291e5 Add calendar event icons and flexible date inputs 2026-04-27 21:38:06 -03:00
Ulas Kalayci 2ef3e6f004 chore: release v0.28.1 2026-04-27 22:34:35 +02:00
Ulas Kalayci 74dca56850 fix(google-sync): db.transaction → db.get().transaction in upsertGoogleEvents 2026-04-27 22:34:23 +02:00
Ulas Kalayci e759c4fe98 chore: release v0.28.0 2026-04-27 22:32:52 +02:00
Ulas Kalayci 890b00f0b0 fix(ux): toast swipe-to-dismiss, widget-icons neutral, reminders.css lazy 2026-04-27 22:32:09 +02: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 218282875c feat(dashboard): Widget-Reihenfolge per Drag-and-Drop anpassbar
Config-Schema um order-Feld erweitert.
Bestehende Configs werden automatisch migriert.
Drag-and-Drop zusätzlich zu Up/Down-Buttons im Customize-Modal.
2026-04-27 22:27:59 +02:00
Ulas Kalayci a66bd2b05c feat(ux): zentrales deleteWithUndo + Undo-Toast in Birthdays
deleteWithUndo in ux.js: onDelete ausführen, Undo-Toast anzeigen.
Birthdays migriert; Contacts/Notes/Meals haben bereits optimistische Undo-Logik.
2026-04-27 22:26:46 +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
Ulas Kalayci d0adde29c4 chore(css): totes .fab-CSS entfernen, alle Seiten nutzen .page-fab 2026-04-27 22:22:39 +02:00
Ulas Kalayci 94309a2294 fix(nav): title-tooltip für icon-only Sidebar (1024–1279px) 2026-04-27 22:22:03 +02:00
Ulas Kalayci e839e40906 fix(ui): modal-close 44px, widget-link tap-target 44px
Modal-Close: --target-md (40px) → --target-base (44px), Apple HIG.
Widget-Link: min-height 44px + padding für ausreichendes Tap-Target.
2026-04-27 22:21:36 +02:00
Ulas Kalayci f5d702c5e1 chore: release v0.27.1 2026-04-27 17:25:13 +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
Ulas Kalayci 0964d3a507 chore: release v0.27.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 17:20:35 +02:00
ulsklyc 98aeb4ac4f Merge pull request #91 from rafaelfoster/main
Adds a more family-oriented member management flow and profile customization.
2026-04-27 17:19:49 +02:00
Rafael Foster a1c839d4e7 Skip discard prompt after saving member edits 2026-04-27 09:09:31 -03:00
Rafael Foster 2dd38bfae3 Fix profile picture preview under CSP 2026-04-27 09:04:54 -03: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 29d9d28ee5 chore: release v0.26.4 2026-04-27 12:47:43 +02:00
Ulas Kalayci d1e48857b6 chore: release v0.26.3 2026-04-27 12:45:53 +02:00
Ulas Kalayci 3747db1096 chore: release v0.26.2 2026-04-27 12:40:54 +02:00
Ulas Kalayci bb96ddb6f6 fix: remove duplicate KPI bar and restore flat widget grid on dashboard
- Removed the KPI tiles section from renderDashboardOverview: it showed
  Tasks/Calendar/Birthdays/etc. counts in a bar at the top, duplicating
  the full widgets directly below it
- Replaced the main/side two-column workspace layout with the established
  flat dashboard__grid so all widgets align consistently in the web view
- Removed now-unused renderKpiTile function and stats/today locals
- Skeleton updated to match the simplified layout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 12:40:36 +02:00
Ulas Kalayci 45241a04f0 chore: release v0.26.1 2026-04-27 12:25:04 +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
Ulas Kalayci 5d519129a9 chore: release v0.26.0 2026-04-27 07:38:14 +02:00
Ulas Kalayci 55eca32db3 feat: birthday tracking, dashboard KPIs, and app name customization (#88)
- Add Birthdays module: CRUD with calendar/reminder auto-sync, photo upload, age notes
- Add DB migration 18 (birthdays table with calendar_event_id, trigger, indexes)
- Add dashboard widgets: birthdays, family participants, budget overview
- Add Settings > General: admins can set a custom app name (reflected in title/sidebar/login)
- Improve service worker: network-first caching for mutable JS/CSS assets
- Add translations for 16 locales (birthday keys)

Fixes applied during integration:
- innerHTML replaced with insertAdjacentHTML/replaceChildren throughout birthdays.js and dashboard.js
- docker-compose.yml personal dev changes reverted

Co-authored-by: Rafael Foster <rafaelgfoster@gmail.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 07:37:09 +02:00
Ulas Kalayci c9ba68cc9b fix: replace innerHTML with insertAdjacentHTML/replaceChildren; revert docker-compose dev changes
- birthdays.js: all innerHTML writes replaced with replaceChildren() + insertAdjacentHTML()
- dashboard.js: shell.innerHTML replaced with replaceChildren() + insertAdjacentHTML()
- docker-compose.yml: revert port to 3000 and restore image line (were personal dev changes)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 07:32:36 +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
Ulas Kalayci 2a2b473646 chore: release v0.25.8 2026-04-27 00:43:20 +02:00
Ulas Kalayci 143d451db0 test: fix makeInput mock missing setAttribute for aria-invalid
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:42:59 +02:00
Ulas Kalayci 308489b9b0 chore: release v0.25.7
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:39:02 +02:00
Ulas Kalayci efd4e8c924 feat(a11y): WCAG 2.2 accessibility fixes across four areas
- modal/_validateField: set aria-invalid on invalid inputs so screen readers
  announce field errors; login.js mirrors this for username/password fields
- color pickers (notes, calendar): wrap swatches in role="radiogroup" with
  aria-labelledby, add aria-checked per swatch, localized aria-labels instead
  of hex values, roving tabindex with Arrow/Enter/Space keyboard navigation
- nav badges: badge spans get aria-hidden="true"; nav link aria-label updated
  to include overdue count (tasks) or pending reminder count (reminders)
- router: remove aria-live from <main> (caused full page re-reads on nav);
  add dedicated #route-announcer sr-only region with aria-live=polite +
  aria-atomic, announces page label 50ms after render completes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:38:50 +02:00
Rafael Foster 3c5a8c7eb3 Adding option for allowing users to define the Application visible name 2026-04-26 19:32:19 -03:00
Ulas Kalayci ca5208341b chore: release v0.25.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:20:58 +02:00
Ulas Kalayci 201fa05afd feat(ux): microinteraction polish — undo tap feedback, strikethrough transition, modal loading state
- toast__undo: add :active scale + tap-highlight-color for reliable tap feedback
- task titles: animate text-decoration-color instead of snapping for smoother done-state
- modal forms: auto-add btn--loading on submit; rAF guard removes it on validation fail;
  MutationObserver removes it on error re-enable; btnSuccess clears it before checkmark

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:20:42 +02:00
Ulas Kalayci e8104adb1e chore: release v0.25.5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:33:39 +02:00
Ulas Kalayci 0ff6bbb3f1 fix(modal): add _isClosing guard and async-safe closeModal listener
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:33:05 +02:00
Ulas Kalayci 6cf6b9bec0 feat(ux): first-time onboarding overlay for new users
Shows a 3-screen modal overlay on first dashboard visit explaining key
features; dismissed state is persisted to localStorage so it never
reappears.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:29:57 +02:00
Ulas Kalayci 93ac635835 feat(nav): show active secondary module name on More button
When navigating to a secondary module (Budget, Recipes, Contacts, Settings),
the More button now displays the module's label and icon instead of "More".
This provides clearer navigation feedback to the user.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:13:55 +02:00
Ulas Kalayci ed0f8b2d57 feat(modal): warn before closing with unsaved changes 2026-04-26 19:03:38 +02:00
Ulas Kalayci 798f8ca87a feat(login): field-specific validation errors instead of generic message
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 18:53:35 +02:00
Ulas Kalayci 28fe41962f fix(shopping): fix undo callback for list deletion
Replace local state mutation after list deletion with loadLists() so the
tab bar stays in sync with the server. Also add a renderTabs() call in
the error path so the UI recovers correctly on API failure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 18:30:27 +02:00
Ulas Kalayci 9fba1d7ae4 chore: release v0.25.3 2026-04-26 18:24:27 +02:00
Ulas Kalayci 1cc1b63745 feat(login): add spinner animation during authentication
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 18:14:15 +02:00
Ulas Kalayci 60055e2d4f fix(i18n): rename Pinnwand to Notizen in German locale 2026-04-26 18:11:10 +02:00