Commit Graph

183 Commits

Author SHA1 Message Date
Ulas 5cb71bb424 fix: align Node.js version to >=22 across Dockerfile and package.json
Dockerfile used node:20-slim but the project requires Node >=22
(--experimental-sqlite in tests, CI matrix). package.json had a
duplicate engines block where the second (>=20.0.0) silently
overwrote the correct first one (>=22.0.0).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 14:16:49 +02:00
Ulas 59791df248 fix: enforce Secure flag on session and CSRF cookies by default
Cookies were sent without Secure flag outside of production (NODE_ENV check).
New logic: secure=true by default; set SESSION_SECURE=false in .env to
allow HTTP explicitly (local dev without reverse proxy). Affects session
cookie, CSRF cookie in login handler, and CSRF middleware.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 18:34:31 +02:00
Ulas 91c2e0ad98 fix: address CodeQL security findings (v0.5.2)
- Rate-limit SPA fallback route (missing rate limiting on fs access)
- Add csrfMiddleware to all state-changing auth routes (logout, create
  user, change password, delete user) — previously bypassed global CSRF
  middleware due to router registration order
- Fix incomplete vCard escaping: escape backslashes before other special
  characters to prevent injection via contact fields
- Restrict CI GITHUB_TOKEN to contents: read (least privilege)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 18:30:03 +02:00
Ulas b9b81a461e chore: release v0.5.1 — update CHANGELOG and package version
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 12:00:37 +02:00
Ulas f39152cf7e ci: add GitHub Actions workflow for automated tests
Runs npm test on push and pull requests to main.
Matrix covers Node.js 22.x and 24.x.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:42:56 +02:00
Ulas d8503bc54b chore: exclude docs/superpowers/ from version control
Internal Claude Code working documents (plans, specs) are not relevant
for contributors. Remove tracked files and add to .gitignore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:42:15 +02:00
Ulas b2fbd11287 fix: add social-preview.png, correct test count, add engines field
- Add social-preview.png to version control (referenced in README but untracked)
- Update README: test count 146+ → 162 across 9 suites
- Add engines.node >=22.0.0 to package.json (required for --experimental-sqlite)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:41:34 +02:00
Ulas 617e3cf007 fix: rename screenshots to bust GitHub CDN cache for updated images
Files that kept their original names after content replacement were served
from GitHub's CDN cache. Rename with -2 suffix to force fresh delivery.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:33:28 +02:00
Ulas 27bb95fc41 docs: replace screenshots with updated versions, add calendar/meal/settings/shopping
- Remove household screenshots (renamed to shopping)
- Add new calendar, meal, settings, shopping screenshots (mobile + tablet, light + dark)
- Update README screenshot section: 3x3 mobile grid covering all 9 modules, expanded tablet section

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:30:44 +02:00
Ulas ef51c43032 fix: meals drag & drop crash — destructure dragging before cleanup()
cleanup() set dragging = null, then onUp accessed dragging.slot,
.mealId, .sourceDate, .sourceType on the now-null reference.
Fix: destructure all needed values before calling cleanup().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 10:11:24 +02:00
Ulas be8801aef7 fix: proxy weather icons through server to fix PWA standalone on Android
External image requests to openweathermap.org fail silently in Chrome
Android PWA standalone mode. Icons are now proxied via
GET /api/v1/weather/icon/:code, making them same-origin — cacheable by
the service worker and free of CORS/CSP issues.

Tightened CSP: removed openweathermap.org from imgSrc (no longer needed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:57:48 +02:00
Ulas ac294628e8 fix: serve PWA icons with no-cache to prevent stale icon on Android
Icons were cached with immutable/30-day headers, so Chrome Android kept
serving the old placeholder even after new icons were deployed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:47:22 +02:00
Ulas 3544f4f36c docs: update CHANGELOG [Unreleased] with fixes from this session
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:44:26 +02:00
Ulas af69431eac fix: weather icons in PWA + locale picker dropdown
- SW: skip cross-origin asset requests (opaque responses caused weather
  icons to break in PWA standalone mode on Android)
- Replace oikos-locale-picker radio buttons with <select> dropdown
- Add settings.localeLabel i18n key (de + en)
- Bump SW cache to v22

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:42:06 +02:00
Ulas cd9f26911b fix: improve PWA manifest and SW cache for Android standalone mode
- Add id field and display_override to manifest.json for reliable
  Chrome Android PWA recognition
- Serve manifest.json with application/manifest+json MIME type
- Add /i18n.js and locale files to SW app shell cache (were missing)
- Bump SW cache version to v21

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:07:57 +02:00
Ulas dd940ab05d fix: replace placeholder icons with house logo for PWA install
Android was showing only a blue circle because maskable icons had no
visible content after the adaptive icon mask was applied. All icons now
use the actual Oikos house logo from docs/logo.svg. Maskable variants
use full-bleed background with logo within the 80% safe zone.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:02:55 +02:00
Ulas 752d0f919f fix: resolve nested i18n keys via dot notation in t()
The locale JSON files use nested structure (e.g. {"nav":{"tasks":"…"}}),
but t() did a flat lookup, always falling back to the raw key string.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 23:47:59 +02:00
Ulas d543837025 docs: add social-preview banner, i18n badge, and multilingual feature note to README 2026-03-31 23:41:07 +02:00
Ulas c66018ff49 chore: release v0.5.0 — update CHANGELOG, SPEC, and package version 2026-03-31 23:38:38 +02:00
Ulas 5daf536dc8 feat: internationalization (i18n) — de + en, oikos-locale-picker, Intl date formatting 2026-03-31 23:36:40 +02:00
Ulas ce38f7041b fix: add browser path loader for Node.js tests, update test:modal-utils script 2026-03-31 23:34:43 +02:00
Ulas 431d6af356 feat: add oikos-locale-picker component and language settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 23:29:13 +02:00
Ulas 26a8434369 fix: replace hardcoded Uhr suffix and use getLocale() in budget 2026-03-31 23:27:44 +02:00
Ulas 66a9bdfa44 feat: replace manual date formatting with formatDate/formatTime from i18n
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 23:24:21 +02:00
Ulas 3aefca0a44 feat: i18n navigation labels
Replace all hardcoded German strings in router.js (navItems labels,
aria-labels, skip-link, error/toast messages) with t() calls. Add a
locale-changed event listener that re-renders sidebar and bottom-nav
items on language switch.
2026-03-31 23:19:05 +02:00
Ulas fe70cbf979 feat: i18n web components with locale-changed listener
Replace hardcoded German strings in modal.js and oikos-install-prompt.js
with t() calls; wire locale-changed event listener for live re-render on
locale switch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 23:15:51 +02:00
Ulas a21fe6afdd fix: replace hardcoded Fehler fallbacks with t(common.unknownError)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 23:13:41 +02:00
Ulas 29e334c114 fix: i18n contact categories and budget month names 2026-03-31 23:07:09 +02:00
Ulas 26bbd61e1d feat: i18n notes, contacts, budget, settings pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:57:45 +02:00
Ulas e6c6b0a4fc feat: add missing calendar keys to locales
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:52:51 +02:00
Ulas 2f89e623b2 feat: i18n shopping, meals, calendar pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:50:16 +02:00
ulsklyc 20fb84a809 Add files via upload 2026-03-31 22:47:41 +02:00
Ulas 752f6ee24d feat: add missing tasks keys to locales 2026-03-31 22:33:54 +02:00
Ulas f6a4879dd0 feat: i18n login, dashboard, tasks pages 2026-03-31 22:31:57 +02:00
Ulas af8f9ccb56 feat: initialize i18n before first route render 2026-03-31 21:53:14 +02:00
Ulas ad921e1637 feat: add de.json and en.json locale files
Extracts all German UI strings from public/pages/, public/components/,
and public/router.js into 482 i18n keys organized by module prefix.
English translations added for all keys.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 21:51:18 +02:00
Ulas 9bf8f2abbb fix: improve i18n robustness (null guards, race condition, error resilience) 2026-03-31 21:43:55 +02:00
Ulas 3bec77db3b feat: add i18n module (public/i18n.js) 2026-03-31 21:41:20 +02:00
Ulas 1087bc4c10 docs: link Discussions in CONTRIBUTING and update welcome post
Add Discussions links for questions at top and bottom of CONTRIBUTING.md.
Update security reporting to reference GitHub Private Vulnerability Reporting.
Customize Discussions #2 welcome post with project-specific content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:57:13 +02:00
Ulas 3df20fc78b chore: remove unused files and duplicate assets
Delete orphaned Python screenshot generators, social-preview template,
and duplicate icon files in public/assets/ (superseded by public/icons/).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:46:56 +02:00
Ulas 443c8635a5 docs: add project logo and embed in README
Geometric house icon on blue gradient rounded square (SVG).
Replaces shields.io badge placeholder in README hero section.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:41:45 +02:00
Ulas be8af0f154 docs: overhaul README for professional project presentation
Restructure README with compelling hero section, "Why Oikos?" philosophy
section, two-column feature grid, tablet screenshot gallery, and streamlined
quick start. Add GitHub Private Vulnerability Reporting link to SECURITY.md.
Include social preview HTML template for GitHub social card generation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:34:23 +02:00
Ulas 9e8338c9b9 chore: release v0.4.0 — update CHANGELOG and SPEC 2026-03-31 15:19:02 +02:00
Ulas ee47d1d370 docs: update changelog for meals/settings CSS fixes 2026-03-31 15:15:25 +02:00
Ulas fe41f84a62 fix: add missing toolbar stripe to meals and --module-accent to settings 2026-03-31 15:14:21 +02:00
Ulas 3085ad7bbc docs: update changelog for dark-mode module token fix 2026-03-31 15:12:45 +02:00
Ulas c6551166a9 fix: add missing dark-mode overrides for shopping, notes, contacts, budget, settings module tokens
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:10:42 +02:00
Ulas 52a2455e43 docs: update changelog for module accent colour feature 2026-03-31 15:05:50 +02:00
Ulas 6f22ef8268 feat: list items get module accent border-left stripe
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:00:41 +02:00
Ulas 4ac9cd16d1 fix: add missing --module-accent declaration to calendar-page 2026-03-31 14:58:16 +02:00