Compare commits
3
Commits
042ea88d94
...
4717404cc3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4717404cc3 | ||
|
|
7228fee77a | ||
|
|
c822a110ce |
@@ -0,0 +1,111 @@
|
||||
2026-08-16T00:09:06.563114Z INFO 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:09:06.563603Z INFO 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:09:06.563618Z INFO 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:09:06.563620Z INFO 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:09:06.563622Z INFO 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:09:06.563624Z INFO 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:09:06.563630Z INFO 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:09:06.563632Z INFO 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:09:06.563634Z INFO 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:09:06.594420Z INFO 239: client initialized
|
||||
2026-08-16T00:09:06.595349Z INFO serve_inner: 562: Service initialized as server peer_info=Some(InitializeRequestParam { protocol_version: ProtocolVersion("2025-11-25"), capabilities: ClientCapabilities { experimental: None, roots: None, sampling: None, elicitation: Some(ElicitationCapability { schema_validation: None }) }, client_info: Implementation { name: "Cursor", title: None, version: "1.0.0", icons: None, website_url: None } })
|
||||
2026-08-16T00:09:13.103303Z INFO serve_inner: 618: input stream terminated
|
||||
2026-08-16T00:09:13.103383Z INFO serve_inner: 844: serve finished quit_reason=Closed
|
||||
2026-08-16T00:09:14.547926Z INFO 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:09:14.547973Z INFO 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:09:14.547989Z INFO 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:09:14.547991Z INFO 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:09:14.547993Z INFO 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:09:14.547995Z INFO 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:09:14.548002Z INFO 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:09:14.548005Z INFO 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:09:14.548007Z INFO 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:09:14.564338Z INFO 239: client initialized
|
||||
2026-08-16T00:09:14.564401Z INFO serve_inner: 562: Service initialized as server peer_info=Some(InitializeRequestParam { protocol_version: ProtocolVersion("2025-11-25"), capabilities: ClientCapabilities { experimental: None, roots: None, sampling: None, elicitation: Some(ElicitationCapability { schema_validation: None }) }, client_info: Implementation { name: "Cursor", title: None, version: "1.0.0", icons: None, website_url: None } })
|
||||
2026-08-16T00:11:08.839023Z INFO serve_inner: 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:11:08.839058Z INFO serve_inner: 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:11:08.839075Z INFO serve_inner: 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:11:08.839078Z INFO serve_inner: 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:11:08.839081Z INFO serve_inner: 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:11:08.839084Z INFO serve_inner: 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:11:08.839088Z INFO serve_inner: 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:11:08.839090Z INFO serve_inner: 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:11:08.839093Z INFO serve_inner: 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:11:08.839106Z INFO serve_inner: 648: AutoAgents semantic_question (tier=Small)
|
||||
2026-08-16T00:11:08.839120Z INFO serve_inner: 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:11:08.839130Z INFO serve_inner: 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:11:08.839138Z INFO serve_inner: 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:11:08.839141Z INFO serve_inner: 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:11:08.839144Z INFO serve_inner: 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:11:08.839146Z INFO serve_inner: 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:11:08.839149Z INFO serve_inner: 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:11:08.839151Z INFO serve_inner: 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:11:08.839172Z INFO serve_inner: 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:11:08.839218Z WARN serve_inner: 773: response error id=3 error=ErrorData { code: ErrorCode(-32603), message: "Failed to create LLM provider: LLM is not enabled in configuration", data: None }
|
||||
2026-08-16T00:11:10.909914Z INFO serve_inner: 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:11:10.909956Z INFO serve_inner: 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:11:10.909980Z INFO serve_inner: 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:11:10.909985Z INFO serve_inner: 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:11:10.909988Z INFO serve_inner: 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:11:10.909993Z INFO serve_inner: 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:11:10.909997Z INFO serve_inner: 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:11:10.910002Z INFO serve_inner: 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:11:10.910006Z INFO serve_inner: 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:11:10.910012Z INFO serve_inner: 648: AutoAgents architecture_analysis (tier=Small)
|
||||
2026-08-16T00:11:10.910021Z INFO serve_inner: 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:11:10.910034Z INFO serve_inner: 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:11:10.910047Z INFO serve_inner: 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:11:10.910051Z INFO serve_inner: 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:11:10.910055Z INFO serve_inner: 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:11:10.910059Z INFO serve_inner: 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:11:10.910062Z INFO serve_inner: 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:11:10.910066Z INFO serve_inner: 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:11:10.910070Z INFO serve_inner: 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:11:10.910083Z WARN serve_inner: 773: response error id=4 error=ErrorData { code: ErrorCode(-32603), message: "Failed to create LLM provider: LLM is not enabled in configuration", data: None }
|
||||
2026-08-16T00:17:24.425995Z INFO 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:17:24.426033Z INFO 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:17:24.426052Z INFO 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:17:24.426054Z INFO 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:17:24.426056Z INFO 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:17:24.426059Z INFO 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:17:24.426064Z INFO 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:17:24.426067Z INFO 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:17:24.426070Z INFO 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:18:55.684496Z INFO 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:18:55.684539Z INFO 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:18:55.684560Z INFO 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:18:55.684563Z INFO 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:18:55.684565Z INFO 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:18:55.684568Z INFO 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:18:55.684575Z INFO 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:18:55.684578Z INFO 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:18:55.684581Z INFO 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T00:19:03.280146Z INFO 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T00:19:03.280209Z INFO 678: 📋 No config file found, using defaults
|
||||
2026-08-16T00:19:03.280227Z INFO 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T00:19:03.280230Z INFO 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T00:19:03.280232Z INFO 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T00:19:03.280235Z INFO 612: 🔧 Embedding model: None
|
||||
2026-08-16T00:19:03.280240Z INFO 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T00:19:03.280242Z INFO 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T00:19:03.280244Z INFO 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T09:14:56.294149Z INFO serve_inner: 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T09:14:56.295692Z INFO serve_inner: 678: 📋 No config file found, using defaults
|
||||
2026-08-16T09:14:56.295896Z INFO serve_inner: 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T09:14:56.295900Z INFO serve_inner: 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T09:14:56.295902Z INFO serve_inner: 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T09:14:56.295905Z INFO serve_inner: 612: 🔧 Embedding model: None
|
||||
2026-08-16T09:14:56.295919Z INFO serve_inner: 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T09:14:56.295921Z INFO serve_inner: 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T09:14:56.295924Z INFO serve_inner: 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T09:14:56.296120Z INFO serve_inner: 648: AutoAgents semantic_question (tier=Small)
|
||||
2026-08-16T09:14:56.296706Z INFO serve_inner: 591: 🔧 Loading CodeGraph configuration...
|
||||
2026-08-16T09:14:56.296732Z INFO serve_inner: 678: 📋 No config file found, using defaults
|
||||
2026-08-16T09:14:56.296746Z INFO serve_inner: 605: ✅ Configuration loaded successfully
|
||||
2026-08-16T09:14:56.296749Z INFO serve_inner: 609: 📄 Config file: NONE (using defaults)
|
||||
2026-08-16T09:14:56.296751Z INFO serve_inner: 611: 🤖 Embedding provider: auto
|
||||
2026-08-16T09:14:56.296754Z INFO serve_inner: 612: 🔧 Embedding model: None
|
||||
2026-08-16T09:14:56.296759Z INFO serve_inner: 613: 📐 Embedding dimension: 2048
|
||||
2026-08-16T09:14:56.296761Z INFO serve_inner: 614: 🌐 Ollama URL: http://localhost:11434
|
||||
2026-08-16T09:14:56.296764Z INFO serve_inner: 615: 💬 LLM insights: disabled (context-only)
|
||||
2026-08-16T09:14:56.297080Z WARN serve_inner: 773: response error id=5 error=ErrorData { code: ErrorCode(-32603), message: "Failed to create LLM provider: LLM is not enabled in configuration", data: None }
|
||||
@@ -2,6 +2,7 @@
|
||||
"name": "w-make-com",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
|
||||
@@ -8,8 +8,8 @@ export default async function OpenGraphImage({ params }: { params: Promise<{ lan
|
||||
const locale = requireLocale((await params).lang);
|
||||
const title =
|
||||
locale === "de"
|
||||
? "Software für Prozesse, auf die man sich verlassen muss."
|
||||
: "Software for processes that have to hold.";
|
||||
? "Wenn Zahlen zwischen Schichten verschwinden, liegt es meist an der Software."
|
||||
: "When numbers vanish between shifts, it's usually the software.";
|
||||
|
||||
return new ImageResponse(
|
||||
(
|
||||
|
||||
+34
-5
@@ -13,13 +13,17 @@ import { requireLocale } from "@/lib/locale";
|
||||
export async function generateMetadata({ params }: PageProps<"/[lang]">) {
|
||||
const locale = requireLocale((await params).lang);
|
||||
const dict = getDictionary(locale);
|
||||
const description = locale === "de"
|
||||
? "Software für industrielle Prozesse, in denen Rezept, Material und Schichtübergabe lückenlos zusammengehören müssen. Wenn Zahlen zwischen Schichten verschwinden, liegt es meist an der Software."
|
||||
: "Software for industrial processes where recipe, materials and shift handover must fit together seamlessly. When numbers vanish between shifts, it's usually the software.";
|
||||
|
||||
return pageMetadata(
|
||||
locale,
|
||||
"home",
|
||||
locale === "de"
|
||||
? "Jan Wagner · Software für Satzzettel, Silo und Schichtabschluss"
|
||||
: "Jan Wagner · software for batch tickets, silos and the shift close",
|
||||
dict.home.lede,
|
||||
? "Jan Wagner · Software für industrielle Prozesse"
|
||||
: "Jan Wagner · software for industrial processes",
|
||||
description,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -55,6 +59,23 @@ export default async function HomePage({ params }: PageProps<"/[lang]">) {
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section className="border-t border-line bg-ink-raised">
|
||||
<div className="mx-auto flex w-full max-w-6xl flex-col items-start justify-between gap-6 px-6 py-12 md:flex-row md:items-center md:px-10">
|
||||
<div>
|
||||
<p className="font-serif text-2xl text-paper">W-Make Batch live erleben</p>
|
||||
<p className="mt-2 text-sm text-mute-strong">Öffentliche Demo ohne Anmeldung · batch.w-make.com</p>
|
||||
</div>
|
||||
<a
|
||||
href="https://batch.w-make.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="inline-block border border-line-strong bg-transparent px-6 py-3 text-sm font-medium text-paper transition-all hover:border-copper hover:bg-copper/10"
|
||||
>
|
||||
Demo öffnen →
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="border-t border-line">
|
||||
<div className="mx-auto w-full max-w-6xl px-6 py-20 md:px-10">
|
||||
<div className="mb-12 flex flex-wrap items-end justify-between gap-6">
|
||||
@@ -151,13 +172,21 @@ export default async function HomePage({ params }: PageProps<"/[lang]">) {
|
||||
|
||||
<section className="border-t border-line">
|
||||
<div className="mx-auto w-full max-w-6xl px-6 py-20 md:px-10">
|
||||
<div className="border border-copper/30 bg-copper/5 px-8 py-12 md:px-12">
|
||||
<div className="border-2 border-copper/30 bg-copper/5 px-8 py-12 md:px-12">
|
||||
<p className="kicker">{dict.home.ctaKicker}</p>
|
||||
<h2 className="display mt-4 max-w-3xl text-4xl md:text-6xl">{dict.home.ctaTitle}</h2>
|
||||
<p className="mt-6 max-w-2xl leading-7 text-mute-strong">{dict.home.ctaBody}</p>
|
||||
<ul className="mt-8 space-y-3 max-w-2xl">
|
||||
{dict.home.ctaBenefits.map((benefit) => (
|
||||
<li key={benefit} className="flex items-start gap-3 text-sm leading-7 text-mute-strong">
|
||||
<span className="text-copper">✓</span>
|
||||
<span>{benefit}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<Link
|
||||
href={publicPath(locale, "contact")}
|
||||
className="mt-8 inline-block border border-copper bg-copper px-6 py-3 text-sm font-medium text-ink"
|
||||
className="mt-8 inline-block border-2 border-copper bg-copper px-6 py-3 text-sm font-medium text-ink transition-all hover:bg-copper-deep hover:border-copper-deep"
|
||||
>
|
||||
{dict.actions.startConversation}
|
||||
</Link>
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import { NextResponse } from "next/server";
|
||||
|
||||
export async function GET() {
|
||||
return NextResponse.json({
|
||||
status: "ok",
|
||||
timestamp: new Date().toISOString(),
|
||||
service: "w-make-portfolio",
|
||||
});
|
||||
}
|
||||
@@ -127,3 +127,21 @@ body {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Mobile-optimized touch targets */
|
||||
@media (max-width: 768px) {
|
||||
.display {
|
||||
font-size: clamp(2rem, 8vw, 4rem);
|
||||
}
|
||||
|
||||
/* Ensure all interactive elements are at least 44x44px */
|
||||
a, button, input, select, textarea {
|
||||
min-height: 44px;
|
||||
}
|
||||
|
||||
/* Reduce excessive whitespace on mobile */
|
||||
section {
|
||||
padding-top: clamp(2rem, 5vw, 5rem) !important;
|
||||
padding-bottom: clamp(2rem, 5vw, 5rem) !important;
|
||||
}
|
||||
}
|
||||
|
||||
+26
-16
@@ -20,11 +20,11 @@ export const dictionaries = {
|
||||
},
|
||||
home: {
|
||||
kicker: "Jan Wagner · Behälterglas und Software",
|
||||
title: "Software für Satzzettel, Silo und Schichtabschluss.",
|
||||
lede: "Ich baue Systeme, in denen Rezept, Satzzettel, Siloabzug und Tagesabschluss zusammengehören. Der Ausgangspunkt ist die Behälterglas-Produktion. Derselbe Anspruch gilt überall dort, wo Buchungen Geld, Material und die nächste Schicht berühren.",
|
||||
asideLabel: "Herkunft",
|
||||
asideTitle: "Die Reihenfolge kommt aus der Halle.",
|
||||
asideBody: "Rohstoffe, Redox, Schichtbeginn, Gemengebuch. Wer das als Formularstapel behandelt, verliert die Folge, in der die Halle tatsächlich arbeitet.",
|
||||
title: "Wenn Zahlen zwischen Schichten verschwinden, liegt es meist an der Software.",
|
||||
lede: "Ich baue Systeme für industrielle Prozesse, in denen Rezept, Material und Schichtübergabe lückenlos zusammengehören müssen. Der Ausgangspunkt ist die Behälterglas-Produktion. Derselbe Anspruch gilt überall dort, wo Buchungen Geld, Material und die nächste Schicht berühren.",
|
||||
asideLabel: "Warum Prozess-Software scheitert",
|
||||
asideTitle: "Die Software kennt die Reihenfolge nicht.",
|
||||
asideBody: "Rohstoffe, Redox, Schichtbeginn, Gemengebuch. Wer das als Formularstapel behandelt, verliert die Folge, in der die Halle tatsächlich arbeitet. Das Ergebnis: stille Korrekturen und Zahlen, die morgens nicht mehr stimmen.",
|
||||
workKicker: "Veröffentlichbare Arbeit",
|
||||
workTitle: "W-Make Batch und Batchmaker Studio.",
|
||||
workLede: "W-Make Batch ist das Betriebsprodukt mit öffentlicher Demo unter batch.w-make.com. Batchmaker Studio ist die Werkbank für Rezept und Glaschemie, ohne laufende Schichten und ohne Silos.",
|
||||
@@ -35,9 +35,14 @@ export const dictionaries = {
|
||||
offerTitle: "Drei Formen der Zusammenarbeit.",
|
||||
notesKicker: "Notizen",
|
||||
notesTitle: "Entscheidungen aus dem Betrieb.",
|
||||
ctaKicker: "Kontakt",
|
||||
ctaTitle: "Schreiben Sie, wenn der Ablauf in der Software bricht.",
|
||||
ctaBody: "Schildern Sie den Ablauf, der heute in Kopien, Nebenrechnungen oder stillen Korrekturen endet. Ich antworte in der Regel innerhalb von zwei Werktagen, sofern ich den Fall führen kann.",
|
||||
ctaKicker: "30-Min. Erstanalyse · Kostenlos",
|
||||
ctaTitle: "Beschreiben Sie den Prozess, der heute bricht.",
|
||||
ctaBody: "Schildern Sie den Ablauf, der in Kopien, Nebenrechnungen oder stillen Korrekturen endet. Ich antworte innerhalb von zwei Werktagen und sage ehrlich, ob ich den Fall führen kann.",
|
||||
ctaBenefits: [
|
||||
"Antwort innerhalb von 2 Werktagen",
|
||||
"Ehrliche Einschätzung, ob ich den Fall führen kann",
|
||||
"Keine Folien nötig, nur Verständnis des Ablaufs",
|
||||
],
|
||||
},
|
||||
about: {
|
||||
kicker: "Über mich",
|
||||
@@ -131,11 +136,11 @@ export const dictionaries = {
|
||||
},
|
||||
home: {
|
||||
kicker: "Jan Wagner · container glass and software",
|
||||
title: "Software for batch tickets, silos and the shift close.",
|
||||
lede: "I build systems in which recipe, batch ticket, silo deduction and day close belong together. The starting point is container-glass production. The same standard applies wherever bookings touch money, material and the next shift.",
|
||||
asideLabel: "Background",
|
||||
asideTitle: "The order comes from the hall.",
|
||||
asideBody: "Raw materials, redox, shift start, batch book. Treat that as a pile of forms and you lose the sequence in which the hall actually works.",
|
||||
title: "When numbers vanish between shifts, it's usually the software.",
|
||||
lede: "I build systems for industrial processes where recipe, materials and shift handover must fit together seamlessly. The starting point is container-glass production. The same standard applies wherever bookings touch money, material and the next shift.",
|
||||
asideLabel: "Why process software fails",
|
||||
asideTitle: "The software doesn't know the order.",
|
||||
asideBody: "Raw materials, redox, shift start, batch book. Treat that as a pile of forms and you lose the sequence in which the hall actually works. The result: quiet corrections and figures that no longer match in the morning.",
|
||||
workKicker: "Work I can publish",
|
||||
workTitle: "W-Make Batch and Batchmaker Studio.",
|
||||
workLede: "W-Make Batch is the operations product with a public demo at batch.w-make.com. Batchmaker Studio is the workbench for recipes and glass chemistry, without live shifts and without silos.",
|
||||
@@ -146,9 +151,14 @@ export const dictionaries = {
|
||||
offerTitle: "Three ways of working together.",
|
||||
notesKicker: "Notes",
|
||||
notesTitle: "Decisions from operations.",
|
||||
ctaKicker: "Contact",
|
||||
ctaTitle: "Write if the process is breaking in the software.",
|
||||
ctaBody: "Describe the flow that currently ends in copies, side calculations or quiet corrections. I usually reply within two working days, if I can take the case.",
|
||||
ctaKicker: "30-Min. Analysis · Free",
|
||||
ctaTitle: "Describe the process that's breaking today.",
|
||||
ctaBody: "Describe the flow that currently ends in copies, side calculations or quiet corrections. I reply within two working days and will honestly tell you whether I can take the case.",
|
||||
ctaBenefits: [
|
||||
"Reply within 2 working days",
|
||||
"Honest assessment of whether I can take the case",
|
||||
"No slide deck needed, just understanding of the flow",
|
||||
],
|
||||
},
|
||||
about: {
|
||||
kicker: "About",
|
||||
|
||||
@@ -8,8 +8,11 @@ export function pageMetadata(
|
||||
title: string,
|
||||
description: string,
|
||||
slug?: string,
|
||||
ogImage?: string,
|
||||
): Metadata {
|
||||
const path = publicPath(locale, route, slug);
|
||||
const image = ogImage || siteUrl(`/${locale}/opengraph-image`);
|
||||
|
||||
return {
|
||||
title,
|
||||
description,
|
||||
@@ -28,6 +31,20 @@ export function pageMetadata(
|
||||
siteName: "W-MAKE",
|
||||
locale: locale === "de" ? "de_DE" : "en_GB",
|
||||
type: "website",
|
||||
images: [
|
||||
{
|
||||
url: image,
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: title,
|
||||
},
|
||||
],
|
||||
},
|
||||
twitter: {
|
||||
card: "summary_large_image",
|
||||
title,
|
||||
description,
|
||||
images: [image],
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user