{
  "_class" : "org.jenkinsci.plugins.workflow.job.WorkflowRun",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "com.cloudbees.jenkins.GitHubPushCause",
          "shortDescription" : "Started by GitHub push by younex1"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.workflow.libs.LibrariesAction"
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/main" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 11,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
            "branch" : [
              {
                "SHA1" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
                "name" : "refs/remotes/origin/main"
              }
            ]
          },
          "revision" : {
            "SHA1" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
            "branch" : [
              {
                "SHA1" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
                "name" : "refs/remotes/origin/main"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
        "branch" : [
          {
            "SHA1" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
            "name" : "refs/remotes/origin/main"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/younex1/blut24-landing.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.workflow.cps.EnvActionImpl"
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    },
    {
      "_class" : "org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction"
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.workflow.job.views.FlowGraphAction"
    },
    {
      
    },
    {
      
    },
    {
      
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#11 1b159ec",
  "duration" : 25732,
  "estimatedDuration" : 28038,
  "executor" : None,
  "fullDisplayName" : "blut24-landing #11 1b159ec",
  "id" : "11",
  "keepLog" : False,
  "number" : 11,
  "queueId" : 5464,
  "result" : "SUCCESS",
  "timestamp" : 1785238001631,
  "url" : "https://jenkins.younex.de/job/blut24-landing/11/",
  "changeSets" : [
    {
      "_class" : "hudson.plugins.git.GitChangeSetList",
      "items" : [
        {
          "_class" : "hudson.plugins.git.GitChangeSet",
          "affectedPaths" : [
            "server/utils/mail.ts",
            "app/components/SectionWaste.vue",
            "app/pages/bestaetigung.vue",
            "server/api/registration/submit.post.ts",
            "app/components/SiteFooter.vue",
            "app/components/SiteHeader.vue",
            "server/api/registration/confirm.post.ts",
            "app/components/SectionRegistration.vue",
            "app/pages/datenschutz.vue",
            "app/locales/en.ts",
            "app/composables/useLocale.ts",
            "nuxt.config.ts",
            "app/components/SectionBenefit.vue",
            "app/locales/de.ts",
            "server/utils/registrationValidation.ts",
            "app/components/SectionFeatures.vue",
            "app/composables/useRegistrationDialog.ts",
            "app/locales/detect.ts",
            "app/components/AndroidBadge.vue",
            "app/locales/index.ts",
            "app/components/RegistrationForm.vue",
            "server/utils/i18n.ts",
            "app/components/SectionProof.vue",
            "app/components/StockMatrixPreview.vue",
            "app/components/LegalTranslationNotice.vue",
            "app/pages/index.vue",
            "app/app.vue",
            "app/components/SectionHero.vue",
            "README.md",
            "app/components/SectionCourier.vue",
            "app/components/SectionHowItWorks.vue",
            "app/components/SectionApp.vue",
            "app/components/RegistrationDialog.vue",
            "app/pages/impressum.vue",
            "scripts/test-registration.mjs",
            "server/utils/registrationDb.ts"
          ],
          "commitId" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
          "timestamp" : 1785237988000,
          "author" : {
            "absoluteUrl" : "https://jenkins.younex.de/user/info",
            "fullName" : "info"
          },
          "authorEmail" : "info@younex.de",
          "comment" : "Full DE/EN with runtime switch, benefit-led section, free-of-charge messaging\u000a\u000aEnglish translation with a language switch in the header. Uses a typed message\u000acatalogue plus a small composable rather than @nuxtjs/i18n: the site is 12\u000acomponents and 4 pages, and i18n would add vue-i18n plus a build transform and\u000awant to own the URL space (/en/...), breaking every in-page anchor and every link\u000aalready shared. Both languages live on one URL, so a shared link always works.\u000aen.ts is typed against de.ts, so a missing key fails the type check.\u000a\u000aLocale precedence is ?lang= then the b24_lang cookie then Accept-Language, with\u000aGerman winning on absence, ties, wildcards and unparsable input. It is resolved\u000aonce on the server and carried through the payload, so hydration cannot disagree.\u000aConfirmation, welcome and duplicate mails follow the language stored on the\u000aregistration row rather than the language of whoever triggered them; the internal\u000aops mail stays German.\u000a\u000aImpressum and Datenschutz are translated for comprehension only — the English\u000apages carry a notice that the German version is solely authoritative and link\u000aback to it. \"Freiberufler\" is left untranslated with a gloss because the English\u000aoptions all name different legal statuses, and German statute short names are\u000akept. The privacy notice now discloses the b24_lang cookie.\u000a\u000a\"Verfall & Kosten\" becomes \"Ihr Vorteil\" / \"Your benefit\", led by the gain rather\u000athan the loss. The worked example stays labelled as our own assumption — no\u000ainvented statistics. #vorteil is the new anchor and #verfall still resolves.\u000a\u000aFree registration and use is stated in the hero, the proof band, the registration\u000aCTA and the dialog header, claiming only what is actually free.\u000a\u000aFixes the dialog keeping the last confirmation screen: reopening after a completed\u000asubmission resets the form, while dismissing mid-typing keeps every keystroke,\u000abecause the reset runs on open and only when the previous run finished. Replaces\u000a\"Weitere Einrichtung registrieren\" with a plain close action.\u000a\u000aCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\u000a",
          "date" : "2026-07-28 13:26:28 +0200",
          "id" : "1b159ec466b3092fcd9e053fc84a89b6f54023fb",
          "msg" : "Full DE/EN with runtime switch, benefit-led section, free-of-charge messaging",
          "paths" : [
            {
              "editType" : "edit",
              "file" : "app/components/AndroidBadge.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SectionHero.vue"
            },
            {
              "editType" : "add",
              "file" : "server/utils/i18n.ts"
            },
            {
              "editType" : "edit",
              "file" : "server/utils/mail.ts"
            },
            {
              "editType" : "add",
              "file" : "app/locales/en.ts"
            },
            {
              "editType" : "edit",
              "file" : "README.md"
            },
            {
              "editType" : "edit",
              "file" : "app/components/RegistrationDialog.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/components/RegistrationForm.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SectionFeatures.vue"
            },
            {
              "editType" : "delete",
              "file" : "app/components/SectionWaste.vue"
            },
            {
              "editType" : "edit",
              "file" : "server/utils/registrationValidation.ts"
            },
            {
              "editType" : "add",
              "file" : "app/locales/index.ts"
            },
            {
              "editType" : "edit",
              "file" : "server/api/registration/confirm.post.ts"
            },
            {
              "editType" : "edit",
              "file" : "server/utils/registrationDb.ts"
            },
            {
              "editType" : "add",
              "file" : "app/locales/detect.ts"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SectionCourier.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SiteFooter.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SectionHowItWorks.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/pages/index.vue"
            },
            {
              "editType" : "add",
              "file" : "app/components/LegalTranslationNotice.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/components/StockMatrixPreview.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/composables/useRegistrationDialog.ts"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SectionApp.vue"
            },
            {
              "editType" : "edit",
              "file" : "nuxt.config.ts"
            },
            {
              "editType" : "add",
              "file" : "app/locales/de.ts"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SiteHeader.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/pages/bestaetigung.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SectionProof.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/pages/datenschutz.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/pages/impressum.vue"
            },
            {
              "editType" : "edit",
              "file" : "scripts/test-registration.mjs"
            },
            {
              "editType" : "edit",
              "file" : "server/api/registration/submit.post.ts"
            },
            {
              "editType" : "edit",
              "file" : "app/components/SectionRegistration.vue"
            },
            {
              "editType" : "edit",
              "file" : "app/app.vue"
            },
            {
              "editType" : "add",
              "file" : "app/components/SectionBenefit.vue"
            },
            {
              "editType" : "add",
              "file" : "app/composables/useLocale.ts"
            }
          ]
        }
      ],
      "kind" : "git"
    }
  ],
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ],
  "inProgress" : False,
  "nextBuild" : {
    "number" : 12,
    "url" : "https://jenkins.younex.de/job/blut24-landing/12/"
  },
  "previousBuild" : {
    "number" : 10,
    "url" : "https://jenkins.younex.de/job/blut24-landing/10/"
  }
}