From 5da88356a8047d7fdcc3da3f9ea75fe442792bbf Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 27 Feb 2026 00:12:00 +0100 Subject: [PATCH] feat: migrate npm registry from Verdaccio to Gitea Packages --- .env | 6 + .gitignore | 7 +- .npmrc | 6 +- data/briefings/etib.txt | 246 +++++++++ packages/cli/package.json | 2 +- packages/concept-engine/src/_test_pipeline.ts | 40 ++ packages/concept-engine/src/analyzer.ts | 334 ++++++++++++ packages/concept-engine/src/cli.ts | 149 ++++++ packages/concept-engine/src/index.ts | 10 + packages/concept-engine/src/llm-client.ts | 133 +++++ packages/concept-engine/src/pipeline.ts | 257 +++++++++ packages/concept-engine/src/scraper.ts | 432 +++++++++++++++ .../src/steps/00a-site-audit.ts | 65 +++ .../concept-engine/src/steps/00b-research.ts | 121 +++++ .../concept-engine/src/steps/01-extract.ts | 108 ++++ packages/concept-engine/src/steps/02-audit.ts | 110 ++++ .../concept-engine/src/steps/03-strategize.ts | 99 ++++ .../concept-engine/src/steps/04-architect.ts | 133 +++++ packages/concept-engine/src/types.ts | 233 +++++++++ packages/concept-engine/tsconfig.json | 28 + packages/concept-engine/tsup.config.ts | 9 + packages/content-engine/src/generator.ts | 20 +- packages/content-engine/src/orchestrator.ts | 4 +- packages/eslint-config/package.json | 2 +- .../estimation-engine/src/_test_pipeline.ts | 40 ++ packages/estimation-engine/src/cli.ts | 78 +++ packages/estimation-engine/src/index.ts | 9 + packages/estimation-engine/src/llm-client.ts | 128 +++++ packages/estimation-engine/src/pipeline.ts | 228 ++++++++ .../src/steps/05-synthesize.ts | 95 ++++ .../src/steps/06-critique.ts | 99 ++++ packages/estimation-engine/src/types.ts | 113 ++++ packages/estimation-engine/src/validators.ts | 380 ++++++++++++++ packages/estimation-engine/tsconfig.json | 14 + packages/gatekeeper/next.config.ts | 1 + packages/husky-config/package.json | 2 +- packages/infra/package.json | 2 +- packages/journaling/src/agent.ts | 10 +- packages/journaling/src/clients/trends.ts | 2 +- packages/mail/package.json | 2 +- packages/meme-generator/src/index.ts | 2 +- packages/next-config/package.json | 2 +- packages/next-feedback/package.json | 2 +- packages/next-observability/package.json | 2 +- packages/next-utils/package.json | 2 +- packages/observability/package.json | 2 +- packages/page-audit/README.md | 85 +++ packages/page-audit/_debug_vitals.ts | 31 ++ packages/page-audit/src/auditor.ts | 152 ++++++ packages/page-audit/src/cli.ts | 70 +++ packages/page-audit/src/dataforseo.ts | 212 ++++++++ packages/page-audit/src/index.ts | 14 + packages/page-audit/src/report.ts | 149 ++++++ packages/page-audit/src/types.ts | 83 +++ packages/page-audit/tsconfig.json | 13 + .../pdf-library/src/components/ConceptPDF.tsx | 70 +++ .../src/components/EstimationPDF.tsx | 12 - .../pdf-library/src/components/InfoPDF.tsx | 172 ++++++ .../pdf/modules/EstimationModule.tsx | 15 +- .../components/pdf/modules/SitemapModule.tsx | 91 ++-- .../pdf/modules/TransparenzModule.tsx | 2 +- packages/pdf-library/src/index.ts | 3 + .../src/logic/pricing/constants.ts | 2 +- packages/pdf-library/src/server.ts | 1 - .../pdf-library/src/services/PdfEngine.ts | 52 +- packages/tsconfig/package.json | 2 +- pnpm-lock.yaml | 495 +++++++++++++++++- tmp-patch-v3.sh | 6 + tmp-patch.sh | 10 + 69 files changed, 5397 insertions(+), 114 deletions(-) create mode 100644 data/briefings/etib.txt create mode 100644 packages/concept-engine/src/_test_pipeline.ts create mode 100644 packages/concept-engine/src/analyzer.ts create mode 100644 packages/concept-engine/src/cli.ts create mode 100644 packages/concept-engine/src/index.ts create mode 100644 packages/concept-engine/src/llm-client.ts create mode 100644 packages/concept-engine/src/pipeline.ts create mode 100644 packages/concept-engine/src/scraper.ts create mode 100644 packages/concept-engine/src/steps/00a-site-audit.ts create mode 100644 packages/concept-engine/src/steps/00b-research.ts create mode 100644 packages/concept-engine/src/steps/01-extract.ts create mode 100644 packages/concept-engine/src/steps/02-audit.ts create mode 100644 packages/concept-engine/src/steps/03-strategize.ts create mode 100644 packages/concept-engine/src/steps/04-architect.ts create mode 100644 packages/concept-engine/src/types.ts create mode 100644 packages/concept-engine/tsconfig.json create mode 100644 packages/concept-engine/tsup.config.ts create mode 100644 packages/estimation-engine/src/_test_pipeline.ts create mode 100644 packages/estimation-engine/src/cli.ts create mode 100644 packages/estimation-engine/src/index.ts create mode 100644 packages/estimation-engine/src/llm-client.ts create mode 100644 packages/estimation-engine/src/pipeline.ts create mode 100644 packages/estimation-engine/src/steps/05-synthesize.ts create mode 100644 packages/estimation-engine/src/steps/06-critique.ts create mode 100644 packages/estimation-engine/src/types.ts create mode 100644 packages/estimation-engine/src/validators.ts create mode 100644 packages/estimation-engine/tsconfig.json create mode 100644 packages/page-audit/README.md create mode 100644 packages/page-audit/_debug_vitals.ts create mode 100644 packages/page-audit/src/auditor.ts create mode 100644 packages/page-audit/src/cli.ts create mode 100644 packages/page-audit/src/dataforseo.ts create mode 100644 packages/page-audit/src/index.ts create mode 100644 packages/page-audit/src/report.ts create mode 100644 packages/page-audit/src/types.ts create mode 100644 packages/page-audit/tsconfig.json create mode 100644 packages/pdf-library/src/components/ConceptPDF.tsx create mode 100644 packages/pdf-library/src/components/InfoPDF.tsx create mode 100644 tmp-patch-v3.sh create mode 100644 tmp-patch.sh diff --git a/.env b/.env index 2097c88..b0fb29d 100644 --- a/.env +++ b/.env @@ -4,6 +4,12 @@ PROJECT_NAME=at-mintel PROJECT_COLOR=#82ed20 GITEA_TOKEN=ccce002e30fe16a31a6c9d5a414740af2f72a582 OPENROUTER_API_KEY=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 +ZYTE_API_KEY=1f0f74726f044f55aaafc7ead32cd489 +REPLICATE_API_KEY=r8_W3grtpXMRfi0u3AM9VdkKbuWdZMmhwU2Tn0yt +SERPER_API_KEY=02f69a8db9578c41fb1c8ed9f7a999302da644ff +DATA_FOR_SEO_API_KEY=bWFyY0BtaW50ZWwubWU6MjQ0YjBjZmIzOGY3NTIzZA== +DATA_FOR_SEO_LOGIN=marc@mintel.me +DATA_FOR_SEO_PASSWORD=244b0cfb38f7523d # Authentication GATEKEEPER_PASSWORD=mintel diff --git a/.gitignore b/.gitignore index 9641128..c1ce4b7 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,9 @@ directus/extensions/ packages/cms-infra/extensions/ packages/cms-infra/uploads/ -directus/uploads/directus-health-file \ No newline at end of file +directus/uploads/directus-health-file + +# Estimation Engine Data +data/crawls/ +packages/estimation-engine/out/ +apps/web/out/estimations/ \ No newline at end of file diff --git a/.npmrc b/.npmrc index ea88647..d55cd0a 100644 --- a/.npmrc +++ b/.npmrc @@ -1,6 +1,6 @@ -@mintel:registry=https://npm.infra.mintel.me/ -registry=https://npm.infra.mintel.me/ -//npm.infra.mintel.me/:_authToken=${NPM_TOKEN} +@mintel:registry=https://git.infra.mintel.me/api/packages/mmintel/npm/ +registry=https://git.infra.mintel.me/api/packages/mmintel/npm/ +//git.infra.mintel.me/api/packages/mmintel/npm/:_authToken=${NPM_TOKEN} always-auth=true public-hoist-pattern[]=* diff --git a/data/briefings/etib.txt b/data/briefings/etib.txt new file mode 100644 index 0000000..b5bcfb8 --- /dev/null +++ b/data/briefings/etib.txt @@ -0,0 +1,246 @@ +Hallo Marc, + +eine harte Deadline gibt es nicht – Was denkst du ist realistisch? Ich habe als Ziel so +April / Mai im Kopf -> dann aber schon zu 95 % fertig. Viele Grüße + +Mit freundlichen Grüßen + +Danny Joseph +Geschäftsführer + +E-TIB GmbH +Gewerbestraße 22 +D-03172 Guben + +Mobil +49 15207230518 +E-Mail d.joseph@e-tib.com +Web www.e-tib.com + +-------------------------------------------------------------------------------------------------- + +Hey, + +ich würde wie bei https://www.schleicher-gruppe.de/ ein Video auf der Startseite +haben wollen. Da ginge sicherlich was vom bisherigen Messevideo. Liebe Grüße. + +Mit freundlichen Grüßen + +Danny Joseph +Geschäftsführer + +E-TIB GmbH +Gewerbestraße 22 +D-03172 Guben + +Mobil +49 15207230518 +E-Mail d.joseph@e-tib.com +Web www.e-tib.com + + +-------------------------------------------------------------------------------------------------- +Geschäftsführung: Danny Joseph +Handelsregister: Amtsgericht Cottbus +HRB: 12403 CB +USt. ID-Nr.: DE304799919 +-------------------------------------------------------------------------------------------------- + +Von: Frieder Helmich +Gesendet: Donnerstag, 29. Januar 2026 08:49 +An: Marc Mintel ; Danny Joseph +Betreff: AW: Homepage E-TIB + +Hi Marc, + +brauchst du nur Fotos oder bindest du auch videos ein? Wir haben sehr viel Videomaterial. Wir haben auch einen kleinen Film den wir auf der Messe laufen lassen haben. + +Mit freundlichen Grüßen + +i.A. Frieder Helmich + +E-TIB Ingenieurgesellschaft mbH +Kampstraße 3 +D-27412 Bülstedt + +Tel +49 4283 6979923 +Mobil +49 173 6560514 +Fax +49 4283 6084091 + +E-Mail f.helmich@etib-ing.com +Web www.etib-ing.com + +ETIB_Ing_logo_mk +Datenschutzhinweise: www.etib-ing.com/datenschutz +----------------------------------------------------------------------------------------------- +Geschäftsführung: Julian Helmich +Handelsregister: Amtsgericht Tostedt +HRB: 207158 +----------------------------------------------------------------------------------------------- + +Von: Marc Mintel +Gesendet: Mittwoch, 28. Januar 2026 18:10 +An: Danny Joseph +Cc: Frieder Helmich +Betreff: Re: Homepage E-TIB + +Hallo Danny, + +Vielen Dank für die schnelle Rückmeldung. +Wie gesprochen werde ich mir die Unterlagen und Webseiten im Detail anschauen und mich dann noch einmal bei dir melden. + +Gibt es eigentlich eine Deadline oder einen zeitlichen Rahmen, wo ihr mit der neuen Webseite rechnen möchtet? +Je nach dem könnte man auch Features priorisieren, so dass der Kern der Seite schnellstmöglich modernisiert online geht und der Rest im Nachgang. + +Das Foto-Material würde ich auch gerne sichten, dann kann man schon sehen, wie viel sich damit arbeiten lässt. + +Viele Grüße + + +From: Danny Joseph +Organization: E-TIB GmbH +Date: Wednesday, 28. January 2026 at 16:16 +To: Marc Mintel +Cc: 'Frieder Helmich' +Subject: Homepage E-TIB + +Hallo Marc, + +wie telefonisch besprochen erste wirre Gedanken: + +Wir möchten eine minimalistische, hochwertige Homepage die sowohl am PV, als auch +Auf Smartphone / Tablet etc. vernünftig ausschaut. + +Bisher war unser Aufhänger: +DIE EXPERTEN FÜR KABELTIEFBAU … + +Alles nur Ideen: … + +# Schaltflächen ähnlich: https://www.schleicher-gruppe.de/ + +E-TIB GmbH +E-TIB Verwaltung GmbH +E-TIB Ingenieurgesellschaft mbH +E-TIB Bohrtechnik GmbH + +# Schaltflächen ähnlich: https://www.schleicher-gruppe.de/ +(ehemals Kompetenzen www.e-tib.com) + +Kabelbau +Kabelpflugarbeiten +Horizontalspülbohrungen +Elektromontagen bis 110 kV +Glasfaser-Kabelmontagen +Wartung & Störungsdienst +Genehmigungs- und Ausführungsplanung +Komplexe Querung (Bahn, Autobahn, Gewässer) +Elektro- und Netzanschlussplanung +Vermessung & Dokumentation + +Input für Über uns: Grid … Timeline? +Gründung E-TIB GmbH: 16.12.2015 +Kabelbau +Kabelpflugarbeiten +Horizontalspülbohrungen +Elektromontagen bis 110 kV +Glasfaser-Kabelmontagen +Wartung & Störungsdienst +Elektro- und Netzanschlussplanung +Vermessung & Dokumentation + +Gründung E-TIB Verwaltung GmbH: 14.11.2019 +Der Erwerb, die Vermietung, Verpachtung und Verwaltung +von Immobilien, Grundstücken, Maschinen und Geräten. + +Gründung E-TIB Ingenieurgesellschaft mbH: 04.02.2019 +Genehmigungs- und Ausführungsplanung +Komplexe Querung (Bahn, Autobahn, Gewässer) +Elektro- und Netzanschlussplanung + +Gründung E-TIB Bohrtechnik GmbH: 21.10.2025 +Horizontalspülbohrungen in allen Bodenklassen + +Gruppen‑Kacheln (Beispieltexte) ... + +E‑TIB GmbH – Ausführung elektrischer Infrastrukturprojekte +E‑TIB Bohrtechnik GmbH – Präzise Horizontalbohrungen in allen Bodenklassen +E‑TIB Verwaltung GmbH – Zentrale Dienste, Einkauf, Finanzen +E‑TIB Ingenieurgesellschaft mbH – Planung, Projektierung, Dokumentation + +Kontaktseite siehe: www.e-tib.com + +Karriere: ... + +Messen: wo wir dieses Jahr einen Stand haben: Intersolar München, Windenergietage Linstow, Kabelwerkstatt Wiesbaden + +Referenzen: … müsste ich dir zur Verfügung stellen + +Pflichtseiten +Impressum (vollständig, Verantwortliche, Registernummer, USt‑ID). +Datenschutz (Verarbeitungen, Rechtsgrundlagen, AVV, Cookie‑Gruppen, Löschfristen, Rechte). +Cookie‑Einstellungen (Consent Manager: ...) + +www.e-tib.com +www.etib-ing.com + +Hier mein instagram account: +me.and.eloise +Verstehst du mich vielleicht ein kleines Stück mehr… + +Unser Frieder Helmich kann erstes Foto-/Videomaterial zur Verfügung stellen: +f.helmich@etib-ing.com + +Lass mir mal eine Idee vom Stundenaufwand / Kosten pro Stunde für Erstellung zukommen, +damit wir eine Vertragsgrundlage haben. Danach lass uns loslegen. + +Besten Dank dir. + +Mit freundlichen Grüßen + +Danny Joseph +Geschäftsführer + +E-TIB GmbH +Gewerbestraße 22 +D-03172 Guben + +Mobil +49 15207230518 +E-Mail d.joseph@e-tib.com +Web www.e-tib.com + + +-------------------------------------------------------------------------------------------------- +Geschäftsführung: Danny Joseph +Handelsregister: Amtsgericht Cottbus +HRB: 12403 CB +USt. ID-Nr.: DE304799919 +-------------------------------------------------------------------------------------------------- + +Von: Marc Mintel +Gesendet: Donnerstag, 13. November 2025 16:30 +An: d.joseph@e-tib.com +Betreff: Homepage + +Hi Danny, + +mein Vater meinte, ich könnte mich mal bei dir melden, weil ihr jemanden für eure Website sucht. + +Kurz zu mir: Ich habe über 10 Jahre in der Webentwicklung gearbeitet. Inzwischen liegt mein Schwerpunkt zwar im 3D-Bereich (u. a. cablecreations.de), aber ich betreue weiterhin Websites für Firmen, die das Ganze unkompliziert abgegeben haben möchten. Unter anderem betreue ich auch die Seite von KLZ (klz-cables.com). Der Ablauf ist bei mir recht einfach: Wenn ihr etwas braucht, reicht in der Regel eine kurze Mail – Anpassungen, Inhalte oder technische Themen erledige ich dann im Hintergrund. Dadurch spart ihr euch Schulungen, Zugänge oder lange Meetings, wie man sie oft mit Agenturen hat. + +Wichtig ist: Eine Website braucht auch nach dem Aufbau regelmäßige Pflege, damit Technik und Sicherheit sauber laufen – das übernehme ich dann ebenfalls, damit ihr im Alltag keinen Aufwand damit habt. + +Um einschätzen zu können, ob und wie ich euch unterstützen kann, wäre es gut zu wissen, was ihr mit der Website vorhabt und was an der aktuellen Seite nicht mehr passt. Wenn du magst, können wir dazu auch kurz telefonieren. + +Viele Grüße +Marc + +Marc Mintel +Founder & 3D Artist +marc@cablecreations.de + +Cable Creations +www.cablecreations.de +info@cablecreations.de +VAT: DE367588065 + +Georg-Meistermann-Straße 7 +54586 Schüller +Germany diff --git a/packages/cli/package.json b/packages/cli/package.json index bb1d9b2..0e57f63 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,7 +3,7 @@ "version": "1.8.21", "publishConfig": { "access": "public", - "registry": "https://npm.infra.mintel.me" + "registry": "https://git.infra.mintel.me/api/packages/mmintel/npm" }, "type": "module", "bin": { diff --git a/packages/concept-engine/src/_test_pipeline.ts b/packages/concept-engine/src/_test_pipeline.ts new file mode 100644 index 0000000..07a6b1e --- /dev/null +++ b/packages/concept-engine/src/_test_pipeline.ts @@ -0,0 +1,40 @@ +import { config as dotenvConfig } from 'dotenv'; +import * as path from 'node:path'; +import * as fs from 'node:fs/promises'; +import { EstimationPipeline } from './pipeline.js'; + +dotenvConfig({ path: path.resolve(process.cwd(), '../../.env') }); + +const briefing = await fs.readFile( + path.resolve(process.cwd(), '../../data/briefings/etib.txt'), + 'utf8', +); + +console.log(`Briefing loaded: ${briefing.length} chars`); + +const pipeline = new EstimationPipeline( + { + openrouterKey: process.env.OPENROUTER_API_KEY || '', + zyteApiKey: process.env.ZYTE_API_KEY, + outputDir: path.resolve(process.cwd(), '../../out/estimations'), + crawlDir: path.resolve(process.cwd(), '../../data/crawls'), + }, + { + onStepStart: (id, name) => console.log(`[CB] Starting: ${id}`), + onStepComplete: (id) => console.log(`[CB] Done: ${id}`), + onStepError: (id, err) => console.error(`[CB] Error in ${id}: ${err}`), + }, +); + +try { + const result = await pipeline.run({ + briefing, + url: 'https://www.e-tib.com', + }); + + console.log('\n✨ Pipeline complete!'); + console.log('Validation:', result.validationResult?.passed ? 'PASSED' : 'FAILED'); +} catch (err: any) { + console.error('\n❌ Pipeline failed:', err.message); + console.error(err.stack); +} diff --git a/packages/concept-engine/src/analyzer.ts b/packages/concept-engine/src/analyzer.ts new file mode 100644 index 0000000..dc98009 --- /dev/null +++ b/packages/concept-engine/src/analyzer.ts @@ -0,0 +1,334 @@ +// ============================================================================ +// Analyzer — Deterministic Site Analysis (NO LLM!) +// Builds a SiteProfile from crawled pages using pure code logic. +// This is the core fix against hallucinated page structures. +// ============================================================================ + +import type { + CrawledPage, + SiteProfile, + NavItem, + CompanyInfo, + PageInventoryItem, +} from "./types.js"; + +/** + * Build a complete SiteProfile from an array of crawled pages. + * This is 100% deterministic — no LLM calls involved. + */ +export function analyzeSite(pages: CrawledPage[], domain: string): SiteProfile { + const navigation = extractNavigation(pages); + const existingFeatures = extractExistingFeatures(pages); + const services = extractAllServices(pages); + const companyInfo = extractCompanyInfo(pages); + const colors = extractColors(pages); + const socialLinks = extractSocialLinks(pages); + const externalDomains = extractExternalDomains(pages, domain); + const images = extractAllImages(pages); + const employeeCount = extractEmployeeCount(pages); + const pageInventory = buildPageInventory(pages); + + return { + domain, + crawledAt: new Date().toISOString(), + totalPages: pages.filter((p) => p.type !== "legal").length, + navigation, + existingFeatures, + services, + companyInfo, + pageInventory, + colors, + socialLinks, + externalDomains, + images, + employeeCount, + }; +} + +/** + * Extract the site's main navigation structure from