<workflowRun _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>7</buildNumber><marked><SHA1>4476c9c4298767c7d1e75e392fda5233727c5d91</SHA1><branch><SHA1>4476c9c4298767c7d1e75e392fda5233727c5d91</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>4476c9c4298767c7d1e75e392fda5233727c5d91</SHA1><branch><SHA1>4476c9c4298767c7d1e75e392fda5233727c5d91</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>4476c9c4298767c7d1e75e392fda5233727c5d91</SHA1><branch><SHA1>4476c9c4298767c7d1e75e392fda5233727c5d91</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/blut24-landing.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'><environment><GIT_SHA>4476c9c</GIT_SHA><RELEASE_DIR>/var/www/blut24.com/web/releases/7-4476c9c</RELEASE_DIR><RELEASE_ID>7-4476c9c</RELEASE_ID></environment></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.younex.de/job/blut24-landing/7/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/job/blut24-landing/changes</changesUrl><displayUrl>https://jenkins.younex.de/job/blut24-landing/7/</displayUrl><testsUrl>https://jenkins.younex.de/job/blut24-landing/7/testReport</testsUrl></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'><restartEnabled>false</restartEnabled><restartableStage>Checkout</restartableStage><restartableStage>Guard: main only</restartableStage><restartableStage>Ship source to target</restartableStage><restartableStage>Build, health-check and swap</restartableStage><restartableStage>Smoke test</restartableStage></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'><node _class='org.jenkinsci.plugins.workflow.graph.FlowStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.graph.FlowEndNode'></node></action><action></action><action></action><action></action><building>false</building><displayName>#7 4476c9c</displayName><duration>26829</duration><estimatedDuration>28038</estimatedDuration><fullDisplayName>blut24-landing #7 4476c9c</fullDisplayName><id>7</id><keepLog>false</keepLog><number>7</number><queueId>5453</queueId><result>SUCCESS</result><timestamp>1785228855796</timestamp><url>https://jenkins.younex.de/job/blut24-landing/7/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/SectionCourier.vue</affectedPath><affectedPath>app/components/SectionHowItWorks.vue</affectedPath><affectedPath>app/components/SectionHero.vue</affectedPath><affectedPath>app/components/SiteFooter.vue</affectedPath><affectedPath>app/components/SectionRegistration.vue</affectedPath><affectedPath>app/components/SectionProof.vue</affectedPath><commitId>4476c9c4298767c7d1e75e392fda5233727c5d91</commitId><timestamp>1785228842000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@logyou.de</authorEmail><comment>landing: copy pass — courier value proposition, step 4, spacing, footer

- Step 4 now says what actually happens: if the other clinic is on Blut24 too,
  order, delivery note and unit data stay inside the system with nothing retyped
  or faxed; DGTI-Lieferschein, PDF and e-mail remain available for houses that
  are not yet connected, rather than being the default path.
- Courier section rewritten around the app: orders arrive on the phone, pickup
  and delivery are confirmed there, and participation is free so a courier can
  win additional runs without buying software. Kept strictly to goods transport
  wording - no patient-transport terms.
- "dauerhaft kostenlos" -&gt; "für Kliniken kostenlos" everywhere.
- Tightened the gap between the header and the hero headline on both breakpoints.
- Dropped the Bundes-Klinik-Atlas source line from the footer.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-28 10:54:02 +0200</date><id>4476c9c4298767c7d1e75e392fda5233727c5d91</id><msg>landing: copy pass — courier value proposition, step 4, spacing, footer</msg><path><editType>edit</editType><file>app/components/SectionHowItWorks.vue</file></path><path><editType>edit</editType><file>app/components/SectionProof.vue</file></path><path><editType>edit</editType><file>app/components/SectionRegistration.vue</file></path><path><editType>edit</editType><file>app/components/SectionHero.vue</file></path><path><editType>edit</editType><file>app/components/SectionCourier.vue</file></path><path><editType>edit</editType><file>app/components/SiteFooter.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName><id>info</id></culprit><inProgress>false</inProgress><nextBuild><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>8</buildNumber><marked><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><branch><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><branch><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><branch><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/blut24-landing.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><action></action><building>false</building><displayName>#8 b1a7c40</displayName><duration>26057</duration><estimatedDuration>28038</estimatedDuration><fullDisplayName>blut24-landing #8 b1a7c40</fullDisplayName><id>8</id><keepLog>false</keepLog><number>8</number><queueId>5457</queueId><result>SUCCESS</result><timestamp>1785232726165</timestamp><url>https://jenkins.younex.de/job/blut24-landing/8/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env.example</affectedPath><affectedPath>app/components/RegistrationForm.vue</affectedPath><affectedPath>nuxt.config.ts</affectedPath><commitId>b1a7c4026f44521453558a428303a0537697beda</commitId><timestamp>1785232713000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@logyou.de</authorEmail><comment>registration: the FORM also has to know about the test domains

A whitelisted address was still rejected with "Die Domain gehört nicht zu …".
The server accepted it — I had only ever tested the server with curl, which
bypasses the form entirely. The browser does its own domain check for instant
feedback and knew nothing about REGISTRATION_TEST_DOMAINS, so it blocked the
submit before the request was ever sent. Verified the wrong layer, missed the bug.

The list is now mirrored into runtimeConfig.public and consulted by both the
submit guard and the blur handler. Publishing it is acceptable: it is a temporary
operator feature (empty in real production) and a bypassed registration still has
to confirm a mail delivered to that domain, so knowing the name grants nothing.

The blur notice does NOT claim the domain "matches the Standort" — that would be
untrue. It says it is a test domain and that the registration is flagged for
manual approval.

Note the two-name trap, documented in .env.example: REGISTRATION_TEST_DOMAINS is
read server-side, NUXT_PUBLIC_REGISTRATION_TEST_DOMAINS by the browser. Set both
or the form and the server disagree — which is exactly this bug.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-28 11:58:33 +0200</date><id>b1a7c4026f44521453558a428303a0537697beda</id><msg>registration: the FORM also has to know about the test domains</msg><path><editType>edit</editType><file>app/components/RegistrationForm.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.env.example</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit><inProgress>false</inProgress><nextBuild><number>9</number><url>https://jenkins.younex.de/job/blut24-landing/9/</url></nextBuild><previousBuild><number>7</number><url>https://jenkins.younex.de/job/blut24-landing/7/</url></previousBuild></nextBuild><previousBuild><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>6</buildNumber><marked><SHA1>2264c156533706f135d03479119c61e6af91fa0d</SHA1><branch><SHA1>2264c156533706f135d03479119c61e6af91fa0d</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>2264c156533706f135d03479119c61e6af91fa0d</SHA1><branch><SHA1>2264c156533706f135d03479119c61e6af91fa0d</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>2264c156533706f135d03479119c61e6af91fa0d</SHA1><branch><SHA1>2264c156533706f135d03479119c61e6af91fa0d</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/blut24-landing.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><action></action><building>false</building><displayName>#6 2264c15</displayName><duration>26542</duration><estimatedDuration>28038</estimatedDuration><fullDisplayName>blut24-landing #6 2264c15</fullDisplayName><id>6</id><keepLog>false</keepLog><number>6</number><queueId>5451</queueId><result>SUCCESS</result><timestamp>1785228290744</timestamp><url>https://jenkins.younex.de/job/blut24-landing/6/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/datenschutz.vue</affectedPath><commitId>2264c156533706f135d03479119c61e6af91fa0d</commitId><timestamp>1785228279000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@logyou.de</authorEmail><comment>datenschutz: name the actual controller, matching the Impressum

Both pages must name the same responsible party or they contradict each other,
so the Verantwortlicher section now carries the same operator data as the
Impressum (Younes Kalakhi, IT Beratung &amp; Dienstleistung, Lahnau) instead of
bracketed placeholders.

Two judgement calls, both noted in the file:
- the e-mail is still a placeholder because it is obfuscated on the source page
  and could not be read; Art. 13 DSGVO requires a contact route, so it must be
  filled before this is treated as live
- no Datenschutzbeauftragter is claimed - a freelancer of this size is generally
  not required to appoint one under § 38 BDSG, and asserting one that does not
  exist would be worse than saying none is appointed

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-28 10:44:39 +0200</date><id>2264c156533706f135d03479119c61e6af91fa0d</id><msg>datenschutz: name the actual controller, matching the Impressum</msg><path><editType>edit</editType><file>app/pages/datenschutz.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit><inProgress>false</inProgress><nextBuild><number>7</number><url>https://jenkins.younex.de/job/blut24-landing/7/</url></nextBuild><previousBuild><number>5</number><url>https://jenkins.younex.de/job/blut24-landing/5/</url></previousBuild></previousBuild></workflowRun>