+ {pricing === "offer" ? (
+
+
- {estimate.title}
+ {services.offer.title}
+
+
+ {services.offer.text}
-
- {estimate.steps.map((item, index) => (
- -
-
- {index + 1}
-
-
-
- {item.title}
-
-
- {item.text}
-
-
-
- ))}
-
-
-
{estimate.orientationLabel}
-
- {path.orientation}
-
-
- {path.orientationNote} {estimate.net}
-
-
-
{estimate.cta}
+
+
+ {services.offer.cta}
+
+
+
+ ) : (
+
+
{estimate.label}
+
+
+
+ {estimate.title}
+
+
+ {estimate.steps.map((item, index) => (
+ -
+
+ {index + 1}
+
+
+
+ {item.title}
+
+
+ {item.text}
+
+
+
+ ))}
+
+
+
+
+ {estimate.orientationLabel}
+
+
+ {path.orientation}
+
+
+ {path.orientationNote} {estimate.net}
+
+
+
+ {estimate.cta}
+
+
-
+ )}
);
diff --git a/apps/web/src/content/de.ts b/apps/web/src/content/de.ts
index bcfa27a..e89c946 100644
--- a/apps/web/src/content/de.ts
+++ b/apps/web/src/content/de.ts
@@ -74,10 +74,15 @@ export const de: Content = {
},
services: {
label: "Leistungen",
- title: { lead: "Was brauchen Sie?", rest: "Drei typische Fälle." },
+ title: { lead: "Was brauchen Sie?", rest: "Meist eines von beiden." },
tablistLabel: "Was brauchen Sie?",
youGet: "Das bekommen Sie",
howItRuns: "So läuft es ab",
+ offer: {
+ title: "Sie bekommen ein Angebot, bevor etwas kostet.",
+ text: "Schreiben Sie mir kurz, was Sie brauchen. Wir sprechen etwa 20 Minuten, danach bekommen Sie ein schriftliches Angebot. Ich fange erst an, wenn Sie zugestimmt haben.",
+ cta: "Angebot anfragen",
+ },
estimate: {
label: "Was es kostet",
title: "So kommen Sie zu einem Preis",
@@ -277,7 +282,10 @@ export const de: Content = {
},
automation: {
label: "Prozessautomatisierung",
- title: { lead: "Lassen Sie die Systeme", rest: "das Kopieren übernehmen." },
+ title: {
+ lead: "Ihre Programme erledigen die Routine.",
+ rest: "Niemand tippt mehr ab.",
+ },
intro:
"In den meisten Unternehmen tragen Menschen Informationen von einem Programm ins andere: hier lesen, dort eintippen, eine E-Mail dazu schreiben. Automatisierung verbindet diese Programme, sodass die Arbeit von selbst vom einen zum nächsten wandert. Drei typische Beispiele:",
examplesLabel: "Beispielabläufe",
@@ -489,7 +497,6 @@ export const de: Content = {
"Manchmal ist es gar keine neue Software, sondern weniger Handarbeit.",
presentations:
"Und manchmal ist es ein Termin, bei dem Sie überzeugen müssen.",
- working: "Wenn klar ist, was entsteht, läuft es immer gleich ab.",
work: "Am Ende steht etwas, das läuft.",
faq: "Vorher bleiben meist ein paar Fragen.",
contact: "Und dann beginnt es mit einer E-Mail.",
@@ -506,6 +513,7 @@ export const de: Content = {
intro:
"Diese Seite ist für alle, die selbst entwickeln oder ein Team leiten: für welche Projekte ich passe, womit ich arbeite und wie ich Änderungen absichere, bevor sie live gehen.",
pipelineLabel: "Absicherung",
+ cases: { lead: "Wofür Teams mich buchen.", rest: "Zwei typische Fälle." },
booking: {
label: "Buchung",
title: { lead: "Gebucht wird monatsweise.", rest: "Nicht tageweise." },
@@ -646,7 +654,10 @@ export const de: Content = {
},
working: {
label: "Zusammenarbeit",
- title: { lead: "So arbeite ich.", rest: "Nichts Ungewöhnliches." },
+ title: {
+ lead: "So läuft die Zusammenarbeit.",
+ rest: "Direkt und nachvollziehbar.",
+ },
principles: [
{
title: "Ein Ansprechpartner",
diff --git a/apps/web/src/content/en.ts b/apps/web/src/content/en.ts
index 2bb1e30..5c85665 100644
--- a/apps/web/src/content/en.ts
+++ b/apps/web/src/content/en.ts
@@ -73,10 +73,15 @@ export const en: Content = {
},
services: {
label: "Services",
- title: { lead: "What do you need?", rest: "Three typical cases." },
+ title: { lead: "What do you need?", rest: "Usually one of the two." },
tablistLabel: "What do you need?",
youGet: "What you get",
howItRuns: "How it runs",
+ offer: {
+ title: "You get an offer before anything costs money.",
+ text: "Write me briefly what you need. We talk for about 20 minutes, then you get a written offer. I only start once you have agreed.",
+ cta: "Ask for an offer",
+ },
estimate: {
label: "What it costs",
title: "How you get to a price",
@@ -273,7 +278,10 @@ export const en: Content = {
},
automation: {
label: "Process automation",
- title: { lead: "Let the systems", rest: "do the copying." },
+ title: {
+ lead: "Your tools do the routine work.",
+ rest: "Nobody retypes anything.",
+ },
intro:
"In most companies, people move information from one tool to another: read it here, type it in there, send an email about it. Automation connects those tools so that the work passes from one to the next on its own. Three typical examples:",
examplesLabel: "Example workflows",
@@ -477,8 +485,6 @@ export const en: Content = {
"Sometimes it is not new software at all, but less work by hand.",
presentations:
"And sometimes it is a meeting in which you have to convince.",
- working:
- "Once it is clear what will be built, it always runs the same way.",
work: "In the end there is something that runs.",
faq: "Before that, a few questions usually remain.",
contact: "And then it starts with an email.",
@@ -495,6 +501,7 @@ export const en: Content = {
intro:
"This page is for people who develop themselves or lead a team: which projects I am right for, what I work with, and how I secure changes before they go live.",
pipelineLabel: "Safeguards",
+ cases: { lead: "What teams book me for.", rest: "Two typical cases." },
booking: {
label: "Booking",
title: { lead: "Booked by the month.", rest: "Not by the day." },
@@ -631,7 +638,10 @@ export const en: Content = {
},
working: {
label: "Working with me",
- title: { lead: "How I work.", rest: "Nothing unusual." },
+ title: {
+ lead: "How working together goes.",
+ rest: "Direct and easy to follow.",
+ },
principles: [
{
title: "One contact",
diff --git a/apps/web/src/content/types.ts b/apps/web/src/content/types.ts
index 5b2f83b..e4721eb 100644
--- a/apps/web/src/content/types.ts
+++ b/apps/web/src/content/types.ts
@@ -125,7 +125,6 @@ export type ChapterId =
| "services"
| "automation"
| "presentations"
- | "working"
| "work"
| "faq"
| "contact";
@@ -189,6 +188,8 @@ export type Content = {
readonly tablistLabel: string;
readonly youGet: string;
readonly howItRuns: string;
+ /** The homepage's way to a price: ask for an offer. No figures there. */
+ readonly offer: TitledText & { readonly cta: string };
/** How a visitor gets to a price: the homepage shows this instead of a price list. */
readonly estimate: {
readonly label: string;
@@ -251,6 +252,8 @@ export type Content = {
readonly title: SplitTitle;
readonly intro: string;
readonly pipelineLabel: string;
+ /** Headline over the cases teams book the owner for. */
+ readonly cases: SplitTitle;
/** How the owner is booked as a developer: by the month, not by the day. */
readonly booking: {
readonly label: string;