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",
|
"name": "w-make-com",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ export default async function OpenGraphImage({ params }: { params: Promise<{ lan
|
|||||||
const locale = requireLocale((await params).lang);
|
const locale = requireLocale((await params).lang);
|
||||||
const title =
|
const title =
|
||||||
locale === "de"
|
locale === "de"
|
||||||
? "Software für Prozesse, auf die man sich verlassen muss."
|
? "Wenn Zahlen zwischen Schichten verschwinden, liegt es meist an der Software."
|
||||||
: "Software for processes that have to hold.";
|
: "When numbers vanish between shifts, it's usually the software.";
|
||||||
|
|
||||||
return new ImageResponse(
|
return new ImageResponse(
|
||||||
(
|
(
|
||||||
|
|||||||
+34
-5
@@ -13,13 +13,17 @@ import { requireLocale } from "@/lib/locale";
|
|||||||
export async function generateMetadata({ params }: PageProps<"/[lang]">) {
|
export async function generateMetadata({ params }: PageProps<"/[lang]">) {
|
||||||
const locale = requireLocale((await params).lang);
|
const locale = requireLocale((await params).lang);
|
||||||
const dict = getDictionary(locale);
|
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(
|
return pageMetadata(
|
||||||
locale,
|
locale,
|
||||||
"home",
|
"home",
|
||||||
locale === "de"
|
locale === "de"
|
||||||
? "Jan Wagner · Software für Satzzettel, Silo und Schichtabschluss"
|
? "Jan Wagner · Software für industrielle Prozesse"
|
||||||
: "Jan Wagner · software for batch tickets, silos and the shift close",
|
: "Jan Wagner · software for industrial processes",
|
||||||
dict.home.lede,
|
description,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,6 +59,23 @@ export default async function HomePage({ params }: PageProps<"/[lang]">) {
|
|||||||
</aside>
|
</aside>
|
||||||
</section>
|
</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">
|
<section className="border-t border-line">
|
||||||
<div className="mx-auto w-full max-w-6xl px-6 py-20 md:px-10">
|
<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">
|
<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">
|
<section className="border-t border-line">
|
||||||
<div className="mx-auto w-full max-w-6xl px-6 py-20 md:px-10">
|
<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>
|
<p className="kicker">{dict.home.ctaKicker}</p>
|
||||||
<h2 className="display mt-4 max-w-3xl text-4xl md:text-6xl">{dict.home.ctaTitle}</h2>
|
<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>
|
<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
|
<Link
|
||||||
href={publicPath(locale, "contact")}
|
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}
|
{dict.actions.startConversation}
|
||||||
</Link>
|
</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;
|
height: 0;
|
||||||
overflow: hidden;
|
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: {
|
home: {
|
||||||
kicker: "Jan Wagner · Behälterglas und Software",
|
kicker: "Jan Wagner · Behälterglas und Software",
|
||||||
title: "Software für Satzzettel, Silo und Schichtabschluss.",
|
title: "Wenn Zahlen zwischen Schichten verschwinden, liegt es meist an der Software.",
|
||||||
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.",
|
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: "Herkunft",
|
asideLabel: "Warum Prozess-Software scheitert",
|
||||||
asideTitle: "Die Reihenfolge kommt aus der Halle.",
|
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.",
|
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",
|
workKicker: "Veröffentlichbare Arbeit",
|
||||||
workTitle: "W-Make Batch und Batchmaker Studio.",
|
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.",
|
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.",
|
offerTitle: "Drei Formen der Zusammenarbeit.",
|
||||||
notesKicker: "Notizen",
|
notesKicker: "Notizen",
|
||||||
notesTitle: "Entscheidungen aus dem Betrieb.",
|
notesTitle: "Entscheidungen aus dem Betrieb.",
|
||||||
ctaKicker: "Kontakt",
|
ctaKicker: "30-Min. Erstanalyse · Kostenlos",
|
||||||
ctaTitle: "Schreiben Sie, wenn der Ablauf in der Software bricht.",
|
ctaTitle: "Beschreiben Sie den Prozess, der heute 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.",
|
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: {
|
about: {
|
||||||
kicker: "Über mich",
|
kicker: "Über mich",
|
||||||
@@ -131,11 +136,11 @@ export const dictionaries = {
|
|||||||
},
|
},
|
||||||
home: {
|
home: {
|
||||||
kicker: "Jan Wagner · container glass and software",
|
kicker: "Jan Wagner · container glass and software",
|
||||||
title: "Software for batch tickets, silos and the shift close.",
|
title: "When numbers vanish between shifts, it's usually the software.",
|
||||||
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.",
|
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: "Background",
|
asideLabel: "Why process software fails",
|
||||||
asideTitle: "The order comes from the hall.",
|
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.",
|
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",
|
workKicker: "Work I can publish",
|
||||||
workTitle: "W-Make Batch and Batchmaker Studio.",
|
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.",
|
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.",
|
offerTitle: "Three ways of working together.",
|
||||||
notesKicker: "Notes",
|
notesKicker: "Notes",
|
||||||
notesTitle: "Decisions from operations.",
|
notesTitle: "Decisions from operations.",
|
||||||
ctaKicker: "Contact",
|
ctaKicker: "30-Min. Analysis · Free",
|
||||||
ctaTitle: "Write if the process is breaking in the software.",
|
ctaTitle: "Describe the process that's breaking today.",
|
||||||
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.",
|
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: {
|
about: {
|
||||||
kicker: "About",
|
kicker: "About",
|
||||||
|
|||||||
@@ -8,8 +8,11 @@ export function pageMetadata(
|
|||||||
title: string,
|
title: string,
|
||||||
description: string,
|
description: string,
|
||||||
slug?: string,
|
slug?: string,
|
||||||
|
ogImage?: string,
|
||||||
): Metadata {
|
): Metadata {
|
||||||
const path = publicPath(locale, route, slug);
|
const path = publicPath(locale, route, slug);
|
||||||
|
const image = ogImage || siteUrl(`/${locale}/opengraph-image`);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title,
|
title,
|
||||||
description,
|
description,
|
||||||
@@ -28,6 +31,20 @@ export function pageMetadata(
|
|||||||
siteName: "W-MAKE",
|
siteName: "W-MAKE",
|
||||||
locale: locale === "de" ? "de_DE" : "en_GB",
|
locale: locale === "de" ? "de_DE" : "en_GB",
|
||||||
type: "website",
|
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