feat: AcroForm-Fill via Claude CLI, Multi-Source, Kanagawa, Docker-Deploy
Komplettes Rework der AI-Studio-Vorlage zu einem produktiven Werkzeug fuer
deutsche AcroForm-Formulare (Reha-Antraege, Arzt-Befundberichte):
- Backend: Express spawnt headless Claude CLI ('claude -p --output-format json'
via stdin-Pipe). Prompt enthaelt die Feldnamen als Ziel-Schema plus die
Arbeitsregeln (Stichwortstil, feste Zeichen-Kaestchen ohne Leerzeichen,
Vordrucke respektieren, keine geratenen Werte, nur medizinisch).
- PDF-Handling: pdfjs-dist statt pdf-lib — pdf-lib scheitert an verschluesselten
Object-Streams in DRV-Formularen. annotationStorage + saveDocument, kein
Flatten. Worker-Patch zur Laufzeit forciert Auto-Size und schwarze Schrift.
- Multi-Source-Upload: beliebig viele PDFs/Bilder + optional Freitext.
- Design: Kanagawa Design System (Preset aus ../kanagawa-design-system),
Tailwind lokal gebaut statt CDN, Dark/Light-Toggle, Progress-Indicator.
- Deployment: Multi-Stage-Dockerfile, docker-compose in matrix_default-Netz,
Claude-Credentials vom Host per Volume. PLAN.md + AGENTS.md (Alex-Schema).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d6cab4aeb5
commit
3c669fb003
28 changed files with 6756 additions and 934 deletions
42
Dockerfile
Normal file
42
Dockerfile
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# syntax=docker/dockerfile:1.7
|
||||
# Build-Context: Parent-Verzeichnis (enthält Rentenversicherer/ und
|
||||
# kanagawa-design-system/). Die relativen CSS-Imports bleiben damit gültig.
|
||||
|
||||
# -------- BUILD --------
|
||||
FROM node:20-alpine AS build
|
||||
WORKDIR /workspace
|
||||
COPY kanagawa-design-system ./kanagawa-design-system
|
||||
WORKDIR /workspace/Rentenversicherer
|
||||
COPY Rentenversicherer/package.json Rentenversicherer/package-lock.json ./
|
||||
RUN npm ci
|
||||
COPY Rentenversicherer ./
|
||||
RUN npm run build
|
||||
|
||||
# -------- RUNTIME --------
|
||||
FROM node:20-alpine AS runtime
|
||||
WORKDIR /app
|
||||
|
||||
# node:20-alpine bringt schon den User `node` (UID 1000, GID 1000) mit —
|
||||
# den nehmen wir direkt, damit der Host-Mount /home/openclaw/.claude
|
||||
# (UID 1000) lesbar und beschreibbar ist.
|
||||
RUN apk add --no-cache bash ca-certificates dumb-init \
|
||||
&& npm install -g @anthropic-ai/claude-code@2.1.113 tsx@4.19.0 \
|
||||
&& chown -R node:node /app
|
||||
|
||||
USER node:node
|
||||
|
||||
COPY --chown=node:node Rentenversicherer/package.json Rentenversicherer/package-lock.json ./
|
||||
RUN npm ci
|
||||
|
||||
COPY --chown=node:node --from=build /workspace/Rentenversicherer/dist ./dist
|
||||
COPY --chown=node:node Rentenversicherer/server ./server
|
||||
COPY --chown=node:node Rentenversicherer/types.ts ./types.ts
|
||||
COPY --chown=node:node Rentenversicherer/tsconfig.json ./tsconfig.json
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV HOST=0.0.0.0
|
||||
ENV PORT=3011
|
||||
|
||||
EXPOSE 3011
|
||||
ENTRYPOINT ["dumb-init", "--"]
|
||||
CMD ["tsx", "server/index.ts"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue