Daniel Volz
e346d60f39
chore: release v1.14.1 ( #262 )
2026-02-21 20:51:28 +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
9ab077a037
chore: release v1.14.0 ( #259 )
2026-02-21 18:04:20 +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
02af93ec55
chore: release v1.13.0 ( #243 )
2026-02-20 19:55:26 +01:00
dependabot[bot]
8f57aa8bc9
build(deps): bump ajv from 8.17.1 to 8.18.0 in /backend ( #238 )
...
Bumps [ajv](https://github.com/ajv-validator/ajv ) from 8.17.1 to 8.18.0.
- [Release notes](https://github.com/ajv-validator/ajv/releases )
- [Commits](https://github.com/ajv-validator/ajv/compare/v8.17.1...v8.18.0 )
---
updated-dependencies:
- dependency-name: ajv
dependency-version: 8.18.0
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 19:51:41 +01:00
dependabot[bot]
f42ed87d94
build(deps): bump minimatch from 10.2.0 to 10.2.2 in /backend ( #237 )
...
Bumps [minimatch](https://github.com/isaacs/minimatch ) from 10.2.0 to 10.2.2.
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md )
- [Commits](https://github.com/isaacs/minimatch/compare/v10.2.0...v10.2.2 )
---
updated-dependencies:
- dependency-name: minimatch
dependency-version: 10.2.2
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 19:51:37 +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
Daniel Volz
871e6066ec
fix: export/import missing refill history, prescription, and bottle fields ( #227 )
...
- Add refill history export/import with medication reference mapping
- Include totalPills (bottle type capacity) in inventory export
- Include dismissedUntil field for past dose dismissal state
- Add expiryWarningDays and shareStockStatus to settings export
- Bump export version to 1.1
- Add refill count to import result reporting
- Update i18n import success details to include refill count
Closes #224
2026-02-16 21:51:39 +01:00
dependabot[bot]
ff100dfea5
build(deps-dev): bump @types/nodemailer in /backend ( #223 )
...
Bumps [@types/nodemailer](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/nodemailer ) from 6.4.21 to 7.0.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/nodemailer )
---
updated-dependencies:
- dependency-name: "@types/nodemailer"
dependency-version: 7.0.10
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 19:06:28 +01:00
dependabot[bot]
47581ca7ad
build(deps-dev): bump @biomejs/biome ( #222 )
...
Bumps the minor-and-patch group in /backend with 1 update: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome ).
Updates `@biomejs/biome` from 2.3.15 to 2.4.1
- [Release notes](https://github.com/biomejs/biome/releases )
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md )
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.4.1/packages/@biomejs/biome )
---
updated-dependencies:
- dependency-name: "@biomejs/biome"
dependency-version: 2.4.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-and-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 19:06:18 +01:00
Daniel Volz
36a2f7d537
chore: release v1.12.0 ( #216 )
2026-02-15 23:28:35 +01:00
Daniel Volz
4b697374f6
feat: obsolete medication archiving, start date, and UI improvements ( #215 )
...
* feat: obsolete medication archiving, start date, and UI improvements
- Add soft-archive (obsolete) for medications with dedicated section and toggle
- Add medication start date field with date picker and validation
- Add obsolete/reactivate API endpoints with proper auth
- Filter obsolete meds from schedule, coverage, planner, and notifications
- Improve UserFilterModal with intake schedules, stock badges, and click-to-open
- Improve dashboard taken-by badges with per-intake bell icons
- Add Escape key support to ConfirmModal and MobileEditModal
- Fix Lightbox close button positioning near image
- Add read-only mode support for MobileEditModal
- DB migrations: 0008 (is_obsolete, obsolete_at), 0009 (medication_start_date)
- All user-facing text uses i18n keys (en + de)
* test: fix tests for obsolete medications and UI changes
- Backend: add is_obsolete, obsolete_at, medication_start_date columns to test schemas
- Backend: add test medication inserts in planner tests for active-med filtering
- Frontend: update useMedications URL to include includeObsolete param
- Frontend: fix MobileEditModal selectors and validation assertions
- Frontend: add onClearUser prop to UserFilterModal test renders
- Frontend: fix MedicationsPage and DashboardPage test assertions
2026-02-15 23:23:38 +01:00
Daniel Volz
d8d8c4a07e
chore: release v1.11.1 ( #213 )
2026-02-14 21:07:14 +01:00
Daniel Volz
1e043c8bf3
chore: release v1.11.0 ( #210 )
2026-02-14 20:33:54 +01:00
Daniel Volz
cbc71822b0
fix: highlight empty medications in planner email with red background ( #208 )
...
- Add light red background (#fef2f2) to table rows where medication is out of stock
- Consistent with stock reminder email styling
Closes #204
2026-02-14 20:24:28 +01:00
Daniel Volz
150be1e114
feat: add prescription refills column to planner table and email ( #207 )
...
- Add 6th column 'Prescription refills' to frontend Planner table
- Add matching column to backend planner email (HTML + plaintext)
- Show remaining refills for meds with prescription tracking, '–' otherwise
- Add backend translations for new column header (EN + DE)
- Add frontend i18n keys for prescription refills column
- Update planner tests with medications table schema
Closes #203
2026-02-14 20:21:09 +01:00
Daniel Volz
8273b07231
feat: track number of prescription repeats ( #193 )
...
* feat: track prescription repeats and refill reminders
* test: align backend and frontend suites with current prescription and UI behavior
* test: update frontend and backend expectations for latest reminders and refill flow
2026-02-14 19:07:36 +01:00
Daniel Volz
684abd7fb6
fix: handle usernames case-insensitively in auth and oidc ( #197 )
2026-02-14 18:43:30 +01:00
dependabot[bot]
874babe1d8
build(deps-dev): bump @types/node from 22.19.3 to 25.2.3 in /backend ( #191 )
...
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) from 22.19.3 to 25.2.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
---
updated-dependencies:
- dependency-name: "@types/node"
dependency-version: 25.2.3
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 20:20:40 +01:00
dependabot[bot]
c9039b6e87
build(deps): bump dotenv from 16.6.1 to 17.3.1 in /backend ( #190 )
...
Bumps [dotenv](https://github.com/motdotla/dotenv ) from 16.6.1 to 17.3.1.
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md )
- [Commits](https://github.com/motdotla/dotenv/compare/v16.6.1...v17.3.1 )
---
updated-dependencies:
- dependency-name: dotenv
dependency-version: 17.3.1
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 20:20:37 +01:00
dependabot[bot]
5918eb5aae
build(deps): bump nodemailer from 7.0.11 to 8.0.1 in /backend ( #189 )
...
Bumps [nodemailer](https://github.com/nodemailer/nodemailer ) from 7.0.11 to 8.0.1.
- [Release notes](https://github.com/nodemailer/nodemailer/releases )
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md )
- [Commits](https://github.com/nodemailer/nodemailer/compare/v7.0.11...v8.0.1 )
---
updated-dependencies:
- dependency-name: nodemailer
dependency-version: 8.0.1
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 20:20:33 +01:00
dependabot[bot]
19d3f83aef
build(deps): bump @fastify/static from 8.3.0 to 9.0.0 in /backend ( #187 )
...
Bumps [@fastify/static](https://github.com/fastify/fastify-static ) from 8.3.0 to 9.0.0.
- [Release notes](https://github.com/fastify/fastify-static/releases )
- [Commits](https://github.com/fastify/fastify-static/compare/v8.3.0...v9.0.0 )
---
updated-dependencies:
- dependency-name: "@fastify/static"
dependency-version: 9.0.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 20:20:30 +01:00
dependabot[bot]
6922a856c0
build(deps): bump @fastify/cors from 10.1.0 to 11.2.0 in /backend ( #186 )
...
Bumps [@fastify/cors](https://github.com/fastify/fastify-cors ) from 10.1.0 to 11.2.0.
- [Release notes](https://github.com/fastify/fastify-cors/releases )
- [Commits](https://github.com/fastify/fastify-cors/compare/v10.1.0...v11.2.0 )
---
updated-dependencies:
- dependency-name: "@fastify/cors"
dependency-version: 11.2.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 20:20:26 +01:00
dependabot[bot]
45a319dc06
build(deps): bump @fastify/cookie from 10.0.1 to 11.0.2 in /backend ( #184 )
...
Bumps [@fastify/cookie](https://github.com/fastify/fastify-cookie ) from 10.0.1 to 11.0.2.
- [Release notes](https://github.com/fastify/fastify-cookie/releases )
- [Commits](https://github.com/fastify/fastify-cookie/compare/v10.0.1...v11.0.2 )
---
updated-dependencies:
- dependency-name: "@fastify/cookie"
dependency-version: 11.0.2
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 20:11:18 +01:00
dependabot[bot]
6c10f9af0c
build(deps): bump the minor-and-patch group in /backend with 10 updates ( #182 )
...
Bumps the minor-and-patch group in /backend with 10 updates:
| Package | From | To |
| --- | --- | --- |
| [@fastify/multipart](https://github.com/fastify/fastify-multipart ) | `9.3.0` | `9.4.0` |
| [@libsql/client](https://github.com/tursodatabase/libsql-client-ts/tree/HEAD/packages/libsql-client ) | `0.10.0` | `0.17.0` |
| [argon2](https://github.com/ranisalt/node-argon2 ) | `0.40.3` | `0.44.0` |
| [fastify](https://github.com/fastify/fastify ) | `5.7.3` | `5.7.4` |
| [openid-client](https://github.com/panva/openid-client ) | `6.8.1` | `6.8.2` |
| [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome ) | `2.3.12` | `2.3.15` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8 ) | `4.0.16` | `4.0.18` |
| [drizzle-kit](https://github.com/drizzle-team/drizzle-orm ) | `0.31.8` | `0.31.9` |
| [supertest](https://github.com/ladjs/supertest ) | `7.1.4` | `7.2.2` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ) | `4.0.16` | `4.0.18` |
Updates `@fastify/multipart` from 9.3.0 to 9.4.0
- [Release notes](https://github.com/fastify/fastify-multipart/releases )
- [Commits](https://github.com/fastify/fastify-multipart/compare/v9.3.0...v9.4.0 )
Updates `@libsql/client` from 0.10.0 to 0.17.0
- [Release notes](https://github.com/tursodatabase/libsql-client-ts/releases )
- [Changelog](https://github.com/tursodatabase/libsql-client-ts/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tursodatabase/libsql-client-ts/commits/v0.17.0/packages/libsql-client )
Updates `argon2` from 0.40.3 to 0.44.0
- [Release notes](https://github.com/ranisalt/node-argon2/releases )
- [Commits](https://github.com/ranisalt/node-argon2/commits/v0.44.0 )
Updates `fastify` from 5.7.3 to 5.7.4
- [Release notes](https://github.com/fastify/fastify/releases )
- [Commits](https://github.com/fastify/fastify/compare/v5.7.3...v5.7.4 )
Updates `openid-client` from 6.8.1 to 6.8.2
- [Release notes](https://github.com/panva/openid-client/releases )
- [Changelog](https://github.com/panva/openid-client/blob/main/CHANGELOG.md )
- [Commits](https://github.com/panva/openid-client/compare/v6.8.1...v6.8.2 )
Updates `@biomejs/biome` from 2.3.12 to 2.3.15
- [Release notes](https://github.com/biomejs/biome/releases )
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md )
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.3.15/packages/@biomejs/biome )
Updates `@vitest/coverage-v8` from 4.0.16 to 4.0.18
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.18/packages/coverage-v8 )
Updates `drizzle-kit` from 0.31.8 to 0.31.9
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases )
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/drizzle-kit@0.31.8...drizzle-kit@0.31.9 )
Updates `supertest` from 7.1.4 to 7.2.2
- [Release notes](https://github.com/ladjs/supertest/releases )
- [Commits](https://github.com/ladjs/supertest/compare/v7.1.4...v7.2.2 )
Updates `vitest` from 4.0.16 to 4.0.18
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.18/packages/vitest )
---
updated-dependencies:
- dependency-name: "@fastify/multipart"
dependency-version: 9.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: "@libsql/client"
dependency-version: 0.17.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: argon2
dependency-version: 0.44.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: fastify
dependency-version: 5.7.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: openid-client
dependency-version: 6.8.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: "@biomejs/biome"
dependency-version: 2.3.15
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: "@vitest/coverage-v8"
dependency-version: 4.0.18
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: drizzle-kit
dependency-version: 0.31.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: supertest
dependency-version: 7.2.2
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: vitest
dependency-version: 4.0.18
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-and-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 20:10:51 +01:00
Daniel Volz
77b0f3a0f9
chore: improve dev tooling (CI tests, dependabot, coverage) ( #169 )
...
- Add frontend unit tests with coverage to CI test workflow
- Add dependabot.yml for automated dependency updates (npm + GitHub Actions)
- Add backend coverage thresholds (60/65/50/60) to vitest.config.ts
- Exclude services/ and logger from coverage (untestable schedulers)
2026-02-13 19:52:33 +01:00
Daniel Volz
7122121c12
chore: release v1.10.3 ( #167 )
2026-02-13 19:02:38 +01:00
Copilot
0b0472f2f5
Fix OIDC token exchange behind HTTPS reverse proxy ( #162 )
...
* Initial plan
* Fix OIDC callback URL construction for HTTPS reverse proxy
- Replace hardcoded http:// URL with OIDC_REDIRECT_URI from environment
- Build complete callback URL with query parameters for proper validation
- Fixes token exchange 401 errors when running behind HTTPS reverse proxy
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
* Update OIDC_REDIRECT_URI documentation to clarify full URL requirement
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
* fix: format oidc.ts to pass biome check
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com >
Co-authored-by: Daniel Volz <mail@danielvolz.org >
2026-02-13 18:29:33 +01:00
dependabot[bot]
38f3533dd9
build(deps-dev): bump qs from 6.14.1 to 6.14.2 in /backend ( #158 )
...
Bumps [qs](https://github.com/ljharb/qs ) from 6.14.1 to 6.14.2.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md )
- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2 )
---
updated-dependencies:
- dependency-name: qs
dependency-version: 6.14.2
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 21:43:41 +01:00
dependabot[bot]
463c756447
build(deps): bump fast-xml-parser and @aws-sdk/client-ses in /backend ( #157 )
...
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser ) and [@aws-sdk/client-ses](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-ses ). These dependencies needed to be updated together.
Updates `fast-xml-parser` from 5.2.5 to 5.3.4
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases )
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md )
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.2.5...v5.3.4 )
Updates `@aws-sdk/client-ses` from 3.956.0 to 3.988.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases )
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-ses/CHANGELOG.md )
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.988.0/clients/client-ses )
---
updated-dependencies:
- dependency-name: fast-xml-parser
dependency-version: 5.3.4
dependency-type: indirect
- dependency-name: "@aws-sdk/client-ses"
dependency-version: 3.988.0
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 21:43:35 +01:00
Daniel Volz
4275dca838
fix: improve modal scroll lock and e2e script workflow ( #156 )
2026-02-12 21:43:28 +01:00
Daniel Volz
98939877db
feat: expand Playwright E2E coverage ( #155 )
...
* feat: comprehensive Playwright E2E test rewrite
Rewrite all E2E tests with correct CSS selectors, add new spec files,
and implement robust auth handling to work within backend rate limits.
Changes:
- Rewrite fixtures/index.ts with JWT-based /auth/me mock to avoid
10 req/min rate limit on /auth/me during test runs
- Rewrite auth.setup.ts with offline JWT validity check to reuse
existing auth state across runs (saves login rate-limit budget)
- Rewrite auth.spec.ts (6 tests) - login page, fields, submit,
redirect guard, invalid credentials, login/register toggle
- Rewrite dashboard.spec.ts (8 tests) - header, nav tabs,
navigation, overview/schedules sections, days selector, redirect
- Rewrite medications.spec.ts (8 tests) - form fields, stock
inventory, package type toggle, intake schedule, save/cancel,
unsaved changes guard
- Rewrite settings.spec.ts (12 tests) - language, notification
matrix, thresholds, calculation mode, toggle switch, export/import,
user menu navigation
- Create planner.spec.ts (9 tests) - form, date inputs, calculate,
reset, checkbox, submit, tab state, eyebrow heading
- Create schedule.spec.ts (12 tests) - timeline, days selector,
past/future toggles, day blocks, today highlight, collapse/expand,
overview table, share button
- Update playwright.config.ts: remove mobile projects, enable
webServer section for CI
- Add .github/workflows/e2e.yml CI workflow for Playwright tests
Total: 57 E2E tests across 6 spec files, all passing consistently
across 5+ consecutive runs without backend restart.
Closes #154
* feat: add comprehensive E2E data tests with medication CRUD, dashboard, planner, schedule
Add 48 new Playwright E2E tests covering real medication data scenarios:
- medication-crud: 14 tests for create/edit/delete/list via UI form
- dashboard-data: 13 tests for overview table, timeline, dose tracking
- planner-data: 9 tests for demand calculator with results/status chips
- schedule-data: 11 tests for timeline, collapse/expand, dose mark/undo
Infrastructure improvements:
- Add API helpers (createMedicationViaAPI, deleteMedicationViaAPI,
deleteAllMedicationsViaAPI) with retry logic for rate-limit resilience
- Configure chromium-data project for serial execution with retry:1
- Add /auth/me mock to avoid rate-limit exhaustion on auth endpoint
- Increase navigateTo reliability with networkidle waits
- Increase auth token validity threshold from 2 to 10 minutes
- Make backend rate limit configurable via RATE_LIMIT_MAX env var
- Set RATE_LIMIT_MAX=300 in dev docker-compose for E2E test support
Total suite: 57 empty-state + 48 data tests = 105 tests (chromium)
* test: add E2E tests for medication editing, stock status, and share schedule
- medication-edit.spec.ts: 10 tests covering generic name, notes,
taken-by add/remove, expiry date, refill, intake schedule editing,
adding intake rows, reminder toggle, and package type changes
- stock-status.spec.ts: 12 tests verifying dashboard shows correct
status chips (High/Normal/Warning/Danger) for different stock levels,
overview table, reorder card, detail modal, and planner integration
- share-schedule.spec.ts: 10 tests for taken-by badges, share button,
share dialog, link generation, shared schedule page navigation,
dose tracking on shared page, and notes display
- fixtures/index.ts: add createShareTokenViaAPI, updateSettingsViaAPI
helpers; expand createMedicationViaAPI with takenBy, notes, expiryDate
- playwright.config.ts: update testMatch/testIgnore for new test files
- docker-compose.dev.yml: increase RATE_LIMIT_MAX to 1000 for E2E tests
* docs: refine release-manager instructions for CLI safety and commit-linked release notes
* fix: resolve PR155 CI failures for frontend lint and e2e proxy
* fix: stabilize auth-related e2e checks in CI
2026-02-12 20:06:11 +01:00
Daniel Volz
30271915d3
chore: release v1.10.2 ( #153 )
2026-02-10 16:44:21 +01:00
Daniel Volz
ffbe957f41
chore: release v1.10.1 ( #150 )
2026-02-09 21:01:42 +01:00
Daniel Volz
5093f96e8a
fix: intake reminder catch-up for missed advance notification window ( #148 )
...
When the scheduler missed the exact notification minute (due to system sleep,
high load, or GC pauses), the advance reminder was permanently lost. A dead zone
existed between the notify time and the intake time where neither advance nor
missed-intake logic would trigger.
Changes:
- getUpcomingIntakes now catches up intakes where the notify window passed but
the intake time is still in the future
- Seeding logic sends a catch-up notification for recently missed intakes
(within grace period) instead of silently seeding state
- Added 4 tests covering catch-up scenarios
2026-02-09 20:58:08 +01:00
Daniel Volz
9d289d45c9
chore: release v1.10.0 ( #147 )
2026-02-09 19:36:04 +01:00
Daniel Volz
f56f2b7c88
feat: backend improvements - reminder tracking, share stock status, planner notifications ( #145 )
...
- Separate stock/intake reminder tracking in DB with dedicated columns
- Add shareStockStatus setting to control stock visibility on shared links
- Rewrite planner notification to support both email and Shoutrrr push
- Add push notification footer text for intake and stock reminders
- New DB migrations: stock_reminder_tracking (0006), share_stock_status (0007)
- Update backend i18n with demandCalculator section and critically low text
- Add 514 passing backend tests including new coverage for all changes
2026-02-09 19:32:32 +01:00
Daniel Volz
fb937e795b
fix: planner usage calculation uses user-selected start date ( #144 )
...
The Demand Calculator used max(now, start) as the effective planner start,
which caused asymmetric counting when the current time fell between morning
and evening doses. For example, at 15:00 a medication with 07:00+20:00
intakes over 3 days showed 5 pills (2+3) instead of 6 (3+3) because the
morning dose on the start day was skipped while the evening was counted.
Changes:
- Use the user-selected start date directly instead of max(now, start)
- Optimize calculateUsageInRange to skip ahead to the relevant range
instead of iterating from the original blister start date
- Add regression tests for asymmetric counting and blister-before-range
2026-02-09 08:10:13 +01:00
Daniel Volz
b07b586eef
chore: replace console.log with structured logging ( #141 )
...
- Add startup logger (utils/logger.ts) with LOG_LEVEL support
- Add ServiceLogger type for scheduler functions
- Replace all console.log calls with leveled log methods
- Downgrade verbose scheduler info logs to debug level
- Remove unnecessary console.log in auth plugin
2026-02-08 22:09:27 +01:00
Daniel Volz
291a90d401
chore: release v1.9.0 ( #139 )
2026-02-08 20:34:29 +01:00
Daniel Volz
8c5deed4c2
feat: theme dropdown with system preference and comprehensive bottle-type fixes ( #138 )
...
- Replace dark/light toggle with Light/Dark/System dropdown menu
- System theme follows OS prefers-color-scheme setting
- Apply theme dropdown to shared schedule page
- Fix 7 packageType (bottle) bugs across stock calc, share, refills, export/import
- Fix planner bottle-type stock calculation and display
- Fix dailyRate double-counting with per-intake takenBy
- Fix About modal update check stale caching
- Fix intake reminder past-intake seeding and push title
- Fix phantom DB path in drizzle.config.ts
- Fix mobile dose field visibility
- Make medication name clickable in dashboard reminder bar
- Improve planner checkbox UX with inline tooltip
- Add 20+ new tests covering all fixes
2026-02-08 20:32:40 +01:00
Daniel Volz
27a9910dbd
chore: release v1.8.8 ( #137 )
2026-02-08 17:29:37 +01:00
Daniel Volz
f7838bd919
chore: release v1.8.7 ( #134 )
2026-02-08 15:14:14 +01:00
Daniel Volz
e55e415a50
chore: release v1.8.6 ( #129 )
2026-02-08 14:06:03 +01:00
Daniel Volz
571ab00918
chore: release v1.8.5 ( #126 )
2026-02-08 13:35:52 +01:00
Daniel Volz
5cd519be50
chore: release v1.8.4 ( #124 )
2026-02-08 13:12:58 +01:00
Daniel Volz
e0c5eb4bf3
feat: simplify About modal with single version link to GitHub release ( #123 )
...
- Replace separate Frontend/Backend versions with single app version
- Version is now a clickable link to the GitHub release page
- Replace stopwatch SVG with actual app logo (favicon.svg)
- Fix update check UX: previous result stays visible during re-check
- Add 1s minimum delay for update check spinner visibility
- Reserve space for update result to prevent modal jumping
- Remove unused i18n keys (frontend/backend)
- Update release-manager docs with version link info
2026-02-08 13:09:33 +01:00