Daniel Volz
e55e695c88
fix: align refill report quantity semantics
2026-05-10 18:51:51 +02:00
Daniel Volz
277fc3e686
fix(refill): stabilize stock and amount package semantics
2026-05-08 11:03:25 +02:00
dependabot[bot]
b838f0e8ea
build(deps): bump zod from 3.25.76 to 4.4.3 in /backend
...
* build(deps): bump zod from 3.25.76 to 4.4.3 in /backend
Bumps [zod](https://github.com/colinhacks/zod ) from 3.25.76 to 4.4.3.
- [Release notes](https://github.com/colinhacks/zod/releases )
- [Commits](https://github.com/colinhacks/zod/compare/v3.25.76...v4.4.3 )
---
updated-dependencies:
- dependency-name: zod
dependency-version: 4.4.3
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
* fix: adapt backend validation for zod v4
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Daniel Volz <mail@danielvolz.org >
2026-05-04 10:56:44 +02:00
Copilot
c7be73786b
Improve coverage for image upload and schedule helper logic with focused unit tests ( #551 )
...
Agent-Logs-Url: https://github.com/DanielVolz/medassist-ng/sessions/a5af7c91-2dd4-4a79-838e-dbb79fc08f6d
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
2026-04-21 09:12:36 +02:00
Daniel Volz
c291c88f2b
fix(notifications): fallback to generic medication names ( #532 )
...
* fix(notifications): fallback to generic medication names
* test(backend): add timezone column to in-memory user_settings schemas
2026-04-10 22:34:06 +02:00
Daniel Volz
e42e4f5639
fix(stock): ignore doses from other medications ( #533 )
...
* fix(stock): ignore doses from other medications
* test(backend): add timezone column to in-memory user_settings schemas
2026-04-10 22:33:58 +02:00
Daniel Volz
401228699f
Add searchable timezone settings override for reminder scheduling
2026-04-10 21:08:16 +02:00
Daniel Volz
002f16c505
fix(security): centralize SMTP transport creation
...
Centralize SMTP transport creation to reduce the duplicated CodeQL SMTP request-forgery path.
2026-04-08 20:00:57 +02:00
Daniel Volz
eec1653ff4
fix(security): ship isolated JWT decorator hotfix
...
* fix(security): isolate dependency hotfix from github main
* fix(security): expose hotfix jwt decorators across routes
* test(e2e): restore stable app header selectors
* test(e2e): align planner and app shell checks
* test(e2e): add legacy settings page selectors
* test(e2e): align settings page contracts
2026-04-05 14:49:50 +02:00
Daniel Volz
b58c4fe5bb
refactor: decompose backend services and routes for maintainability
2026-03-27 06:48:20 +01:00
Daniel Volz
8e2d7e74d2
feat: improve medication enrichment lookup
...
Squash merge PR #475
2026-03-25 07:03:08 +01:00
Daniel Volz
7059c25f1c
fix: align stock and refill semantics
...
Squash merge PR #474
2026-03-25 06:49:34 +01:00
Daniel Volz
b796e03bcb
feat: add medication enrichment lookup to the medication editor
...
* feat: add medication enrichment lookup
* fix: avoid double unescape in enrichment sanitization
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-03-20 20:39:38 +01:00
Daniel Volz
68ab79c713
feat: enable weekday-based medication scheduling
...
Closes #463
2026-03-20 14:58:25 +01:00
Daniel Volz
9e224c0441
fix: improve shared schedule stock overview display
2026-03-16 21:33:55 +01:00
Daniel Volz
5138d784cd
chore: improve intake reminder observability
2026-03-16 21:28:53 +01:00
Daniel Volz
14e783f111
fix: exclude obsolete medications from share flows
2026-03-16 21:21:41 +01:00
Daniel Volz
908e4e724f
fix: remove dead shareStockStatus gating from shared medication overview ( #436 )
...
The shareStockStatus UI toggle was replaced by shareMedicationOverview in
commit e0fb77d , but the backend gating logic was left intact. Users who
had previously set shareStockStatus=false were stuck with empty stock
values ('-') on the shared medication overview with no UI to change it.
- Remove showStockStatus parameter from buildSharedMedicationOverview()
- Remove visibility gating that nullified stock fields
- Remove shareStockStatus from settings API responses and PUT schema
- Remove shareStockStatus from frontend types, hooks, and context
- Clean up all related test fixtures and dead test cases
- DB column share_stock_status retained (never remove columns)
2026-03-15 19:27:39 +01:00
Daniel Volz
0160ef3ddf
fix: restore schedule interaction correctness
...
* fix: restore schedule interaction correctness
* fix: use scheduled stock timing for historical doses
2026-03-14 20:49:13 +01:00
Daniel Volz
e0fb77d494
feat: embed medication overview into shared links
...
Closes #424
2026-03-14 20:26:17 +01:00
Daniel Volz
3fda41e501
fix: restore automatic intake auto-marking ( #420 )
2026-03-12 21:32:51 +01:00
Daniel Volz
c13bfad16f
feat: improve OpenAPI request contracts and examples ( #418 )
...
* feat: improve OpenAPI request contracts and examples
* fix: align AJV docs plugin typing
* fix: preserve runtime behavior for OpenAPI schemas
* fix: align medication OpenAPI body schema with app payloads
2026-03-11 14:50:42 +01:00
Daniel Volz
5264c761cf
feat: standardize OpenAPI route docs metadata ( #412 )
2026-03-10 16:52:31 +01:00
Daniel Volz
c0507c4c4b
feat: backend API key auth context and settings hardening ( #406 )
...
* feat: add backend api-key auth context and settings hardening
* fix: harden api key token hashing
2026-03-10 06:26:20 +01:00
Daniel Volz
5b6c6abb69
feat: display actual reminder schedule from server config ( #386 )
...
- Expose REMINDER_HOUR and REMINDER_MINUTES_BEFORE env values via settings API
- Add reminderHour and reminderMinutesBefore to frontend Settings interface
- Replace hardcoded i18n strings with parameterized translations
- Settings page now shows configured schedule instead of static 6:00 / 15 min
2026-03-06 19:51:19 +01:00
Daniel Volz
30c97e2f0d
fix: use per-intake reminder setting as single source of truth ( #384 )
...
- Filter intakes by per-intake intakeRemindersEnabled instead of falling
back to medication-level setting (fixes #383 )
- Add SMTP delivery validation with accepted/rejected recipient checks
- Enhance email success logging with recipient, messageId, SMTP response
- Simplify MedDetailModal reminder icon logic to match backend behavior
- Sync lockfile versions to 1.18.2
2026-03-06 19:50:45 +01:00
Daniel Volz
4936929849
feat: replace hardcoded package assumptions with profile abstraction ( #379 )
2026-03-04 21:15:05 +01:00
Daniel Volz
508bc764d5
fix: align backend amount stock and reminder semantics ( #362 )
...
* fix: align backend amount stock and reminder semantics
* test: align settings email route success mock with SMTP delivery checks
2026-03-02 00:02:26 +01:00
Daniel Volz
9e8a6315e7
fix: keep topical stock non-depleting in planner flows ( #359 )
...
* fix: keep topical stock non-depleting in planner and reports
* test: stabilize e2e selectors for updated medication semantics
* fix(backend): add missing planner translation keys
2026-02-28 23:36:52 +01:00
Daniel Volz
7accb2aad6
feat: persist package amount metadata in backend ( #356 )
...
* feat: add package amount persistence and backend route support
* test: align backend test schemas with medication metadata fields
* fix(backend): restore intake usage normalizer for planner endpoint
* fix(backend): keep export typing compatible before liquid-unit stack step
2026-02-28 23:21:13 +01:00
Daniel Volz
b009d9e158
fix: frontend nginx restart loop from invalid log_format scope ( #350 )
...
* fix: place nginx log_format in valid context
* fix: unblock required checks for nginx hotfix
* fix: restore mandatory doku files in nginx hotfix pr
2026-02-27 01:47:59 +01:00
Daniel Volz
ba0ab672b9
docs: update memory and report for multi-pr delivery ( #347 )
2026-02-27 01:15:40 +01:00
Daniel Volz
57c998ba09
chore: update dependabot automation and agent governance ( #341 )
...
* chore: update dependabot automation and agent governance
* chore: trigger required CI checks for governance PR
2026-02-27 01:11:05 +01:00
Daniel Volz
6b27d234d9
chore: reduce polling log noise across backend and nginx ( #336 )
2026-02-27 00:54:21 +01:00
Daniel Volz
19ba4bb7d2
feat: add FORM_LOGIN_ENABLED auth toggle ( #334 )
2026-02-27 00:48:58 +01:00
Daniel Volz
06bf608913
fix: support core shoutrrr provider schemes ( #317 )
...
* fix: support core shoutrrr provider schemes
* fix(ci): resolve backend lint failures and harden shoutrrr URL handling
* fix(codeql): mark validated gotify target as intentional external call
* fix(codeql): route gotify scheme through validated webhook sink
2026-02-25 22:22:50 +01:00
Daniel Volz
dbdf3b61cb
fix: harden reminder scheduler dedupe and boundary timing ( #319 )
...
* fix: harden reminder scheduler dedupe and boundary timing
* fix(ci): align medications route formatting with biome
2026-02-25 22:15:35 +01:00
Copilot
2a9ca39c24
Allow medications with only a generic name (no commercial name required) ( #311 )
...
* Initial plan
* feat: allow generic name only for medications (frontend changes)
- Add getMedDisplayName() helper for consistent name display
- Update validation to require either commercial or generic name
- Update all display locations to use display name fallback
- Add i18n keys for nameOrGenericRequired in en.json and de.json
- Remove required attribute from commercial name field
- Update FIELD_LIMITS.name.min from 1 to 0
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
* feat: allow generic name only for medications (backend changes)
- Update Zod schema to allow empty name with cross-field refinement
- Update reminder scheduler to use name || genericName for display
- Update planner routes to match medications by display name
- Update existing tests to match new validation behavior
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
* fix: update placeholder text and fix FIELD_LIMITS test
- Remove "(optional)" from generic name placeholder in en/de
- Update types.test.ts to expect FIELD_LIMITS.name.min = 0
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
2026-02-25 21:29:25 +01:00
Daniel Volz
96b2a0c96f
feat: image upload optimization with sharp, thumbnails, and structured error codes ( #304 )
...
- Add sharp for server-side image processing (WebP conversion + thumbnails)
- New shared backend utility for image upload, optimization, and cleanup
- Return structured error codes from upload endpoints (IMAGE_TOO_LARGE, INVALID_TYPE, etc.)
- Frontend error code mapping with i18n support (EN + DE)
- MedicationAvatar tries thumbnail first, falls back to full image
- Error display in MedicationsPage, MobileEditModal, and Auth avatar upload
Closes #302
2026-02-24 23:52:59 +01:00
Daniel Volz
7a32b2045e
fix: run one stock reminder catch-up after restart ( #300 )
...
* fix: run one stock reminder catch-up after restart
* fix(backend): persist scheduler stock-check timestamp in reminder state
2026-02-24 21:21:34 +01:00
Daniel Volz
26475fd3d0
feat: add correlation ids and tighten frontend security headers ( #299 )
...
* feat: add correlation ids and tighten frontend security headers
* docs: remove obsolete project setup guide
* fix: restore health config flags for compatibility
* test(frontend): align auth fetch assertions with correlation headers
2026-02-24 21:21:30 +01:00
Daniel Volz
63cd9ef19b
fix: harden share link dose operations and token reuse ( #298 )
...
* fix: harden share link dose operations and token reuse
* fix: restore share dose compatibility and add correlation helper
2026-02-24 21:12:43 +01:00
Daniel Volz
d0e2ee0783
fix: trim whitespace from username on login and registration ( #277 )
...
Add .trim() to both loginSchema and registerSchema Zod validators so
leading/trailing spaces are stripped before validation and DB lookup.
Includes 5 new test cases covering trim behavior for both endpoints.
2026-02-22 17:51:41 +01:00
Daniel Volz
2296303236
fix: prevent duplicate scheduler reminder sends ( #270 )
2026-02-22 10:56:13 +01:00
Daniel Volz
088a6c1a05
chore: fix all Biome lint warnings and MedDetail intake bell icons ( #265 )
...
- Backend: refactor nested ternaries, remove unused imports/any types
- Frontend: fix exhaustive deps, a11y label associations, array index keys,
empty CSS blocks, unused vars, type annotations
- MedDetail modal: fix intake schedule bell icons not rendering (use unified
intake source with fallback), place bell inline after person name
- MedDetail modal: revert schedule rows from grid to flexbox layout
Closes #264
2026-02-22 08:52:03 +01:00
Daniel Volz
afb8e5028c
fix: auto-mark intakes at due time and show robot marker ( #261 )
...
* fix: auto-mark intakes at due time and show robot marker
* test: add taken_source to integration schema
* test: align e2e route schema with taken_source
2026-02-21 20:45:05 +01:00
Daniel Volz
612aa007aa
fix: unify stock semantics across planner and scheduler ( #245 )
...
* fix: unify stock semantics across planner and scheduler
* fix: stabilize dashboard hmr and align stock helper tests
2026-02-21 15:24:53 +01:00
Daniel Volz
052751b2ba
feat: reports, timeline toggles, and stock correction improvements ( #236 )
...
* refactor(frontend): modularize styles and polish modal/ui interactions
* feat: add report workflow and timeline/settings improvements
* fix: resolve CI failures for backend typing, lint, and playwright config
2026-02-20 18:52:59 +01:00
Daniel Volz
89d565bc9d
chore: fix lint errors and reduce warnings across codebase ( #234 )
...
* chore: fix lint errors and reduce warnings across codebase
- Fix noExplicitAny catches in backend routes and plugins
- Fix noNestedTernary issues in backend services
- Add keyboard event handlers for useKeyWithClickEvents in frontend
- Disable noImportantStyles rule in biome.json
- Fix formatting errors across all changed files
- Fix test file lint issues
Closes #233
* fix: restore any types in test files for TS compatibility
* fix: revert Auth.tsx dependency array changes that caused infinite re-render
* fix: null-safe user.username access in AppContext dependency array
2026-02-17 05:21:47 +01:00
Daniel Volz
08a18fc14a
fix: improve export filename and import confirmation UX ( #232 )
...
Export filename:
- Include username for multi-user/instance distinction
- Include timestamp with time (YYYYMMDD-HHMM) instead of date only
- Example: medassist-export-daniel-20260216-2108.json
Import confirmation:
- Show friendly 'Import Data?' dialog on empty instances instead of
scary 'Replace All Data?' warning with danger button
- Only show destructive warning when there is existing data to replace
- Use primary button style for empty-state import
Closes #231
2026-02-16 22:20:20 +01:00