Commit Graph

529 Commits

Author SHA1 Message Date
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
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
Ulas Kalayci e31231aa7b chore: release v0.25.2 2026-04-26 09:14:26 +02:00
Ulas Kalayci 70dc69bcc3 chore: release v0.25.1 2026-04-26 09:03:59 +02:00
Ulas Kalayci 3bfda59fc0 fix: compact widget empty states, view transitions for reordering, widget body padding
- widget__empty: column → row layout, icon 28→20px, padding space-5 → space-3
  saves ~40px vertical space per empty widget on mobile, keeps populated widgets
  visible above the fold
- widget__body: bottom padding space-3 → space-4 for slightly more breathing room
- rebuildList() now uses document.startViewTransition with prefers-reduced-motion
  guard; each customize-row gets a stable view-transition-name for smooth reorder
  animation without a JS animation library

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:03:45 +02:00
Ulas Kalayci 777e617b74 chore: release v0.25.0 2026-04-26 09:00:15 +02:00
Ulas Kalayci 127c774590 feat: API token authentication (PR #87 by rafaelfoster)
Adds non-interactive API token authentication for external integrations:
- SHA-256-hashed tokens with prefix, expiry, revocation, and last-used tracking
- Bearer / X-API-Key header support; CSRF bypass for token-authenticated requests
- Admin UI in Settings to create and revoke tokens (one-time plaintext display)
- OpenAPI 3.0 spec served at /api/v1/openapi.json and /openapi.json
- Migration #17: api_tokens table
- Structured error logging in server/logger.js
- Removed CDN-backed Swagger UI (hard constraint), reverted CSP
- Translated all apiToken i18n keys to German

Co-Authored-By: rafaelfoster <rafaelfoster@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 08:59:03 +02: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
Ulas Kalayci 2e054a6cc4 chore: release v0.24.4 2026-04-26 08:49:05 +02:00
Ulas Kalayci 5d95ad8d2a chore: release v0.24.3 2026-04-26 08:42:04 +02:00
Ulas Kalayci cb09c5d0db chore: release v0.24.2 2026-04-26 08:25:26 +02:00
Rafael Foster a1b1a71227 Merge branch 'ulsklyc:main' into main 2026-04-25 23:21:59 -03:00
Ulas Kalayci fa82a5d65e chore: release v0.24.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 22:32:21 +02:00
Ulas Kalayci 4e03d5cdcd docs: update audit docs with implementation status and decisions 2026-04-25 22:29:45 +02:00
Ulas Kalayci 667b30c3a6 fix: UX & accessibility improvements (7 fixes)
- Add --target-base token (44px) for search close button
- Correct touch targets: btn--icon-sm 36→44px min-size
- Remove role=presentation from modal overlay
- Fix modal swipe-to-close stuck state on upswing
- Add focus trap to search overlay
- Generate unique SVG gradient IDs to prevent collisions
- Add skip-to-content link for keyboard/screen reader users
2026-04-25 22:27:25 +02:00
Ulas Kalayci 7200271387 fix: add skip-to-content link — enables keyboard navigation to main content for screen readers 2026-04-25 22:25:29 +02:00
Ulas Kalayci 1c0725cc57 fix: generate unique SVG gradient IDs to prevent DOM ID collisions on re-render 2026-04-25 22:24:40 +02:00
Ulas Kalayci b07a254d0a fix: add focus trap to search overlay — prevents keyboard focus leaking to hidden page 2026-04-25 22:23:59 +02:00
Ulas Kalayci b7c0312c2b fix: modal swipe-to-close — keep dragging active on upswing to prevent stuck state 2026-04-25 22:22:52 +02:00
Ulas Kalayci 808a70682c fix: remove role=presentation from modal overlay — restores screen reader accessibility 2026-04-25 22:22:17 +02:00
Ulas Kalayci 4da6061adb fix: correct touch targets — btn--icon-sm 36→44px min-size, document target-sm as visual-only 2026-04-25 22:21:45 +02:00
Ulas Kalayci 0dd4a3278c fix: add missing --target-base token (44px) for search close button 2026-04-25 22:21:04 +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 e31f5d3b60 chore: release v0.24.0 2026-04-25 17:01:52 +02:00
Ulas Kalayci cb614fd58b feat: budget subcategories, customizable categories, and English log messages (#86)
- Budget categories and subcategories moved to database tables (migration 15+16)
- Expense categories migrated from German strings to stable English slugs
- New `/budget/categories` and `/budget/categories/:key/subcategories` POST endpoints
- Budget modal now shows subcategory selector with inline add-new buttons
- Added 35 predefined subcategories across 8 expense categories (housing, food,
  transport, personal_health, leisure, shopping_clothing, education, financial_other)
- CSV export updated to include subcategory column and English headers
- All server log messages and error strings translated to English
- i18n: all 14 non-German locales extended with new budget category/subcategory keys
- Service worker cache version bumped (v52/v47)

Contributed by @rafaelfoster

Co-Authored-By: Rafael Foster <rafaelfoster@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 17:01:15 +02: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 a97f8651ac chore: release v0.23.17
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 10:52:34 +02:00
albanobattistella 8c42d4d9c5 Update Italian translation (#85) 2026-04-25 10:51:10 +02:00
ulsklyc 70f11ac7b6 Merge pull request #84 from ulsklyc/fix/82
fix: i18n missing keys across all locales (Issue #82)
2026-04-24 09:53:00 +02:00
Ulas Kalayci 417afe427d chore: merge main into fix/82, resolve version conflict (0.23.16 wins)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 09:52:45 +02:00
Ulas Kalayci 38e5a7a330 chore: release v0.23.16 2026-04-24 09:02:56 +02:00