Commit graph

46 commits

Author SHA1 Message Date
262be954bb chore: remove implementation plans for shipped features
The bild-import and bonus-varianten plans were step-by-step build guides
consumed during implementation. Both features are merged and live.
Design specs in docs/specs/ stay for reference.
2026-05-12 19:36:22 +02:00
a92bf00d38 docs: replace Railway deployment section with Hetzner setup
Live URL, server details, container/network setup, Caddy block, and
update procedure for the self-hosted deployment.
2026-05-12 19:16:05 +02:00
9a26d8b9ef Merge feature/bonus-varianten: 3 variants + vacation + date-stepper
Conflicts resolved:
- sw.js: bumped CACHE_NAME to dienstplan-pro-v4 (was v3 + v2). Both
  variants.js and image-import.js are in ASSETS.
- storage.js: kept STORAGE_KEY_DUTIES + STORAGE_KEY_VACATION (Feature B)
  alongside STORAGE_KEY_OPENROUTER_KEY/MODEL + DEFAULT_MODEL (Feature A).
- styles.css: appended Feature B variants/vacation/date-stepper rules
  after Feature A modal/key rules; both blocks coexist.
2026-05-12 18:45:31 +02:00
408c30b4e3 Merge feature/bild-import: Bild->Dienste import via OpenRouter Vision 2026-05-12 18:42:48 +02:00
f69a36f2f0 fix(app): expose app instance on window so image-import.js init finds it
`let app` at top level does not create a window property, so the
DOMContentLoaded handler in image-import.js found window.app undefined
and never instantiated window.imageImporter. Clicking the Bild-Import
button then showed the 'Bild-Import nicht verfuegbar' toast.

Set window.app explicitly after construction.
2026-05-12 18:41:07 +02:00
c733c3ed02 fix(calculator): prefer eligible variant over ineligible at bonus-tie
Winner-picker used strict > with lowest-variantId tie-break, which made
V1 (ineligible) win over V3 (eligible) when all variants produced bonus=0
on Sa+So-only duties. Now ties prefer the eligible variant, keeping the
lowest-variantId rule as a sub-tie-breaker.
2026-05-12 18:36:24 +02:00
49b3b53878 chore(pwa): bump cache to v2, include variants.js, evict old caches 2026-05-12 18:27:24 +02:00
016ce93979 feat: add date-stepper buttons (Feature C) clamped to selected month 2026-05-12 18:27:06 +02:00
ba219ce0eb docs: settings info-box explains V1/V2/V3, auto-select, vacation mode 2026-05-12 18:25:39 +02:00
2e05067ce0 chore(pwa): bump cache to v3, precache image-import.js, evict old caches on activate 2026-05-12 18:25:16 +02:00
1407696adb refactor: CSV/HTML/email exports read winner.* from new variants shape 2026-05-12 18:25:07 +02:00
7839fd67d7 test(image-import): pin error-toast strings for HTTP/parse/network errors 2026-05-12 18:24:45 +02:00
e3a8ae2d7b feat(settings): add Bild-Import (KI) section with key management and model picker 2026-05-12 18:24:21 +02:00
3b6283ced1 feat(image-import): add resolveImports (pure) and commitImport persisting duties via DataStorage 2026-05-12 18:23:27 +02:00
15bf520bc1 feat: result card shows winner banner, all-variants details, vacation toggle 2026-05-12 18:23:11 +02:00
801757b92c feat(image-import): add renderPreview + Stage 3 grouping, unknowns, slot badges, remove-row 2026-05-12 18:22:37 +02:00
c43675478b feat(image-import): add runRecognition pipeline (compress, call, parse, dedupe, match) + Stage 2 cancel 2026-05-12 18:22:07 +02:00
34e9e67f6d feat: pass vacationMap from storage to calculateAllEmployees 2026-05-12 18:22:06 +02:00
6c536995b6 feat(image-import): add modal markup, CSS, and Stage 1 file/drop/camera wiring 2026-05-12 18:21:46 +02:00
68f35d3e3d feat: add dienstplan_vacation key + getVacationMode/setVacationMode + export/import 2026-05-12 18:21:31 +02:00
b8dd1ad150 feat(image-import): add openImportDialog entry point with API-key prompt and stage helpers 2026-05-12 18:20:42 +02:00
7154edde86 feat(image-import): wire open-image-import-btn + card-header layout 2026-05-12 18:20:11 +02:00
b921592f7e test: migrate Berechnung + Edge-Case tests to new variants result shape 2026-05-12 00:17:04 +02:00
20f63e07cd feat(image-import): add normalizeName, matchNames (exact+fuzzy), classify slot helper 2026-05-12 00:16:27 +02:00
773c286236 feat(image-import): add inline levenshtein distance helper 2026-05-12 00:15:39 +02:00
bc1d92937c refactor: BonusCalculator runs all 3 variants and picks winner 2026-05-12 00:15:38 +02:00
93e6b32fe9 feat(image-import): add parseResponse with fence-stripping and schema validation 2026-05-12 00:15:15 +02:00
f7153a5e53 feat: implement variant2 (1 sa + 2 weekday) 2026-05-12 00:14:50 +02:00
60e71d4a57 feat(image-import): add callVisionAPI with OpenRouter fetch + typed HTTP errors 2026-05-12 00:14:38 +02:00
591a2773cc feat: implement variant1 (1 fr+so + 3 weekday, fr-priority) 2026-05-12 00:14:21 +02:00
d8a3e9de86 feat(image-import): add compressImage with canvas resize + JPEG re-encode 2026-05-12 00:13:57 +02:00
a675763206 feat: implement variant3 (loose, pool fr+sa+so, fr-priority) 2026-05-12 00:13:51 +02:00
f7e8ccb5b6 feat(storage): add getApiKey/setApiKey/clearApiKey/getApiModel/setApiModel for OpenRouter integration 2026-05-12 00:13:20 +02:00
c460a20c00 feat: implement classifyDuties() aggregation by slot 2026-05-12 00:13:16 +02:00
bfc20b8c4f feat: implement classify(date, holidayProvider) day-slot mapping 2026-05-12 00:12:55 +02:00
4df56f7c30 test: add classify() spec example tests (red) 2026-05-12 00:12:44 +02:00
e58a2488bb feat: add empty ImageImporter skeleton wired into index.html 2026-05-12 00:12:28 +02:00
2877d0ae35 feat: add variants.js skeleton and wire into index.html + test.html 2026-05-12 00:12:22 +02:00
1b515c7d54 docs: add design specs and implementation plans for bonus variants and image import
- Feature B: 3 Bonus-Varianten (V1/V2/V3 loose) + Urlaubsmodus + Feature C date stepper
- Feature A: Bild-Import via OpenRouter Vision-LLM

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 00:10:21 +02:00
Kenearos
3bdfb90ce3
Merge pull request #2 from Kenearos/Kenearos-patch-1
Add GitHub Actions workflow for Node.js with Webpack
2026-02-24 15:40:12 +01:00
Kenearos
2e5db4d49b
Add GitHub Actions workflow for Node.js with Webpack 2026-02-03 15:16:41 +02:00
Kenearos
5887243355
Merge pull request #1 from Kenearos/claude/add-claude-documentation-xG5RA
docs: Add comprehensive CLAUDE.md for AI assistant guidance
2026-02-02 14:13:25 +01:00
Claude
2fddac1be1
docs: Add comprehensive CLAUDE.md for AI assistant guidance
Documents codebase structure, architecture, business logic,
development workflows, testing patterns, and code conventions
to help AI assistants understand and work with the project.

https://claude.ai/code/session_018Snbx538Gtn4f1tHzDEcjd
2026-02-02 12:40:42 +00:00
OpenClaw Agent
407b13c612 feat: Add Email Report Generator with copy-paste functionality 2026-02-02 12:25:31 +00:00
OpenClaw Agent
241a9d0dd7 fix: Use Node.js serve for robust port binding on Railway 2026-02-02 12:00:25 +00:00
OpenClaw Agent
7116eb3466 feat: Unified PWA release 2026-02-02 11:51:11 +00:00