Compare commits
10 Commits
821a35f0fc
...
226de83d0f
| Author | SHA1 | Date | |
|---|---|---|---|
| 226de83d0f | |||
| ce421eb8d2 | |||
| 38f2b871b9 | |||
| 3e70b00abc | |||
| 788c7aa7df | |||
| 9751d2f61f | |||
| 083be92c5b | |||
| aa4374a664 | |||
| 6e6f4fe3d7 | |||
| badb7b6141 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -40,3 +40,8 @@ pnpm-debug.log*
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# local cache & data
|
||||
.cache/
|
||||
cloned-websites/
|
||||
storage/
|
||||
|
||||
16
README.md
16
README.md
@@ -87,4 +87,18 @@ npm run video:preview
|
||||
# Render the showcase video
|
||||
npm run video:render
|
||||
```
|
||||
See `.agent/workflows/video-toolkit.md` for more details.
|
||||
See `.agent/workflows/video-toolkit.md` for more details.
|
||||
|
||||
## 🤖 Industrial AI Estimation System
|
||||
A multi-pass AI consultation engine for generating technical project estimations and professional PDFs.
|
||||
|
||||
- **Context-Aware**: Crawls existing customer websites to understand company DNA.
|
||||
- **Industrial Standards**: Strictly follows "Industrial Engineering" aesthetics and technical wording.
|
||||
- **Transparent**: Maps scope directly to a modular pricing model.
|
||||
|
||||
### Quick Start
|
||||
```bash
|
||||
# Generate estimation with website crawl
|
||||
npm run ai-estimate -- "Project Briefing" --url https://example.com
|
||||
```
|
||||
See [ESTIMATION_GUIDE.md](docs/ESTIMATION_GUIDE.md) for full documentation.
|
||||
File diff suppressed because one or more lines are too long
@@ -209,7 +209,7 @@ export default function KLZCablesCaseStudy() {
|
||||
transition={{ type: "spring", stiffness: 200, damping: 20 }}
|
||||
>
|
||||
<IframeSection
|
||||
src="/showcase/klz-cables/index.html"
|
||||
src="/showcase/klz-cables.com/index.html"
|
||||
height="850px"
|
||||
desktopWidth={1920}
|
||||
allowScroll
|
||||
@@ -252,7 +252,7 @@ export default function KLZCablesCaseStudy() {
|
||||
>
|
||||
<div className="relative w-full overflow-visible">
|
||||
<IframeSection
|
||||
src="/showcase/klz-cables/products-power-cables-medium-voltage-cables-n2xsf2y.html"
|
||||
src="/showcase/klz-cables.com/power-cables-medium-voltage-cables.html"
|
||||
height="1000px"
|
||||
desktopWidth={1920}
|
||||
allowScroll
|
||||
@@ -290,7 +290,7 @@ export default function KLZCablesCaseStudy() {
|
||||
className="relative h-[650px] w-full overflow-visible group"
|
||||
>
|
||||
<IframeSection
|
||||
src="/showcase/klz-cables/power-cables.html"
|
||||
src="/showcase/klz-cables.com/which-cables-for-wind-power-differences-from-low-to-extra-high-voltage-explained-2.html"
|
||||
height="100%"
|
||||
desktopWidth={1920}
|
||||
allowScroll
|
||||
@@ -321,9 +321,50 @@ export default function KLZCablesCaseStudy() {
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
{/* --- SECTION 04: TEAM & TRUST --- */}
|
||||
{/* --- SECTION 04: CONTENT ENGINE --- */}
|
||||
<Section
|
||||
number="04"
|
||||
title="Content Strategy"
|
||||
variant="white"
|
||||
borderBottom
|
||||
containerVariant="wide"
|
||||
>
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-16 items-center">
|
||||
<div className="lg:col-span-4 space-y-10 order-2 lg:order-1">
|
||||
<Reveal direction="left" blur>
|
||||
<div className="space-y-6">
|
||||
<Label className="text-slate-400">Knowledge Transfer</Label>
|
||||
<H3 className="text-4xl md:text-6xl tracking-tighter">Insights & News.</H3>
|
||||
<BodyText className="text-xl text-slate-500 font-serif italic">
|
||||
Die News-Engine dient als technischer Hub für Industrie-Standards. Durch die Implementierung eines performanten Blog-Systems wird Fachwissen direkt an die Zielgruppe kommuniziert.
|
||||
</BodyText>
|
||||
</div>
|
||||
</Reveal>
|
||||
</div>
|
||||
<div className="lg:col-span-8 order-1 lg:order-2">
|
||||
<Reveal width="100%" direction="right" scale={0.98} blur>
|
||||
<motion.div
|
||||
whileHover={{ scale: 1.01 }}
|
||||
transition={{ type: "spring", stiffness: 200, damping: 20 }}
|
||||
className="relative h-[700px] w-full"
|
||||
>
|
||||
<IframeSection
|
||||
src="/showcase/klz-cables.com/blog.html"
|
||||
height="100%"
|
||||
desktopWidth={1600}
|
||||
allowScroll
|
||||
browserFrame
|
||||
className="h-full w-full no-scrollbar"
|
||||
/>
|
||||
</motion.div>
|
||||
</Reveal>
|
||||
</div>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
{/* --- SECTION 05: TEAM & TRUST --- */}
|
||||
<Section
|
||||
number="05"
|
||||
title="Ergebnis"
|
||||
borderBottom
|
||||
containerVariant="wide"
|
||||
@@ -340,7 +381,7 @@ export default function KLZCablesCaseStudy() {
|
||||
<div className="relative group w-full text-left">
|
||||
<div className="relative block w-full overflow-visible">
|
||||
<IframeSection
|
||||
src="/showcase/klz-cables/team.html"
|
||||
src="/showcase/klz-cables.com/team.html"
|
||||
height="1100px"
|
||||
desktopWidth={1440}
|
||||
allowScroll
|
||||
@@ -353,6 +394,46 @@ export default function KLZCablesCaseStudy() {
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
{/* --- SECTION 06: CONVERSION --- */}
|
||||
<Section
|
||||
number="06"
|
||||
title="Lead Engineering"
|
||||
variant="white"
|
||||
containerVariant="wide"
|
||||
>
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-16 items-center">
|
||||
<div className="lg:col-span-7">
|
||||
<Reveal direction="left" scale={0.98} blur>
|
||||
<motion.div
|
||||
whileHover={{ scale: 1.01 }}
|
||||
transition={{ type: "spring", stiffness: 200, damping: 20 }}
|
||||
className="relative h-[800px] w-full"
|
||||
>
|
||||
<IframeSection
|
||||
src="/showcase/klz-cables.com/contact.html"
|
||||
height="100%"
|
||||
desktopWidth={1200}
|
||||
allowScroll
|
||||
browserFrame
|
||||
className="h-full w-full no-scrollbar"
|
||||
/>
|
||||
</motion.div>
|
||||
</Reveal>
|
||||
</div>
|
||||
<div className="lg:col-span-5 space-y-10">
|
||||
<Reveal direction="right" blur>
|
||||
<div className="space-y-6">
|
||||
<Label className="text-slate-400">Conversion Layer</Label>
|
||||
<H3 className="text-4xl md:text-6xl tracking-tighter">Direkter Draht.</H3>
|
||||
<BodyText className="text-xl text-slate-500 font-serif italic">
|
||||
Das Kontakt-System wurde auf maximale Reduktion getrimmt. Keine unnötigen Hürden, sondern ein direkter Kommunikations-Kanal zwischen technischem Bedarf und individueller Beratung.
|
||||
</BodyText>
|
||||
</div>
|
||||
</Reveal>
|
||||
</div>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
{/* --- FINAL CTA: ARCHITECTURE & VALUE --- */}
|
||||
<section className="py-40 md:py-64 bg-white relative overflow-hidden border-t border-slate-100">
|
||||
<BackgroundGrid />
|
||||
|
||||
246
data/briefings/etib.txt
Normal file
246
data/briefings/etib.txt
Normal file
@@ -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 <f.helmich@etib-ing.com>
|
||||
Gesendet: Donnerstag, 29. Januar 2026 08:49
|
||||
An: Marc Mintel <marc@cablecreations.de>; Danny Joseph <d.joseph@e-tib.com>
|
||||
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 <marc@cablecreations.de>
|
||||
Gesendet: Mittwoch, 28. Januar 2026 18:10
|
||||
An: Danny Joseph <d.joseph@e-tib.com>
|
||||
Cc: Frieder Helmich <f.helmich@etib-ing.com>
|
||||
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 <d.joseph@e-tib.com>
|
||||
Organization: E-TIB GmbH
|
||||
Date: Wednesday, 28. January 2026 at 16:16
|
||||
To: Marc Mintel <marc@cablecreations.de>
|
||||
Cc: 'Frieder Helmich' <f.helmich@etib-ing.com>
|
||||
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 <marc@cablecreations.de>
|
||||
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
|
||||
73
docs/AUTOMATION.md
Normal file
73
docs/AUTOMATION.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# Routine Automation
|
||||
*Kleine Helfer, die den Alltag deutlich entlasten*
|
||||
|
||||
In vielen mittelständischen Unternehmen fressen wiederkehrende Aufgaben Monat für Monat unzählige Stunden:
|
||||
- Daten aus Dokumenten abtippen
|
||||
- Formulare von Hand ausfüllen
|
||||
- Angebote, Berichte oder Bestätigungen manuell anpassen
|
||||
- Eingehende Anfragen immer wieder neu prüfen und bearbeiten
|
||||
|
||||
Das ist keine wertschöpfende Arbeit.
|
||||
Das ist Routine, die teuer ist, Fehler produziert und gute Mitarbeiter davon abhält, sich um das zu kümmern, was wirklich Umsatz bringt.
|
||||
|
||||
Ich baue genau für diese Routine **einfache, maßgeschneiderte Helfer** – meist mit PDF- oder Excel-Ausgabe, Konfiguratoren oder KI-Dokumenten-Einlesen.
|
||||
Einmal eingerichtet, laufen sie leise im Hintergrund.
|
||||
Kein großes Projekt. Kein monatliches Tool-Abo. Kein „lernen Sie das neue System“.
|
||||
|
||||
### Was das konkret bringen kann – Beispiele aus der Praxis
|
||||
|
||||
- **Schnelle Dokumentenerstellung (PDF-Generatoren)**
|
||||
Kurze Eingaben (Formular, Mail, Excel-Zeile) → fertiges PDF raus: Angebote, Berichte, Protokolle, Bestätigungen, Übersichten. Immer Ihr Corporate Design, immer aktuelle Daten/Bausteine.
|
||||
→ Von 30–120 Minuten runter auf 2–10 Minuten.
|
||||
|
||||
- **Excel-Automatisierungen & smarte Tabellen**
|
||||
Verkaufszahlen, Lagerbestände, Kundenlisten → automatische Berechnungen, Zusammenfassungen, Prognosen oder Exporte. Monatsberichte oder Preislisten aktualisieren sich von selbst.
|
||||
→ Kein ständiges Nachrechnen mehr, keine Versionskonflikte.
|
||||
|
||||
- **Konfiguratoren für Anfragen & Schätzungen**
|
||||
Kunde oder Mitarbeiter geht schrittweise durch ein Formular (auf Ihrer Website oder intern): „Welche Leistung? Welcher Umfang? Welcher Termin?“ → sofort realistische Schätzung, Preisspanne oder fertiges Angebot als PDF/Excel.
|
||||
|
||||
- **KI-Einlesen von PDFs oder handschriftlichen Dokumenten**
|
||||
Eingescannte Rechnungen, Lieferscheine, Formulare, Notizen oder handgeschriebene Protokolle → KI liest Text, Zahlen, Felder aus (auch Handschrift, wo lesbar) → Daten landen in übersichtlicher Tabelle/Excel oder vorausgefülltem Formular.
|
||||
Mitarbeiter prüft nur noch kurz → kleine Korrektur → Prozess geht weiter.
|
||||
→ Kein stundenlanges Abtippen mehr, deutlich schnellerer Durchlauf.
|
||||
|
||||
### Der echte Wert für Sie
|
||||
|
||||
- 30–80 % weniger Zeit bei Routineaufgaben → Ihre Teams konzentrieren sich aufs Wesentliche
|
||||
- Weniger Fehler & Rückfragen → einheitlicher, professioneller Output
|
||||
- Schnellere Reaktion auf Kunden → Konfiguratoren & KI-Einlesen liefern sofort Infos
|
||||
- Amortisation oft schon nach wenigen Wochen oder Dutzend Nutzungen
|
||||
- Nutzt, was Sie bereits haben: Website, Excel, Mail, Scanner-App
|
||||
|
||||
### Was ich **nicht** mache
|
||||
|
||||
Ich ersetze **kein** ERP, CRM, Buchhaltungs- oder HR-System.
|
||||
Kein automatisches Buchen, keine Finanzamtschnittstelle, keine GoBD-Archivierungspflichten.
|
||||
Nur smarte Abkürzungen bei Routine – der Rest bleibt in Ihren bewährten Tools.
|
||||
|
||||
### Ich kann Ihnen helfen, wenn Sie mit diesen typischen Problemen kämpfen
|
||||
|
||||
- „Wir tippen immer noch Daten aus gescannten Dokumenten oder handschriftlichen Notizen ab.“
|
||||
- „Angebote, Berichte oder Protokolle dauern ewig, weil alles von Hand angepasst wird.“
|
||||
- „Kunden fragen ständig dasselbe – wir antworten jedes Mal manuell.“
|
||||
- „Excel-Tabellen und Berechnungen werden ständig neu gemacht und gehen kaputt.“
|
||||
- „Bis wir eine realistische Schätzung oder ein Angebot raus haben, vergeht zu viel Zeit.“
|
||||
|
||||
Schreiben Sie mir einfach einen kurzen Satz zu Ihrem größten Zeitfresser in diesem Bereich.
|
||||
Ich antworte meist innerhalb von 1–2 Tagen:
|
||||
- Ist das machbar? Ja/Nein
|
||||
- Ca. wie viel Aufwand (meist 3–15 Stunden) & Preisrahmen
|
||||
- Was Sie realistisch sparen können (Zeit, Nerven, Fehler)
|
||||
|
||||
Passt es → baue ich es.
|
||||
Danach: Routine digitalisiert. Mehr Ruhe im Alltag.
|
||||
|
||||
**Kurz gesagt**
|
||||
Routine Automation:
|
||||
Nicht die große Revolution.
|
||||
Sondern gezielte Entlastung bei den Dingen, die jeden Tag Zeit und Nerven kosten.
|
||||
Mehr Zeit. Weniger Frust. Besserer Output.
|
||||
Und das Gefühl: „Das läuft jetzt einfach.“
|
||||
|
||||
Wenn bei Ihnen gerade etwas „von Hand gemacht wird“ oder „ewig dauert“ – Ich sage Ihnen, ob und wie schnell man das sinnvoll digitalisieren kann.
|
||||
83
docs/ESTIMATION_GUIDE.md
Normal file
83
docs/ESTIMATION_GUIDE.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# Service Estimation & AI Consultation Guide
|
||||
|
||||
This guide explains how to use the automated estimation system to generate professional PDF quotes for clients using AI-driven context analysis.
|
||||
|
||||
## 🛠 Basic Usage
|
||||
|
||||
The primary entry point is the `ai-estimate` script. It orchestrates a 6-pass AI consultation:
|
||||
1. **Fact Extraction**: Identifying company data and project scope.
|
||||
2. **Feature Deep-Dive**: Generating technical justifications for items.
|
||||
3. **Strategic Content**: Creating the Briefing Analysis and Strategic Vision.
|
||||
4. **Information Architecture**: Designing a hierarchical sitemap.
|
||||
5. **Position Synthesis**: Mapping everything to a transparent pricing model.
|
||||
6. **Industrial Critic**: Final quality gate for tone and accuracy.
|
||||
|
||||
### Generating an Estimation from Scratch
|
||||
|
||||
#### 1. With a Website URL (Recommended)
|
||||
Providing a URL allows the system to crawl the existing site to understand the "Company DNA" and services.
|
||||
```bash
|
||||
npm run ai-estimate -- "Relaunch der Website mit Fokus auf B2B Leads" --url https://example.com
|
||||
```
|
||||
|
||||
#### 2. From a Text File
|
||||
If you have a long briefing in a `.txt` file:
|
||||
```bash
|
||||
npm run ai-estimate -- @briefing.txt --url https://example.com
|
||||
```
|
||||
|
||||
#### 3. Text-Only (No URL)
|
||||
If no URL is provided, the system relies entirely on your briefing text.
|
||||
```bash
|
||||
npm run ai-estimate -- "Neuentwicklung eines Portals für XYZ"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📄 Output Modes
|
||||
|
||||
The system can generate two types of documents:
|
||||
|
||||
### 1. Full Quote (Default)
|
||||
Includes everything: Front Page, Briefing Analysis, Vision, Sitemap, Technical Principles, Detailed Pricing, Roadmap, and Legal Terms (AGB).
|
||||
```bash
|
||||
npm run ai-estimate -- "Project Briefing"
|
||||
```
|
||||
|
||||
### 2. Estimation Only
|
||||
A condensed version excluding legal terms and deep technical principles. Focuses purely on the strategic fit and the price.
|
||||
```bash
|
||||
npm run ai-estimate -- "Project Briefing" --estimation
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 Cache & Cache Management
|
||||
|
||||
To save costs and time, all AI responses and crawl results are cached in the `.cache` directory.
|
||||
|
||||
### Regenerating with Cached Data
|
||||
If you run the same command again (identical briefing and URL), the system will use the cached results and won't call the AI APIs again. This is useful if you want to tweak the PDF layout without spending tokens.
|
||||
|
||||
### Forcing a Refresh
|
||||
To ignore the cache and get a fresh AI consultation:
|
||||
```bash
|
||||
npm run ai-estimate -- "Project Briefing" --clear-cache
|
||||
```
|
||||
|
||||
### Manual Tweaking (JSON State)
|
||||
Every run saves a detailed state to `out/estimations/json/[Company]_[Timestamp].json`.
|
||||
If you want to manually edit the AI's results (e.g., fix a typo in the sitemap or description), you can edit this JSON file and then regenerate the PDF from it:
|
||||
|
||||
```bash
|
||||
npm run ai-estimate -- --json out/estimations/json/Your_Project.json
|
||||
```
|
||||
*(Add `--estimation` if you want the condensed version).*
|
||||
|
||||
---
|
||||
|
||||
## 💡 Advanced Options
|
||||
|
||||
- `--comments "..."`: Add manual notes that the AI should consider (e.g., "Customer prefers a minimalist blue theme").
|
||||
- `--clear-cache`: Purges all cached data for this project before starting.
|
||||
- `--url [URL]`: Explicitly sets the crawl target (auto-discovered from briefing if omitted).
|
||||
@@ -12,6 +12,7 @@ Die Grundlage für jede Website:
|
||||
• Grundstruktur & Design-Vorlage
|
||||
• technisches SEO-Basics
|
||||
• Analytics (mit automatischem Mail-Report)
|
||||
• Testing, Staging, Production Umgebung
|
||||
• Livegang
|
||||
|
||||
Enthält keine Seiten, Inhalte oder Funktionen.
|
||||
@@ -125,7 +126,7 @@ Datensatz anpassen
|
||||
|
||||
Hosting & Betrieb
|
||||
|
||||
120 € / Monat
|
||||
12 Monate = 1440 €
|
||||
|
||||
Sichert:
|
||||
• Webhosting & Verfügbarkeit
|
||||
|
||||
43
docs/PRINCIPLES.md
Normal file
43
docs/PRINCIPLES.md
Normal file
@@ -0,0 +1,43 @@
|
||||
Prinzipien
|
||||
|
||||
Ich arbeite nach klaren Grundsätzen, die sicherstellen, dass meine Kunden fair, transparent und langfristig profitieren.
|
||||
|
||||
⸻
|
||||
|
||||
1. Volle Preis-Transparenz
|
||||
Alle Kosten sind offen und nachvollziehbar.
|
||||
Es gibt keine versteckten Gebühren, keine Abos, keine Lock-ins.
|
||||
Jeder Kunde sieht genau, wofür er bezahlt.
|
||||
|
||||
⸻
|
||||
|
||||
2. Quellcode & Projektzugang
|
||||
Auf Wunsch erhalten Kunden jederzeit den vollständigen Source Code und eine nachvollziehbare Struktur.
|
||||
Damit kann jeder andere Entwickler problemlos weiterarbeiten.
|
||||
Niemand kann später behaupten, der Code sei „Messy“ oder unbrauchbar.
|
||||
|
||||
⸻
|
||||
|
||||
3. Best Practices & saubere Technik
|
||||
Ich setze konsequent bewährte Standards und dokumentierte Abläufe ein.
|
||||
Das sorgt dafür, dass Systeme wartbar, verständlich und erweiterbar bleiben – langfristig.
|
||||
|
||||
⸻
|
||||
|
||||
4. Verantwortung & Fairness
|
||||
Ich übernehme die technische Verantwortung für die Website.
|
||||
Ich garantiere keine Umsätze, Rankings oder rechtliche Ergebnisse – nur saubere Umsetzung und stabile Systeme.
|
||||
Wenn etwas nicht sinnvoll ist, sage ich es ehrlich.
|
||||
|
||||
⸻
|
||||
|
||||
5. Langfristiger Wert
|
||||
Eine Website ist ein Investment.
|
||||
Ich baue sie so, dass Anpassungen, Erweiterungen und Übergaben an andere Entwickler problemlos möglich sind.
|
||||
Das schützt Ihre Investition und vermeidet teure Neuaufbauten.
|
||||
|
||||
⸻
|
||||
|
||||
6. Zusammenarbeit ohne Tricks
|
||||
Keine künstlichen Deadlines, kein unnötiger Overhead.
|
||||
Kommunikation ist klar, Entscheidungen nachvollziehbar, Übergaben sauber dokumentiert.
|
||||
98
docs/TECH.md
Normal file
98
docs/TECH.md
Normal file
@@ -0,0 +1,98 @@
|
||||
Wie ich Websites technisch umsetze
|
||||
|
||||
Ich entwickle Websites als moderne, performante Websysteme – nicht als Baukasten-Seiten und nicht als schwer wartbare CMS-Konstrukte.
|
||||
Der Fokus liegt auf Geschwindigkeit, Stabilität, Datenschutz und langfristiger Wartbarkeit.
|
||||
|
||||
Die Technik dient dabei immer einem Zweck:
|
||||
Ihre Website soll zuverlässig funktionieren, schnell laden und kein laufendes Risiko darstellen.
|
||||
|
||||
⸻
|
||||
|
||||
Geschwindigkeit & Performance
|
||||
|
||||
Meine Websites sind so aufgebaut, dass Inhalte extrem schnell ausgeliefert werden – unabhängig davon, ob ein Besucher am Desktop oder mobil unterwegs ist.
|
||||
|
||||
Das bedeutet für Sie:
|
||||
• kurze Ladezeiten
|
||||
• bessere Nutzererfahrung
|
||||
• messbar bessere Werte bei Google PageSpeed & Core Web Vitals
|
||||
• geringere Absprungraten
|
||||
|
||||
Die Seiten werden nicht „zusammengeklickt“, sondern technisch optimiert ausgeliefert.
|
||||
|
||||
⸻
|
||||
|
||||
Responsives Design (ohne Kompromisse)
|
||||
|
||||
Jede Website ist von Grund auf responsiv.
|
||||
Layout, Inhalte und Funktionen passen sich automatisch an:
|
||||
• Smartphones
|
||||
• Tablets
|
||||
• Laptops
|
||||
• große Bildschirme
|
||||
|
||||
Dabei wird nicht einfach skaliert, sondern gezielt für unterschiedliche Bildschirmgrößen optimiert.
|
||||
Das Ergebnis ist eine saubere Darstellung und gute Bedienbarkeit auf allen Geräten.
|
||||
|
||||
⸻
|
||||
|
||||
Stabilität & Betriebssicherheit
|
||||
|
||||
Im Hintergrund laufen Überwachungs- und Kontrollmechanismen, die technische Probleme automatisch erkennen.
|
||||
|
||||
Für Sie heißt das:
|
||||
• Fehler werden bemerkt, auch wenn niemand sie meldet
|
||||
• ich werde aktiv informiert, statt erst zu reagieren, wenn etwas kaputt ist
|
||||
• Probleme können frühzeitig behoben werden
|
||||
|
||||
Das reduziert Ausfälle und vermeidet unangenehme Überraschungen.
|
||||
|
||||
⸻
|
||||
|
||||
Datenschutz & DSGVO
|
||||
|
||||
Ich setze konsequent auf freie, selbst betriebene Software statt auf große externe Plattformen.
|
||||
|
||||
Ihre Vorteile:
|
||||
• keine Weitergabe von Nutzerdaten an Dritte
|
||||
• keine versteckten Tracker
|
||||
• keine Abhängigkeit von US-Anbietern
|
||||
• datenschutzfreundliche Statistik ohne Cookies
|
||||
|
||||
Die Website bleibt technisch schlank und rechtlich kontrollierbar.
|
||||
|
||||
⸻
|
||||
|
||||
Unabhängigkeit & Kostenkontrolle
|
||||
|
||||
Da ich keine proprietären Systeme oder Lizenzmodelle einsetze:
|
||||
• entstehen keine laufenden Tool-Gebühren
|
||||
• gibt es keine plötzlichen Preiserhöhungen
|
||||
• bleibt die Website langfristig planbar betreibbar
|
||||
|
||||
Sie zahlen für die Leistung – nicht für Lizenzen oder Marken.
|
||||
|
||||
⸻
|
||||
|
||||
Wartbarkeit & Erweiterbarkeit
|
||||
|
||||
Die technische Struktur ist so aufgebaut, dass:
|
||||
• Inhalte erweitert werden können
|
||||
• Funktionen sauber ergänzt werden können
|
||||
• Anpassungen nicht das ganze System gefährden
|
||||
|
||||
Das schützt Ihre Investition und verhindert teure Neuaufbauten nach kurzer Zeit.
|
||||
|
||||
⸻
|
||||
|
||||
Kurz gesagt
|
||||
|
||||
Ich baue Websites, die:
|
||||
• schnell sind
|
||||
• auf allen Geräten sauber funktionieren
|
||||
• datenschutzkonform betrieben werden
|
||||
• technisch überwacht sind
|
||||
• langfristig wartbar bleiben
|
||||
|
||||
Die Technik steht nicht im Vordergrund –
|
||||
aber sie sorgt dafür, dass Ihre Website zuverlässig ihren Zweck erfüllt.
|
||||
42
docs/TONE.md
Normal file
42
docs/TONE.md
Normal file
@@ -0,0 +1,42 @@
|
||||
Ton & Haltung in der Kommunikation
|
||||
|
||||
Dieses Dokument beschreibt die verbindlichen Prinzipien, nach denen ich mit Kunden kommuniziere – schriftlich wie mündlich, auf der Website wie im Projektalltag.
|
||||
|
||||
1. Klarheit vor Höflichkeit
|
||||
|
||||
Ich kommuniziere klar, direkt und verständlich.
|
||||
Unklare Formulierungen, Marketingfloskeln oder beschwichtigende Aussagen werden vermieden.
|
||||
Lieber eine ehrliche, präzise Aussage als eine „freundliche“ Unverbindlichkeit.
|
||||
|
||||
2. Ehrlichkeit ohne Verkaufsdruck
|
||||
|
||||
Ich verspreche nichts, was ich nicht sicher einhalten kann.
|
||||
Grenzen, Risiken und Unsicherheiten werden offen benannt.
|
||||
Es gibt keine künstliche Dringlichkeit, kein Upselling aus Prinzip und keine verdeckten Interessen.
|
||||
|
||||
3. Sachlich, ruhig, professionell
|
||||
|
||||
Die Kommunikation bleibt sachlich und respektvoll – auch bei Kritik, Verzögerungen oder Meinungsverschiedenheiten.
|
||||
Emotionale Eskalation, Schuldzuweisungen oder Rechtfertigungsschleifen werden vermieden.
|
||||
|
||||
4. Verantwortung statt Ausreden
|
||||
|
||||
Probleme werden benannt, nicht relativiert.
|
||||
Wenn etwas nicht funktioniert, wird erklärt warum – und wie damit umgegangen wird.
|
||||
Ich übernehme Verantwortung für meine Arbeit, nicht für äußere Faktoren außerhalb meines Einflusses.
|
||||
|
||||
5. Transparenz statt Fachchinesisch
|
||||
|
||||
Komplexe Sachverhalte werden verständlich erklärt, ohne künstliche Vereinfachung oder Herablassung.
|
||||
Fachbegriffe werden nur verwendet, wenn sie notwendig sind.
|
||||
Wissen dient der Orientierung des Kunden, nicht der Selbstdarstellung.
|
||||
|
||||
6. Gleichbehandlung aller Kunden
|
||||
|
||||
Alle Kunden werden gleich behandelt – unabhängig von Projektgröße, Budget oder Laufzeit.
|
||||
Es gibt keine versteckten Prioritäten, Sonderregeln oder impliziten Erwartungshaltungen.
|
||||
|
||||
7. Langfristige Perspektive
|
||||
|
||||
Die Kommunikation ist auf nachhaltige Zusammenarbeit ausgelegt, nicht auf kurzfristige Zustimmung.
|
||||
Entscheidungen und Empfehlungen orientieren sich am langfristigen Nutzen des Kunden.
|
||||
56
docs/WORDING.md
Normal file
56
docs/WORDING.md
Normal file
@@ -0,0 +1,56 @@
|
||||
1. Aktiv statt passiv
|
||||
|
||||
Sätze werden aktiv formuliert.
|
||||
Keine unpersönlichen Konstruktionen, kein „es wird“, „man sollte“, „könnte“.
|
||||
|
||||
2. Kurz und eindeutig
|
||||
|
||||
Sätze sind so kurz wie möglich, so lang wie nötig.
|
||||
Ein Gedanke pro Satz. Keine Schachtelsätze.
|
||||
|
||||
3. Keine Weichmacher
|
||||
|
||||
Keine Wörter wie:
|
||||
• eventuell
|
||||
• möglicherweise
|
||||
• grundsätzlich
|
||||
• in der Regel
|
||||
• normalerweise
|
||||
|
||||
Wenn etwas gilt, wird es gesagt. Wenn nicht, wird es ausgeschlossen.
|
||||
|
||||
4. Keine Marketingbegriffe
|
||||
|
||||
Keine Buzzwords, Superlative oder leeren Versprechen.
|
||||
Keine emotional aufgeladenen Begriffe. Keine Werbesprache.
|
||||
|
||||
5. Konkrete Aussagen
|
||||
|
||||
Keine abstrakten Formulierungen.
|
||||
Aussagen beziehen sich auf konkrete Ergebnisse, Zustände oder Abläufe.
|
||||
|
||||
6. Ich-Form
|
||||
|
||||
Kommunikation erfolgt konsequent in der Ich-Form.
|
||||
Kein „wir“, kein „unser Team“, keine künstliche Vergrößerung.
|
||||
|
||||
7. Keine Rechtfertigungen
|
||||
|
||||
Keine erklärenden Absicherungen im Satz.
|
||||
Aussagen stehen für sich und werden nicht relativiert.
|
||||
|
||||
8. Neutraler Ton
|
||||
|
||||
Keine Umgangssprache.
|
||||
Keine Ironie.
|
||||
Keine Emojis.
|
||||
|
||||
9. Verbindliche Sprache
|
||||
|
||||
Keine offenen Enden ohne Grund.
|
||||
Wenn etwas nicht garantiert wird, wird das klar benannt – ohne Abschwächung.
|
||||
|
||||
10. Technisch präzise, sprachlich einfach
|
||||
|
||||
Technische Inhalte werden präzise beschrieben, sprachlich jedoch simpel gehalten.
|
||||
Kein unnötiger Jargon.
|
||||
@@ -1,64 +0,0 @@
|
||||
import os
|
||||
import re
|
||||
|
||||
showcase_dir = "public/showcase/klz-cables"
|
||||
main_css = "wp-content/cache/breeze-minification/css/breeze_klz-cables-com-1-10895.css"
|
||||
power_css = "wp-content/cache/breeze-minification/css/breeze_power-cables-1-43461.css"
|
||||
fallback_img = "wp-content/uploads/2025/04/3.webp"
|
||||
|
||||
def fix_html_file(file_path):
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
modified = False
|
||||
|
||||
# Fix CSS
|
||||
links = re.findall(r'<link [^>]*rel=["\']stylesheet["\'][^>]*href=["\']([^"\']*)["\'][^>]*>', content)
|
||||
links += re.findall(r'<link [^>]*href=["\']([^"\']*)["\'][^>]*rel=["\']stylesheet["\'][^>]*>', content)
|
||||
for link in links:
|
||||
file_dir = os.path.dirname(file_path)
|
||||
rel_link = os.path.join(file_dir, link)
|
||||
if not os.path.exists(rel_link):
|
||||
fallback = main_css
|
||||
if "power-cables" in file_path or "stromkabel" in file_path or "cables" in link:
|
||||
fallback = power_css
|
||||
levels = len(os.path.relpath(file_dir, showcase_dir).split(os.sep))
|
||||
if os.path.relpath(file_dir, showcase_dir) == ".": levels = 0
|
||||
new_link = ("../" * levels) + fallback
|
||||
content = content.replace(link, new_link)
|
||||
modified = True
|
||||
|
||||
# Fix Images (src)
|
||||
imgs = re.findall(r'<img [^>]*src=["\']([^"\']*)["\'][^>]*>', content)
|
||||
for img in imgs:
|
||||
if img.startswith("data:"): continue
|
||||
file_dir = os.path.dirname(file_path)
|
||||
rel_img = os.path.join(file_dir, img)
|
||||
if not os.path.exists(rel_img):
|
||||
levels = len(os.path.relpath(file_dir, showcase_dir).split(os.sep))
|
||||
if os.path.relpath(file_dir, showcase_dir) == ".": levels = 0
|
||||
new_img = ("../" * levels) + fallback_img
|
||||
content = content.replace(img, new_img)
|
||||
modified = True
|
||||
|
||||
# Fix srcset (just remove or replace with single fallback)
|
||||
srcsets = re.findall(r'srcset=["\']([^"\']*)["\']', content)
|
||||
for srcset in srcsets:
|
||||
# If any part of srcset is likely broken, just replace the whole thing with fallback
|
||||
# Or simpler: if it contains "../wp-content", it's likely broken in this context
|
||||
if "../wp-content" in srcset:
|
||||
file_dir = os.path.dirname(file_path)
|
||||
levels = len(os.path.relpath(file_dir, showcase_dir).split(os.sep))
|
||||
if os.path.relpath(file_dir, showcase_dir) == ".": levels = 0
|
||||
new_img = ("../" * levels) + fallback_img
|
||||
content = content.replace(f'srcset="{srcset}"', f'srcset="{new_img} 800w"')
|
||||
modified = True
|
||||
|
||||
if modified:
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
for root, dirs, files in os.walk(showcase_dir):
|
||||
for file in files:
|
||||
if file.endswith(".html"):
|
||||
fix_html_file(os.path.join(root, file))
|
||||
232
package-lock.json
generated
232
package-lock.json
generated
@@ -19,6 +19,7 @@
|
||||
"@types/react": "^19.2.8",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@vercel/og": "^0.8.6",
|
||||
"axios": "^1.13.4",
|
||||
"canvas-confetti": "^1.9.4",
|
||||
"clsx": "^2.1.1",
|
||||
"crawlee": "^3.15.3",
|
||||
@@ -5905,6 +5906,12 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/autoprefixer": {
|
||||
"version": "10.4.23",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz",
|
||||
@@ -5941,6 +5948,17 @@
|
||||
"postcss": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.13.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz",
|
||||
"integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.4",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/b4a": {
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
|
||||
@@ -6338,6 +6356,19 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind-apply-helpers": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
||||
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
@@ -6702,6 +6733,18 @@
|
||||
"simple-swizzle": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/comma-separated-tokens": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
|
||||
@@ -7685,6 +7728,15 @@
|
||||
"robust-predicates": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/denque": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
|
||||
@@ -7844,6 +7896,20 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/duplexer": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
|
||||
@@ -7948,12 +8014,57 @@
|
||||
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-errors": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-module-lexer": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
|
||||
"integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/es-object-atoms": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-set-tostringtag": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
||||
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.6",
|
||||
"has-tostringtag": "^1.0.2",
|
||||
"hasown": "^2.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.25.0",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
|
||||
@@ -8425,6 +8536,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.11",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
||||
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"debug": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/fontkit": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz",
|
||||
@@ -8442,6 +8573,22 @@
|
||||
"unicode-trie": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
|
||||
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"es-set-tostringtag": "^2.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/form-data-encoder": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz",
|
||||
@@ -8559,6 +8706,43 @@
|
||||
"node": "6.* || 8.* || >= 10.*"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"es-define-property": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"es-object-atoms": "^1.1.1",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-proto": "^1.0.1",
|
||||
"gopd": "^1.2.0",
|
||||
"has-symbols": "^1.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"math-intrinsics": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dunder-proto": "^1.0.1",
|
||||
"es-object-atoms": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/get-stream": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
|
||||
@@ -8619,6 +8803,18 @@
|
||||
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/gopd": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/got": {
|
||||
"version": "14.6.6",
|
||||
"resolved": "https://registry.npmjs.org/got/-/got-14.6.6.tgz",
|
||||
@@ -8787,6 +8983,33 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has-tostringtag": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
||||
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"has-symbols": "^1.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/hasown": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||
@@ -9782,6 +10005,15 @@
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/mdast-util-to-hast": {
|
||||
"version": "13.2.1",
|
||||
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
"test:file-examples": "tsx ./scripts/test-file-examples-comprehensive.ts",
|
||||
"clone-website": "tsx ./scripts/clone-recursive.ts",
|
||||
"clone-page": "tsx ./scripts/clone-page.ts",
|
||||
"generate-quote": "tsx ./scripts/generate-quote.ts",
|
||||
"ai-estimate": "tsx ./scripts/ai-estimate.ts",
|
||||
"video:preview": "remotion preview video/index.ts",
|
||||
"video:render": "remotion render video/index.ts ButtonShowcase out/button-showcase.mp4",
|
||||
"video:render:contact": "remotion render video/index.ts ContactFormShowcase out/contact-showcase.mp4 --concurrency=1 --codec=h264 --crf=16 --pixel-format=yuv420p --overwrite",
|
||||
@@ -32,6 +34,7 @@
|
||||
"@types/react": "^19.2.8",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@vercel/og": "^0.8.6",
|
||||
"axios": "^1.13.4",
|
||||
"canvas-confetti": "^1.9.4",
|
||||
"clsx": "^2.1.1",
|
||||
"crawlee": "^3.15.3",
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user