Compare commits

..
9 Commits
Author SHA1 Message Date
mmintelandClaude Haiku 5.5 7daa90dd89 content(messen): shorten fair names to Windenergietage and Intersolar
Build & Deploy / 🔔 Notify (push) Successful in 3s
Build & Deploy / 🔍 Prepare (push) Successful in 22s
Build & Deploy / 🧪 QA (push) Successful in 1m44s
Build & Deploy / 🏗️ Build (push) Successful in 3m54s
Build & Deploy / 🚀 Deploy (push) Successful in 47s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 1m31s
The location already appears in its own field, so repeating it in the
name is redundant. Use "Windenergietage" and "Intersolar" in DE, and
"Wind Energy Days" and "Intersolar" in EN.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-11-15 15:37:56 +01:00
mmintelandClaude Haiku 5.5 23d72f5287 Merge origin/main into main
Build & Deploy / 🔍 Prepare (push) Successful in 34s
Build & Deploy / 🧪 QA (push) Successful in 3m28s
Build & Deploy / 🏗️ Build (push) Successful in 9m7s
Build & Deploy / 🚀 Deploy (push) Successful in 2m34s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 4m10s
Build & Deploy / 🔔 Notify (push) Successful in 5s
Integrate the remote CI retarget (88886a991) before pushing the
v2.4.62 release.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-11-13 14:01:35 +01:00
mmintelandClaude Haiku 5.5 6283a4e5ad chore(release): bump version to 2.4.62
Build & Deploy / 🔍 Prepare (push) Successful in 1m19s
Build & Deploy / 🧪 QA (push) Successful in 4m16s
Build & Deploy / 🏗️ Build (push) Successful in 6m38s
Build & Deploy / 🚀 Deploy (push) Successful in 2m8s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 2m25s
Build & Deploy / 🔔 Notify (push) Successful in 4s
package.json was still at 2.4.58 while tags up to v2.4.61 existed.
Align the version with the release tag v2.4.62.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-11-13 13:40:05 +01:00
mmintelandClaude Haiku 5.5 9765d28b6d content(messen): replace Linstow 2026 with Windenergietage Potsdam 2027
The Windenergietage Linstow 2026 (10.–12. Nov 2026) has already taken
place, so it is removed from the DE and EN fairs list. Windenergietage
Potsdam (09.–11. Nov 2027) is added. The content test is updated to
match the new expectations.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-11-13 13:00:14 +01:00
mmintel 88886a9916 chore(ci): retarget deployments to infra.mintel.me (server consolidation)
Build & Deploy / 🔍 Prepare (push) Successful in 22s
Build & Deploy / 🧪 QA (push) Successful in 1m26s
Build & Deploy / 🏗️ Build (push) Successful in 2m16s
Build & Deploy / 🚀 Deploy (push) Failing after 1s
Build & Deploy / 🧪 Post-Deploy Verification (push) Skipped
Build & Deploy / 🔔 Notify (push) Failing after 1s
2026-10-01 22:45:27 +02:00
mmintel 0cc7d0805e fix(content): correct ISO certificate validity dates from OCR-verified scans
Build & Deploy / 🔍 Prepare (push) Successful in 19s
Build & Deploy / 🧪 QA (push) Successful in 1m23s
Build & Deploy / 🏗️ Build (push) Successful in 2m46s
Build & Deploy / 🚀 Deploy (push) Successful in 25s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 52s
Build & Deploy / 🔔 Notify (push) Successful in 2s
Nightly QA / 💨 Smoke & Health (push) Successful in 1m43s
2026-09-08 11:56:49 +02:00
mmintel ad5079dcec fix(assets): replace iso9001.pdf with official 2023-12-14 certificate scan
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Successful in 1m18s
Build & Deploy / 🏗️ Build (push) Successful in 2m34s
Build & Deploy / 🚀 Deploy (push) Successful in 24s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 53s
Build & Deploy / 🔔 Notify (push) Successful in 3s
2026-09-08 11:22:41 +02:00
mmintel 2bbc4235be content(imprint): replace outdated EU dispute resolution with consumer dispute resolution notice (DE+EN) 2026-09-08 11:21:00 +02:00
mmintel 7a1eb40bc8 ci(deploy): pass FORM_TOKEN_SECRET into generated env for anti-spam token signing
Build & Deploy / 🔍 Prepare (push) Successful in 19s
Build & Deploy / 🧪 QA (push) Successful in 1m19s
Build & Deploy / 🏗️ Build (push) Successful in 2m38s
Build & Deploy / 🚀 Deploy (push) Successful in 25s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 52s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-09-02 10:31:37 +02:00
11 changed files with 52 additions and 54 deletions
+18 -12
View File
@@ -286,6 +286,9 @@ jobs:
# Notifications
GOTIFY_URL: ${{ secrets.GOTIFY_URL }}
GOTIFY_TOKEN: ${{ secrets.GOTIFY_TOKEN }}
# Anti-spam
FORM_TOKEN_SECRET: ${{ secrets.FORM_TOKEN_SECRET }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -360,6 +363,9 @@ jobs:
echo "GOTIFY_URL=$GOTIFY_URL"
echo "GOTIFY_TOKEN=$GOTIFY_TOKEN"
echo ""
echo "# Anti-spam"
echo "FORM_TOKEN_SECRET=$FORM_TOKEN_SECRET"
echo ""
echo "TARGET=$TARGET"
echo "SENTRY_ENVIRONMENT=$TARGET"
echo "PROJECT_NAME=$PROJECT_NAME"
@@ -385,7 +391,7 @@ jobs:
mkdir -p ~/.ssh
echo "${{ secrets.ALPHA_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H alpha.mintel.me >> ~/.ssh/known_hosts 2>/dev/null
ssh-keyscan -H infra.mintel.me >> ~/.ssh/known_hosts 2>/dev/null
if [[ "$TARGET" == "production" ]]; then
SITE_DIR="/home/deploy/sites/e-tib.com"
@@ -397,25 +403,25 @@ jobs:
SITE_DIR="/home/deploy/sites/branch.e-tib.com/$SLUG"
fi
ssh root@alpha.mintel.me "mkdir -p $SITE_DIR"
scp .env.deploy root@alpha.mintel.me:$SITE_DIR/$ENV_FILE
scp docker-compose.yml root@alpha.mintel.me:$SITE_DIR/docker-compose.yml
ssh root@infra.mintel.me "mkdir -p $SITE_DIR"
scp .env.deploy root@infra.mintel.me:$SITE_DIR/$ENV_FILE
scp docker-compose.yml root@infra.mintel.me:$SITE_DIR/docker-compose.yml
ssh root@alpha.mintel.me "docker system prune -f"
ssh root@infra.mintel.me "docker system prune -f"
# ── Deterministic cleanup: stop the EXACT compose project we're about to redeploy ──
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' down --remove-orphans 2>/dev/null || true"
ssh root@infra.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' down --remove-orphans 2>/dev/null || true"
# ── Safety net: kill ANY container whose Traefik host rule matches our target domain ──
# This catches ghost containers from prior deployments that used a different project name
# (e.g. 'e-tibcom' vs 'etib-production' due to Docker Compose defaulting to dir name)
ssh root@alpha.mintel.me "docker ps -q --filter label=traefik.http.routers.${PROJECT_NAME}.rule 2>/dev/null | xargs -r docker rm -f 2>/dev/null || true"
ssh root@alpha.mintel.me "docker ps --format '{{.Names}}' | grep -E '^e-tibcom-' | xargs -r docker rm -f 2>/dev/null || true"
ssh root@infra.mintel.me "docker ps -q --filter label=traefik.http.routers.${PROJECT_NAME}.rule 2>/dev/null | xargs -r docker rm -f 2>/dev/null || true"
ssh root@infra.mintel.me "docker ps --format '{{.Names}}' | grep -E '^e-tibcom-' | xargs -r docker rm -f 2>/dev/null || true"
ssh root@alpha.mintel.me "cd $SITE_DIR && echo '${{ secrets.REGISTRY_PASS }}' | docker login registry.infra.mintel.me -u '${{ secrets.REGISTRY_USER }}' --password-stdin"
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' pull"
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' up -d --remove-orphans"
ssh root@alpha.mintel.me "docker system prune -f --filter 'until=24h'"
ssh root@infra.mintel.me "cd $SITE_DIR && echo '${{ secrets.REGISTRY_PASS }}' | docker login registry.infra.mintel.me -u '${{ secrets.REGISTRY_USER }}' --password-stdin"
ssh root@infra.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' pull"
ssh root@infra.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' up -d --remove-orphans"
ssh root@infra.mintel.me "docker system prune -f --filter 'until=24h'"
# ──────────────────────────────────────────────────────────────────────────────
# JOB 5: Post-Deploy Verification
+3 -3
View File
@@ -31,21 +31,21 @@ export const defaultCertificates: Certificate[] = [
description: 'Umweltmanagementsystem',
pdfUrl: '/assets/certificates/iso14001.pdf',
type: 'iso',
date: '14.12.2023',
date: '06.12.2023 – 05.12.2026',
},
{
title: 'ISO 9001:2015',
description: 'Qualitätsmanagementsystem',
pdfUrl: '/assets/certificates/iso9001.pdf',
type: 'iso',
date: '14.12.2023',
date: '06.12.2023 – 05.12.2026',
},
{
title: 'DIN EN ISO 45001:2018',
description: 'Arbeits- und Gesundheitsschutz',
pdfUrl: '/assets/certificates/iso45001.pdf',
type: 'iso',
date: '05.12.2025',
date: '06.12.2025 – 05.12.2028',
},
{
title: 'Betriebshaftpflichtversicherung',
+2 -7
View File
@@ -38,14 +38,9 @@ Danny Joseph
Gewerbestraße 22
03172 Guben
## EU-Streitschlichtung
## Verbraucherstreitbeilegung
Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: [https://ec.europa.eu/consumers/odr/](https://ec.europa.eu/consumers/odr/).
Unsere E-Mail-Adresse finden Sie oben im Impressum.
## Verbraucherstreitbeilegung/Universalschlichtungsstelle
Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.
Wir sind nicht bereit und nicht verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.
## Haftungsausschluss (Disclaimer)
+2 -2
View File
@@ -20,9 +20,9 @@ layout: "fullBleed"
showFairs={true}
showJobs={false}
fairs={[
{ name: 'Windenergietage Linstow', date: '10. - 12. November 2026', type: 'Fachkongress', location: 'Linstow', url: 'https://www.windenergietage.de/' },
{ name: 'Werkstatt Kabel 2026', date: '24. - 25. November 2026', type: 'Fachtagung', location: 'Wiesbaden', url: 'https://werkstatt-kabel.essociation.de/' },
{ name: 'Intersolar München', date: '8. - 10. Juni 2027', type: 'Messe', location: 'München', url: 'https://www.intersolar.de/' }
{ name: 'Intersolar', date: '8. - 10. Juni 2027', type: 'Messe', location: 'München', url: 'https://www.intersolar.de/' },
{ name: 'Windenergietage', date: '09. - 11. November 2027', type: 'Fachkongress', location: 'Potsdam', url: 'https://www.windenergietage.de/' }
]}
/>
</div>
+2 -7
View File
@@ -40,14 +40,9 @@ Gewerbestraße 22
03172 Guben
Germany
## EU Dispute Resolution
## Consumer Dispute Resolution
The European Commission provides a platform for online dispute resolution (ODR): [https://ec.europa.eu/consumers/odr/](https://ec.europa.eu/consumers/odr/).
Our email address can be found at the top of the imprint.
## Consumer Dispute Resolution/Universal Arbitration Board
We are not willing or obliged to participate in dispute resolution proceedings before a consumer arbitration board.
We are not willing and not obliged to participate in dispute resolution proceedings before a consumer arbitration board.
## Disclaimer
+2 -2
View File
@@ -20,9 +20,9 @@ layout: "fullBleed"
showFairs={true}
showJobs={false}
fairs={[
{ name: 'Wind Energy Days Linstow', date: 'November 10–12, 2026', type: 'Specialist Congress', location: 'Linstow', url: 'https://www.windenergietage.de/' },
{ name: 'Werkstatt Kabel 2026', date: 'November 24–25, 2026', type: 'Symposium', location: 'Wiesbaden', url: 'https://werkstatt-kabel.essociation.de/' },
{ name: 'Intersolar Munich', date: 'June 8–10, 2027', type: 'Fair', location: 'Munich', url: 'https://www.intersolar.de/' }
{ name: 'Intersolar', date: 'June 8–10, 2027', type: 'Fair', location: 'Munich', url: 'https://www.intersolar.de/' },
{ name: 'Wind Energy Days', date: 'November 9–11, 2027', type: 'Specialist Congress', location: 'Potsdam', url: 'https://www.windenergietage.de/' }
]}
/>
</div>
+3 -3
View File
@@ -23,21 +23,21 @@ layout: "fullBleed"
description: 'Environmental Management System',
pdfUrl: '/assets/certificates/iso14001.pdf',
type: 'iso',
date: '14.12.2023',
date: '06.12.2023 – 05.12.2026',
},
{
title: 'ISO 9001:2015',
description: 'Quality Management System',
pdfUrl: '/assets/certificates/iso9001.pdf',
type: 'iso',
date: '14.12.2023',
date: '06.12.2023 – 05.12.2026',
},
{
title: 'DIN EN ISO 45001:2018',
description: 'Occupational Health and Safety',
pdfUrl: '/assets/certificates/iso45001.pdf',
type: 'iso',
date: '05.12.2025',
date: '06.12.2025 – 05.12.2028',
},
{
title: 'Commercial Liability Insurance',
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "e-tib-nextjs",
"version": "2.4.58",
"version": "2.4.62",
"type": "module",
"private": true,
Binary file not shown.
+1 -1
View File
@@ -13,7 +13,7 @@ fi
# ── Configuration ──────────────────────────────────────────────────────────
SOURCE_ENV="${1:-}" # local | testing | staging | prod
TARGET_ENV="${2:-}" # testing | staging | prod
SSH_HOST="root@alpha.mintel.me"
SSH_HOST="root@infra.mintel.me"
LOCAL_MEDIA_DIR="./public/media"
DRY_RUN=""
+18 -16
View File
@@ -10,46 +10,48 @@ describe('Messen Content and Translations', () => {
const content = fs.readFileSync(deMessenPath, 'utf8');
// 1. Intersolar München
expect(content).toContain("name: 'Intersolar München'");
expect(content).toContain("name: 'Intersolar'");
expect(content).toContain("date: '8. - 10. Juni 2027'");
expect(content).toContain("type: 'Messe'");
expect(content).toContain("location: 'München'");
// 2. Windenergietage Linstow
expect(content).toContain("name: 'Windenergietage Linstow'");
expect(content).toContain("date: '10. - 12. November 2026'");
expect(content).toContain("type: 'Fachkongress'");
expect(content).toContain("location: 'Linstow'");
// 3. Werkstatt Kabel 2026 (No "Kabel-Workshop")
// 2. Werkstatt Kabel 2026 (No "Kabel-Workshop")
expect(content).not.toContain("Kabel-Workshop");
expect(content).toContain("name: 'Werkstatt Kabel 2026'");
expect(content).toContain("date: '24. - 25. November 2026'");
expect(content).toContain("type: 'Fachtagung'");
expect(content).toContain("location: 'Wiesbaden'");
// 3. Windenergietage Potsdam (replaces Linstow 2026)
expect(content).not.toContain("Linstow");
expect(content).toContain("name: 'Windenergietage'");
expect(content).toContain("date: '09. - 11. November 2027'");
expect(content).toContain("type: 'Fachkongress'");
expect(content).toContain("location: 'Potsdam'");
});
it('should have updated English trade fair dates and names for 2026', () => {
const content = fs.readFileSync(enMessenPath, 'utf8');
// 1. Intersolar Munich
expect(content).toContain("name: 'Intersolar Munich'");
expect(content).toContain("name: 'Intersolar'");
expect(content).toContain("date: 'June 8–10, 2027'");
expect(content).toContain("type: 'Fair'");
expect(content).toContain("location: 'Munich'");
// 2. Wind Energy Days Linstow
expect(content).toContain("name: 'Wind Energy Days Linstow'");
expect(content).toContain("date: 'November 10–12, 2026'");
expect(content).toContain("type: 'Specialist Congress'");
expect(content).toContain("location: 'Linstow'");
// 3. Werkstatt Kabel 2026 (No "Cable Workshop" or "Kabel Workshop")
// 2. Werkstatt Kabel 2026 (No "Cable Workshop" or "Kabel Workshop")
expect(content).not.toContain("Cable Workshop");
expect(content).not.toContain("Kabel Workshop");
expect(content).toContain("name: 'Werkstatt Kabel 2026'");
expect(content).toContain("date: 'November 24–25, 2026'");
expect(content).toContain("type: 'Symposium'");
expect(content).toContain("location: 'Wiesbaden'");
// 3. Wind Energy Days Potsdam (replaces Linstow 2026)
expect(content).not.toContain("Linstow");
expect(content).toContain("name: 'Wind Energy Days'");
expect(content).toContain("date: 'November 9–11, 2027'");
expect(content).toContain("type: 'Specialist Congress'");
expect(content).toContain("location: 'Potsdam'");
});
});