Commit Graph

291 Commits

Author SHA1 Message Date
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 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 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 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 71c0552e34 Adding Rest API documentation page with Swgger download on the /docs endpoint 2026-04-25 12:50:50 -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 140fa78ca1 Initial commit after fork. Moving Budget categories to Database and adding subcategories, with customization options 2026-04-25 10:05:27 -03:00
albanobattistella 8c42d4d9c5 Update Italian translation (#85) 2026-04-25 10:51:10 +02:00
Ulas Kalayci 38e5a7a330 chore: release v0.23.16 2026-04-24 09:02:56 +02:00
Ulas Kalayci e611f24981 fix: add missing i18n keys for nav, search, tasks, calendar, settings, reminders in all locales
Resolves #82

nav.more, calendar.ics.reset/resetToast, settings.ics.*, tasks.filter*,
tasks.swiped*, search.* and reminders.* keys were missing in all 14
non-German locale files, causing the app to fall back to German strings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 08:50:50 +02:00
Ulas Kalayci 7e9ce188d2 fix: korrigiere schwedische Übersetzungsfehler in Rezepte-Sektion
- "Titel är krävande" → "Titel krävs" (krävande = anspruchsvoll, nicht obligatorisch)
- "kopiera" → "kopia" (Verb statt Substantiv als Suffix)
- "Recept länk" → "Receptlänk" (Kompositum, konsistent mit bestehenden Schlüsseln)
- "favorit recept" → "favoritrecept" (Kompositum)
- "dom" → "dem" (formale Schreibweise)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 09:16:52 +02:00
Andreas Olsson 6373cb517d fix: update swedish translation
Translated english strings to swedish.
2026-04-22 17:50:17 +02:00
Ulas Kalayci 00afd37c90 chore: release v0.23.12 2026-04-22 12:39:00 +02:00
Ulas Kalayci 420391286c chore: release v0.23.11 2026-04-22 11:51:20 +02:00
Ulas Kalayci ed2d47eae1 chore: release v0.23.10 2026-04-22 11:26:10 +02:00
Ulas Kalayci 88cd1b8d18 chore: release v0.23.9 2026-04-22 11:17:41 +02:00
Ulas Kalayci 6383f63f88 chore: release v0.23.8 2026-04-22 10:46:26 +02:00
Ulas Kalayci df9256ebff chore: release v0.23.7 2026-04-22 08:53:36 +02:00
Ulas Kalayci 372a51bdb1 chore: release v0.23.6 2026-04-22 08:50:43 +02:00
Ulas Kalayci a30a069d05 chore: release v0.23.5 2026-04-22 08:42:20 +02: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
Ulas Kalayci 6a4ef09912 chore: release v0.23.2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 07:34:23 +02:00
Ulas Kalayci 7b04d5a48a fix: resolve design token violations and locale bug
- Add --color-warning-translucent and --color-soon tokens to tokens.css
- Replace hardcoded font-size 1.4rem with var(--text-xl) in dashboard.css
- Replace hardcoded rgba color with var(--color-warning-translucent)
- Remove duplicate .task-item__meta--overdue rule
- Fix hardcoded 'de-DE' locale: use formatTime() from i18n.js
- Fix formatDueDate: don't show time (23:59) when no due_time is set

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 23:38:56 +02:00
Konrad M. 04b22cb466 chore(sw): bump cache to oikos-shell-v50 / oikos-pages-v45 / oikos-assets-v45 2026-04-21 22:18:14 +02:00
Konrad M. bc8acea12a fix(i18n): add task due-date locale keys for all 16 supported languages
Adds overdue, dueSoon, dueToday, dueTomorrow, and noDueDate keys to
the tasks section of every locale file used by formatDueDate().
2026-04-21 22:18:14 +02:00
Konrad M. 9f092ff633 fix(dashboard): FAB shortcut opens add modal directly on target page
After navigating to tasks/calendar/shopping/notes via FAB, the page's
primary add-button is programmatically clicked so the new-item modal
opens without a second tap. FAB container right-margin doubled to avoid
overlap with the browser's edge-swipe gesture zone.
2026-04-21 22:18:14 +02:00
Konrad M. f3a576a072 fix(dashboard): open task quick-action modal on task click
Tasks in the urgent-tasks widget now open a small modal with Edit and
Done actions instead of navigating directly to /tasks?open=<id>.
2026-04-21 22:18:14 +02:00
Konrad M. eede4a9708 fix(dashboard): flatten header; replace greeting with date+time; split overdue/soon chips
Header shows current date and time instead of user name + separate date line.
urgentCount replaced by overdueCount (overdue tasks) and dueSoonCount (due today/soon),
each with a distinct chip color. formatDueDate updated to accept due_time and return
accurate overdue/soon states against the current moment.
dashboard grid expands to 4 columns at 1280px instead of 1440px.
2026-04-21 22:18:14 +02:00
Konrad M. 8f36c359aa fix(dashboard): fix widget nav button on iOS; lift header above backdrop-filter
widgetHeader replaces <a href> with <button type="button"> so iOS Safari
does not intercept the touch event before the JS click handler fires.
widget__header gets position: relative; z-index: 2 to appear above the
backdrop-filter ::after pseudo-element stacking context.
2026-04-21 22:18:14 +02:00
Konrad M. c6c02f0f30 fix(dashboard): show external calendar name and location in upcoming events
Imports fmtLocation; renderUpcomingEvents adds event-item__cal span for
cal_name and shows location with normalized ICS escapes via fmtLocation().
Event color dot gets filter: saturate(0.4) to match calendar view style.
2026-04-21 22:18:14 +02:00
Konrad M. e729bc9c4e fix(layout): refactor page transition animations; expand sidebar at 1440px
Page-in animations drop 'forwards' fill mode — a .page-transition base class
(opacity:0) serves as the initial state, and .page-transition--in-{left,right}
force opacity:1 after the animation ends, preventing a flash-back-to-invisible
on some WebKit versions. Sidebar expands at 1440px instead of 1280px.
Glass desktop toolbar loses the rounded card border in favour of a flat
accent-top-border + bottom border consistent with other module headers.
2026-04-21 22:18:14 +02:00
Konrad M. 68645d2483 fix(layout): prevent horizontal overflow in modals, sheets, and input fields
Modal overlay gets overflow: hidden; sheet scroll container gets overflow-x: hidden
to stop content bleed on narrow viewports. Inputs get min-width: 0 and
box-sizing: border-box so they cannot overflow two-column grid containers.
2026-04-21 22:18:14 +02:00
Konrad M. 28e2ca6b01 fix(pwa): fix bottom nav safe-area padding causing extra gap on iOS
pwa.css safe-area padding-bottom rule and body::after fill-overlay commented out.
glass.css nav-bottom uses margin-bottom: 0 instead; --hidden state uses
translateY(100%) + negative margin so the bar disappears without leaving a gap.
layout.css removes redundant padding-bottom from .nav-bottom rule.
2026-04-21 22:18:14 +02:00
Konrad M. 25d2b42ba3 fix(router): auto-reload page 8 s after SW update toast is shown 2026-04-21 22:18:14 +02:00