feat: overhaul German and English copy across all site sections
Build & Deploy / 🔔 Notify (push) Successful in 2s
Build & Deploy / 🔍 Prepare (push) Successful in 5s
Build & Deploy / 🏗️ Build (push) Successful in 6m42s
Build & Deploy / 🚀 Deploy (push) Successful in 17s
Build & Deploy / 🩺 Smoke Test (push) Successful in 4s

Refine tone, vocabulary, and phrasing across both de.ts and en.ts to eliminate overly simplistic, awkward, and literal expressions. Position services and engineering practices clearly with professional, natural idiom for founders, CTOs, and clients.
This commit is contained in:
2026-10-05 15:42:52 +02:00
parent 710d3d06e6
commit 76873808ce
2 changed files with 519 additions and 488 deletions
+241 -224
View File
@@ -10,7 +10,7 @@ export const de: Content = {
site: {
title: "Freelance-Webentwickler für Web-Apps & Websites | Marc Mintel",
description:
"Freelance-Webentwickler mit 15 Jahren Erfahrung. Ich baue Web-Apps, Interfaces und Websites mit React, Next.js und TypeScript und automatisiere Abläufe.",
"Freelance-Webentwickler mit 15 Jahren Erfahrung. Ich entwickle moderne Web-Apps, intuitive Interfaces und Websites mit React, Next.js und TypeScript und automatisiere Geschäftsprozesse.",
jobTitle: "Freelance-Webentwickler",
ogLocale: "de_DE",
shareImageAlt:
@@ -41,23 +41,23 @@ export const de: Content = {
{ text: "& WEBSITES.", tone: "bits" },
],
lead: "Freelance-Webentwickler mit 15 Jahren Erfahrung.",
leadStrong: "Ich baue Web-Apps, Interfaces und Websites.",
leadStrong: "Ich entwickle Web-Apps, Interfaces und moderne Websites.",
primaryCta: GET_IN_TOUCH,
secondaryCta: "Was ich mache",
secondaryCta: "Leistungen & Arbeitsweise",
trust: [
"Ein Ansprechpartner, der es selbst baut",
"Ein Angebot, bevor etwas kostet",
"Änderungen per E-Mail, kein System zu lernen",
"Server in Deutschland",
"Direkter Kontakt – Umsetzung aus einer Hand",
"Verbindliches Angebot vor Projektstart",
"Änderungen unkompliziert per E-Mail – ohne CMS-Einarbeitung",
"Hosting auf Servern in Deutschland",
],
},
hello: {
label: "Hallo",
title: "Ich bin Marc.",
lead: "Ich baue seit 15 Jahren für das Web: zuerst in Agenturen, später als Senior-Entwickler und heute selbstständig.",
lead: "Seit 15 Jahren entwickle ich fürs Web: zunächst in Agenturen, später als Senior-Entwickler in Produktteams und heute als selbstständiger Software Engineer.",
paragraphs: [
"Meine Stärke ist der Teil, den Menschen sehen und benutzen: Design und Interface. Ich kenne mich auch mit dem aus, was dahinter liegt, und kann deshalb eine vollständige Anwendung bauen und nicht nur ihr Interface.",
"Sie arbeiten direkt mit mir. Egal, ob Sie ein Produktteam leiten oder so etwas zum ersten Mal in Auftrag geben.",
"Mein Schwerpunkt liegt auf dem, was Nutzer sehen und bedienen: ansprechendes Design und intuitive Benutzeroberflächen. Da ich auch die dahinterliegende Software-Architektur und APIs beherrsche, liefere ich ganzheitliche, produktionsreife Web-Anwendungen aus einer Hand.",
"Sie arbeiten auf Augenhöhe direkt mit mir zusammen – egal, ob Sie ein erfahrenes Produktteam leiten oder Ihr erstes digitales Projekt starten.",
],
portraitAlt: "Marc Mintel, Freelance-Webentwickler",
careerLabel: "Der Weg bisher",
@@ -78,14 +78,18 @@ export const de: Content = {
},
services: {
label: "Leistungen",
title: { lead: "Was brauchen Sie?", rest: "Meist eines von beiden." },
tablistLabel: "Was brauchen Sie?",
youGet: "Das bekommen Sie",
howItRuns: "So läuft es ab",
title: {
lead: "Was planen Sie?",
rest: "Passgenaue Unterstützung für Ihr Vorhaben.",
},
tablistLabel: "Was planen Sie?",
youGet: "Was Sie erhalten",
howItRuns: "Der Ablauf",
care: {
label: "Nach dem Start",
title: "Ich kümmere mich weiter um Ihre Website, wenn Sie das möchten.",
text: "Sie müssen kein System bedienen und nichts selbst pflegen. Wenn etwas zu ändern ist, schreiben Sie mir eine E-Mail.",
title:
"Zuverlässige Pflege und laufende Betreuung – auf Wunsch dauerhaft.",
text: "Sie müssen sich in kein System einarbeiten: Für inhaltliche Anpassungen oder Updates genügt eine kurze E-Mail.",
price: {
label: "Betreuung",
amount: "89 EUR",
@@ -93,39 +97,39 @@ export const de: Content = {
},
includedLabel: "Das ist enthalten",
included: [
"Die Website läuft auf Servern in Deutschland",
"Adresse, Sicherheit und Technik sind erledigt",
"Kleine Änderungen: ein Text, ein Bild, neue Öffnungszeiten",
"Kein Redaktionssystem, kein Login",
"Hosting auf abgesicherten Servern in Deutschland",
"Domain, SSL-Verschlüsselung und technische Wartung inklusive",
"Kleine Änderungen: Anpassung von Texten, Bildern und Kontaktdaten",
"Kein komplexes Redaktionssystem, keine Update-Pflege durch Sie",
],
termsLabel: "Gut zu wissen",
terms: [
"Die ersten drei Monate sind im Projektpreis enthalten.",
"Größeres, etwa eine neue Seite, bekommt vorher einen Preis.",
"Ich antworte innerhalb von zwei Werktagen. Eine Rufbereitschaft gibt es nicht.",
"Wenn Sie gehen möchten, bekommen Sie alles mit. Die Website gehört Ihnen.",
"Die ersten drei Monate sind im Projektpreis bereits enthalten.",
"Größere Erweiterungen (z. B. neue Unterseiten) stimme ich vorab transparent mit Ihnen ab.",
"Feste Reaktionszeit innerhalb von zwei Werktagen (keine 24/7-Rufbereitschaft).",
"Kein Vendor Lock-in: Sämtlicher Code und alle Inhalte gehören zu 100 % Ihnen.",
],
},
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.",
title: "Klares, verbindliches Angebot vor Projektbeginn.",
text: "Schildern Sie mir kurz Ihr Vorhaben. Nach einem rund 20-minütigen Kennenlernen erhalten Sie ein transparentes, schriftliches Angebot. Die Arbeit beginnt erst nach Ihrer ausdrücklichen Freigabe.",
cta: "Angebot anfragen",
},
estimate: {
label: "Was es kostet",
title: "So kommen Sie zu einem Preis",
label: "Preise & Schätzung",
title: "Transparente Aufwandsschätzung",
steps: [
{
title: "Ein Gespräch, etwa 20 Minuten",
text: "Sie erzählen mir, was Sie brauchen.",
title: "Unverbindliches Erstgespräch (ca. 20 Minuten)",
text: "Wir besprechen Ihre Anforderungen, Ziele und Rahmenbedingungen.",
},
{
title: "Eine schriftliche Schätzung",
text: "Sie sehen die geschätzten Stunden und was darin enthalten ist.",
title: "Schriftliche Aufwandsschätzung",
text: "Sie erhalten eine transparente Aufschlüsselung der geschätzten Stunden und Leistungen.",
},
{
title: "Sie geben ein Budget frei",
text: "Ich rechne die tatsächlichen Stunden ab und sage früh Bescheid, wenn es nicht reicht.",
title: "Budgetfreigabe & Abrechnung",
text: "Abgerechnet wird nach tatsächlichem Aufwand. Drohen Abweichungen, informiere ich Sie frühzeitig.",
},
],
orientationLabel: "Zur Orientierung",
@@ -138,27 +142,27 @@ export const de: Content = {
service: "Entwicklung von Web-Apps und Frontends",
need: "Wir brauchen einen Entwickler für unser Produkt",
forWhom: "Start-ups, Produktteams, Agenturen, Web3-Teams",
headline: "Ein erfahrener Entwickler, der in Ihr Projekt einsteigt.",
headline: "Erfahrene Verstärkung für Ihr Entwicklerteam.",
intro:
"Sie haben ein Produkt und mehr Arbeit, als Ihr Team schafft. Ich arbeite an vereinbarten Wochentagen an dem, was als Nächstes auf Ihrer Liste steht: neue Funktionen, das Interface oder die Teile, zu denen niemand kommt.",
"Sie haben ein digitales Produkt und mehr Vorhaben, als Ihre internen Kapazitäten abdecken. Ich steige an fest vereinbarten Tagen ein und übernehme, was Priorität hat: neue Features, UI-Optimierungen oder technische Refactorings.",
youGet: [
"Web-Apps, Dashboards, Kundenportale und interne Werkzeuge",
"Interfaces mit Blick für Design und Bedienbarkeit",
"Interfaces mit Fokus auf Design, Performance und Bedienbarkeit",
"Web3-Frontends: Wallet-Anbindung, Live-Daten, Dashboards",
"Kleine Werkzeuge und Automatisierung für wiederkehrende Arbeit",
"Kleine Tools und Automatisierungen für wiederkehrende Aufgaben",
],
steps: [
{
title: FIRST_CALL,
text: "Sie erzählen mir, was Sie bauen und wo Sie Unterstützung brauchen. Wenn ich dafür nicht der Richtige bin, sage ich das.",
text: "Sie schildern Ihr Projekt und wo Sie Unterstützung benötigen. Sollte meine Expertise dafür nicht optimal passen, sage ich Ihnen das offen.",
},
{
title: "Wir vereinbaren die Tage",
text: "Wie viele Tage pro Woche ich für Sie arbeite und was zuerst drankommt.",
title: "Feste Kapazitäten vereinbaren",
text: "Wir legen die wöchentlichen Tage fest und priorisieren die anstehenden Aufgaben.",
},
{
title: "Ich arbeite die Liste ab",
text: "Fertige Teile gehen zur Durchsicht an Sie, sobald sie fertig sind. Ich erfasse meine Stunden, und Sie sehen, wofür sie angefallen sind.",
title: "Fokussierte Umsetzung",
text: "Arbeitsergebnisse übergebe ich fortlaufend zur Durchsicht. Die Arbeitszeit wird detailliert und transparent erfasst.",
},
{
title: "Zwei Wochen Kündigungsfrist",
@@ -167,61 +171,61 @@ export const de: Content = {
],
orientation: "100 EUR pro Stunde, monatsweise gebucht",
orientationNote:
"Sie buchen feste Wochentage für jeweils einen Monat. Abgerechnet werden die Stunden, die ich tatsächlich gearbeitet habe.",
"Feste Wochentage im Monatskontingent. Abgerechnet werden ausschließlich die tatsächlich geleisteten Stunden.",
},
{
id: "rescue",
service: "Code-Review und Stabilisierung von Web-Apps",
need: "Unsere App soll zuverlässig werden",
forWhom:
"Teams, deren App schnell gebaut wurde und sich jetzt schwer ändern lässt",
"Teams mit gewachsenen Codebasen, die an Stabilität verloren haben oder schwer erweiterbar sind",
headline:
"Eine Woche, um Ihre App durchzusehen und das Dringendste zu beheben.",
"Einwöchiger Code-Sprint: Analyse, Stabilisierung und Sofortmaßnahmen.",
intro:
"Die App läuft, aber Fehler kommen wieder, und kleine Änderungen dauern länger, als sie sollten. Ich nehme mir eine Woche, gehe den Code durch, behebe, was in dieser Zeit möglich ist, und schreibe auf, was ich als Nächstes tun würde.",
"Die Anwendung läuft, aber wiederkehrende Bugs und zähe Release-Zyklen bremsen Ihr Team. In einer fokussierten Woche durchleuchte ich die Codebasis, behebe die drängendsten Probleme und erarbeite eine klare Roadmap für die nachhaltige Weiterentwicklung.",
youGet: [
"Eine ehrliche Einschätzung: was solide ist und was wackelt",
"Automatisierte Tests für die wichtigsten Teile",
"Die dringendsten Probleme behoben, soweit eine Woche reicht",
"Eine schriftliche Liste der nächsten Schritte, in verständlicher Sprache",
"Fundierte Bestandsaufnahme: Was steht solide da, wo liegen Stabilitäts- und Sicherheitsrisiken?",
"Automatisierte Tests für geschäftskritische Workflows",
"Sofortige Behebung der gravierendsten Engpässe im Rahmen der Sprint-Woche",
"Pragmatische Handlungsempfehlungen für nächste Schritte – verständlich dokumentiert",
],
steps: [
{
title: FIRST_CALL,
text: "Sie zeigen mir die App und erzählen, wo sie Ärger macht.",
text: "Sie geben mir Einblick in die Anwendung und erläutern, an welchen Stellen es hakt.",
},
{
title: "Eine Woche Arbeit",
text: "Ich lese den Code, ergänze Tests, wo sie am meisten bringen, und behebe die dringendsten Probleme.",
title: "Fünf Tage Deep Dive",
text: "Ich analysiere die Architektur, etabliere Tests an kritischen Pfaden und behebe die dringendsten Bugs.",
},
{
title: "Eine schriftliche Zusammenfassung",
text: "Was ich gefunden habe, was ich geändert habe und was ich empfehle. So geschrieben, dass Sie es nachvollziehen können, ohne selbst zu entwickeln.",
title: "Verständlicher Abschlussbericht",
text: "Befunde, umgesetzte Fixes und strategische Empfehlungen – so aufbereitet, dass auch Nicht-Entwickler fundierte Entscheidungen treffen können.",
},
{
title: "Sie entscheiden, wie es weitergeht",
text: "Mit mir, mit Ihrem eigenen Team oder gar nicht.",
title: "Sie entscheiden über die nächsten Schritte",
text: "Gemeinsam mit mir, intern mit Ihrem Team oder zu einem späteren Zeitpunkt.",
},
],
orientation: "3.500 EUR für eine feste Woche",
orientationNote:
"Der Umfang ist eine Woche meiner Zeit, 35 Stunden. Eine Woche behebt nicht alles: Wenn ich im ersten Gespräch sehe, dass sie nicht reicht, um Ihnen zu nützen, sage ich Ihnen das.",
"Der Rahmen umfasst eine Arbeitswoche (35 Stunden). Sollte sich im Erstgespräch zeigen, dass dieser Rahmen für Ihre Problemstellung nicht ausreicht, spreche ich das direkt an.",
},
{
id: "automation",
service: "Prozessautomatisierung und Systemintegration",
need: "Wir wollen einen Ablauf automatisieren",
forWhom:
"Unternehmen, in denen Menschen Daten zwischen Programmen kopieren oder dieselben Schritte wiederholen",
"Unternehmen, in denen Daten manuell zwischen Tools übertragen werden oder repetitive Abläufe Zeit kosten",
headline:
"Systeme, die Arbeit aneinander weitergeben, damit Menschen es nicht tun müssen.",
"Systeme nahtlos verbinden – manuelle Routineaufgaben und Medienbrüche eliminieren.",
intro:
"Jemand exportiert hier eine Liste, tippt sie dort ein und schreibt eine E-Mail dazu. Ich verbinde die Programme, die Sie schon nutzen, sodass wiederkehrende Schritte von selbst laufen und Ihre Leute die Arbeit machen können, für die man sie braucht.",
"Daten exportieren, manuell abtippen, Bestätigungen per Hand verschicken: Ich verknüpfe Ihre bestehende Software über APIs, damit Datenflüsse automatisch ineinandergreifen und Ihr Team sich auf wertschöpfende Aufgaben konzentrieren kann.",
youGet: [
"Verbindungen zwischen Ihren Systemen über deren Schnittstellen (APIs)",
"Wiederkehrende Abläufe, die ohne Handarbeit laufen",
"Wo es hilft, Schritte mit KI: sortieren, zusammenfassen, Dokumente lesen",
"Eine kurze Beschreibung, wie es funktioniert, damit es gewartet werden kann",
"Direkte Schnittstellenanbindung (APIs) Ihrer bestehenden Software",
"Vollautomatisierte Workflows ohne manuelle Zwischenschritte",
"Gezielter KI-Einsatz: Intelligentes Auslesen von Belegen, Vorstrukturieren und Validieren",
"Kompakte Dokumentation für stabilen Betrieb und einfache spätere Wartung",
],
steps: [
{
@@ -229,58 +233,59 @@ export const de: Content = {
text: "Sie beschreiben den Ablauf und welche Programme beteiligt sind.",
},
{
title: "Ich sehe mir an, wie es heute läuft",
text: "Schritt für Schritt, mit den Menschen, die es machen. Oft lässt sich ein Teil automatisieren, nicht alles.",
title: "Ist-Analyse des Prozesses",
text: "Wir analysieren den bestehenden Ablauf mit den Beteiligten und identifizieren die lohnendsten Automatisierungspotenziale.",
},
{
title: "Ich verbinde die Systeme",
text: "Einen Schritt nach dem anderen. Sie testen es mit echten Fällen, bevor es die Handarbeit ersetzt.",
title: "Schrittweise Integration",
text: "Die Anbindung erfolgt modular und wird mit realen Datensätzen validiert, bevor der Prozess produktiv geschaltet wird.",
},
{
title: "Es läuft von selbst",
text: "Sie bekommen eine Notiz dazu, was es tut und was zu prüfen ist, wenn sich eines der Programme ändert.",
title: "Automatisierter Betrieb",
text: "Der Prozess läuft selbstständig. Sie erhalten eine prägnante Dokumentation für Betrieb und zukünftige Anpassungen.",
},
],
orientation: "100 EUR pro Stunde, nach Schätzung",
orientationNote:
"Wie lange es dauert, hängt vom Ablauf ab. Deshalb gibt es keinen Preis, bevor ich ihn gesehen habe. Gebühren für die Programme selbst zahlen Sie.",
"Der Aufwand hängt von der Komplexität des Workflows ab. Nach der Erstanalyse erhalten Sie eine verbindliche Schätzung. Eventuelle Gebühren für Drittsoftware tragen Sie direkt.",
},
{
id: "website",
service: "Gestaltung und Entwicklung von Websites",
need: "Ich brauche einfach eine Website",
need: "Ich brauche eine professionelle Unternehmenswebsite",
forWhom:
"Unternehmen und Selbstständige, die sich nicht selbst darum kümmern wollen",
headline: "Eine Website, für Sie gebaut und betreut.",
"Unternehmen und Selbstständige, die eine schlüsselfertige, moderne Weblösung suchen",
headline:
"Ihre Unternehmenswebsite: Maßgeschneidert entwickelt und zuverlässig betreut.",
intro:
"Sie wollen keinen Website-Baukasten lernen und sich nicht mit Hosting beschäftigen. Sie sagen mir, was Ihr Unternehmen macht und was die Seite erreichen soll. Ich gestalte sie, baue sie und bringe sie online.",
"Keine zeitraubenden Baukästen, keine Standard-Templates und kein Ärger mit Hosting: Sie schildern mir Ihr Angebot und Ihre Ziele – ich übernehme Konzeption, Design, technische Umsetzung und den Go-Live.",
youGet: [
"Ein Design für Ihr Unternehmen, keine Vorlage",
"Funktioniert auf Handy, Tablet und Desktop",
"Um das Hosting kümmere ich mich, Sie betreuen keinen Server",
"Änderungen per E-Mail: Sie schreiben, was Sie brauchen, ich setze es um",
"Individuelles Design, abgestimmt auf Ihr Unternehmen – keine austauschbare Vorlage",
"Optimale Darstellung auf Smartphones, Tablets und Desktops (Responsive Design)",
"Hosting, Domain und SSL aus einer Hand – ohne technischen Aufwand für Sie",
"Änderungen unkompliziert per E-Mail: Sie senden Ihre Wünsche, ich setze sie zeitnah um",
],
steps: [
{
title: FIRST_CALL,
text: "Sie erzählen mir von Ihrem Unternehmen und wofür die Website da ist.",
text: "Sie erzählen mir von Ihrem Unternehmen, Ihrer Zielgruppe und den Zielen der Website.",
},
{
title: "Ein Entwurf zum Ansehen",
text: "Sie bekommen eine erste Version zum Durchklicken. Wir passen sie an, bis sie passt.",
title: "Interaktiver Entwurf",
text: "Sie erhalten einen ersten klickbaren Entwurf und wir stimmen das Feintuning gemeinsam ab.",
},
{
title: "Ich baue sie und bringe sie online",
text: "Mit Ihren Texten und Bildern und einem Kontaktformular. Sie geben sie frei, bevor sie live geht.",
title: "Umsetzung & Go-Live",
text: "Technische Fertigstellung mit Ihren Inhalten, optimierten Ladezeiten und Kontaktmöglichkeiten. Online geht es erst nach Ihrer Freigabe.",
},
{
title: "Änderungen danach",
text: "Ein neues Foto oder ein geänderter Preis: Sie schreiben mir eine E-Mail.",
title: "Laufende Pflege",
text: "Neue Inhalte, aktuelle Öffnungszeiten oder geänderte Preise: Eine kurze Nachricht genügt.",
},
],
orientation: "Ab 3.800 EUR, einmalig",
orientationNote:
"Das gilt für eine typische Unternehmenswebsite. Die Betreuung danach kostet 89 EUR im Monat.",
"Gilt für eine typische, mehrseitige Unternehmenswebsite. Die spätere Betreuung liegt bei 89 EUR im Monat.",
},
],
scenes: {
@@ -289,33 +294,37 @@ export const de: Content = {
talkLength: "etwa 20 Minuten",
days: ["Mo", "Di", "Mi", "Do", "Fr"],
daysNote: "zum Beispiel drei Tage pro Woche",
review: "fertige Teile gehen an Sie zur Durchsicht",
review: "fertige Zwischenstände gehen an Sie zur Durchsicht",
week: "Woche {n}",
monthEnd: "Monatsende",
notice: "zwei Wochen Frist",
repair: "Wackliges wird getestet und behoben",
summaryParts: ["gefunden", "geändert", "als Nächstes"],
summaryNote: "so geschrieben, dass Sie folgen können",
options: ["weiter mit mir", "Ihr eigenes Team", "hier aufhören"],
repair: "Kritische Stellen testen & stabilisieren",
summaryParts: ["Befunde", "Fixes", "Nächste Schritte"],
summaryNote: "klar und verständlich dokumentiert",
options: [
"Zusammenarbeit fortsetzen",
"Übergabe an Ihr Team",
"Projekt abschließen",
],
online: "online",
exampleDomain: "ihrefirma.de",
firstVersion: "eine erste Version zum Durchklicken",
approve: "Sie geben frei, bevor es live geht",
changeByEmail: "Sie schreiben, ich setze es um",
firstVersion: "Erster klickbarer Entwurf",
approve: "Freigabe vor dem Go-Live",
changeByEmail: "Änderungen einfach per E-Mail",
tools: ["Shop", "Buchhaltung", "E-Mail", "CRM"],
byHand: "heute: von Hand kopiert",
wiring: "Schritt für Schritt verbunden",
running: "die Schritte laufen ohne Handarbeit",
byHand: "Bisher: manuelle Übertragung",
wiring: "Schrittweise integriert",
running: "Abläufe laufen vollautomatisch",
},
},
automation: {
label: "Prozessautomatisierung",
title: {
lead: "Ihre Programme erledigen die Routine.",
rest: "Niemand tippt mehr ab.",
lead: "Routineaufgaben automatisieren.",
rest: "Medienbrüche und Fehlerquellen eliminieren.",
},
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:",
"In vielen Unternehmen werden Daten noch manuell von einer Software in die nächste übertragen: exportieren, abtippen, Benachrichtigungen versenden. Gezielte Automatisierung verknüpft Ihre Systeme über APIs, sodass Prozesse nahtlos im Hintergrund ablaufen. Drei typische Beispiele:",
examplesLabel: "Beispielabläufe",
running: "läuft",
runComplete: "Durchlauf fertig",
@@ -323,21 +332,21 @@ export const de: Content = {
byHand: "Von Hand",
automated: "Automatisiert",
kinds: {
trigger: "Auslöser: etwas passiert",
rule: "Regel: eine feste Prüfung",
ai: "KI-Schritt: liest oder sortiert",
action: "Aktion: ein System tut etwas",
human: "Mensch: entscheidet die unklaren Fälle",
trigger: "Auslöser: ein Ereignis tritt ein",
rule: "Regel: vordefinierte Prüfung",
ai: "KI-Schritt: automatisiertes Auslesen oder Sortieren",
action: "Aktion: System führt Operation aus",
human: "Menschliche Prüfung: Freigabe bei Grenzfällen",
},
workflows: {
order: {
name: "Bestellung bis Rechnung",
summary:
"Im Shop geht eine neue Bestellung ein. Rechnung, Kundendatensatz und Bestätigung folgen, ohne dass jemand tippt.",
"Geht im Online-Shop eine Bestellung ein, werden Rechnung, CRM-Eintrag und Bestätigung vollautomatisch erzeugt.",
byHand:
"Jemand öffnet die Bestellung, schreibt die Rechnung, aktualisiert den Kundendatensatz und verschickt eine E-Mail.",
"Manuell: Bestellung manuell prüfen, Rechnung erstellen, Kundendaten im CRM pflegen und Bestätigung versenden.",
automated:
"Die Bestellung stößt alles an. Menschen sehen nur das fertige Ergebnis.",
"Automatisiert: Die Bestellung stößt alle Folgeschritte an – Ihr Team behält den Überblick.",
nodes: {
shop: {
system: "Shop",
@@ -369,11 +378,11 @@ export const de: Content = {
documents: {
name: "Eingehende Dokumente",
summary:
"Rechnungen kommen als PDF per E-Mail. Ein KI-Schritt liest sie, eine Regel prüft das Ergebnis, und ein Mensch sieht nur die unklaren Fälle.",
"Eingehende PDF-Rechnungen werden per KI strukturiert ausgelesen und validiert – Mitarbeiter greifen nur bei Grenzfällen ein.",
byHand:
"Jemand öffnet jedes PDF, liest Lieferant, Betrag und Datum ab und tippt sie in die Buchhaltung.",
"Manuell: Jedes Dokument einzeln öffnen, Kopfdaten ablesen und händisch in die Buchhaltung übertragen.",
automated:
"Klare Fälle werden direkt gebucht. Unklare gehen mit dem Dokument im Anhang an einen Menschen.",
"Automatisiert: Eindeutige Belege werden direkt verbucht, unklare Fälle zur kurzen manuellen Freigabe vorgelegt.",
nodes: {
inbox: {
system: "Posteingang",
@@ -392,20 +401,20 @@ export const de: Content = {
log: "automatisch gebucht",
},
ask: {
system: "Ein Mensch",
label: "Prüfen, entscheiden",
log: "unklar: zur Prüfung an einen Menschen",
system: "Mitarbeiter",
label: "Prüfen & freigeben",
log: "Grenzfall: Zur manuellen Prüfung vorgelegt",
},
},
},
lead: {
name: "Anfrage bis Nachfassen",
summary:
"Jemand füllt das Kontaktformular aus. Der Kontakt wird angelegt, die richtige Person erfährt davon, und eine Erinnerung sorgt dafür, dass niemand es vergisst.",
"Geht eine Anfrage ein, wird der Lead automatisch im CRM erfasst, das Vertriebsteam benachrichtigt und eine Wiedervorlage angelegt.",
byHand:
"Jemand kopiert die Anfrage ins CRM, leitet sie per E-Mail weiter und hofft, dass das Nachfassen nicht vergessen wird.",
"Manuell: Anfrage händisch ins CRM kopieren, per Mail weiterleiten und manuell an das Nachfassen denken.",
automated:
"Die Anfrage wird abgelegt, zugewiesen und zum geplanten Zeitpunkt nachverfolgt.",
"Automatisiert: Vollständige Erfassung, sofortige Zuweisung und verlässliche Wiedervorlage.",
nodes: {
form: {
system: "Website",
@@ -439,25 +448,25 @@ export const de: Content = {
{
title: "Wann es sich lohnt",
items: [
"Dieselben Schritte wiederholen sich täglich oder wöchentlich",
"Daten werden von einem Programm ins andere getippt",
"Fehler passieren, weil die Arbeit eintönig ist",
"Dieselben Arbeitsschritte wiederholen sich täglich oder wöchentlich",
"Daten werden manuell zwischen verschiedenen Programmen übertragen",
"Fehler und Verzögerungen entstehen durch monotone Routinearbeiten",
],
},
{
title: "Was bei Menschen bleibt",
title: "Was beim Team bleibt",
items: [
"Entscheidungen und Ausnahmen",
"Alles, was ein Kunde von einem Menschen hören sollte",
"Das letzte Wort, wenn die Automatisierung unsicher ist",
"Strategische Entscheidungen und fachliche Ausnahmen",
"Persönlicher Kundenkontakt und Beratung",
"Die finale Entscheidung, wenn ein Fall unklar ist",
],
},
{
title: "Was ich von Ihnen brauche",
title: "Was ich von Ihnen benötige",
items: [
"Zugang zu den Programmen und ihren Schnittstellen (APIs)",
"Jemanden, der den Ablauf so kennt, wie er heute gemacht wird",
"Echte Beispiele zum Testen",
"Zugänge zu den beteiligten Systemen und deren Schnittstellen (APIs)",
"Einblicke in den bisherigen Ablauf durch die zuständigen Kollegen",
"Reale Beispieldaten zum Testen und Validieren",
],
},
],
@@ -466,10 +475,10 @@ export const de: Content = {
label: "Web-Präsentationen",
title: { lead: "Eine Präsentation als Link.", rest: "Nicht als Anhang." },
intro:
"Die meisten Präsentationen sind noch Foliendateien: ein festes Format, verschickt als Anhang. Ich baue Präsentationen als Websites. Sie öffnen sich in jedem Browser, passen sich dem Bildschirm an, auf dem sie gezeigt werden, und können Dinge enthalten, die eine Folie nicht kann.",
"Klassische Präsentationen sind starre Foliendateien, die als schwerfällige Anhänge verschickt werden. Ich entwickle Präsentationen als interaktive Web-Erlebnisse: direkt im Browser abrufbar, responsiv für jedes Endgerät und mit multimedialen Möglichkeiten, die statische Folien nicht bieten.",
compare: {
description:
"Eine Folie behält auf jedem Bildschirm ihr festes Format und wird auf dem Handy zu klein zum Lesen. Eine Web-Präsentation ordnet ihren Inhalt für jeden Bildschirm neu an.",
"Klassische Folien behalten ihr Format starr bei und sind auf Smartphones kaum lesbar. Eine Web-Präsentation passt Layout und Typografie responsiv an die jeweilige Bildschirmgröße an.",
slides: "Foliendatei",
web: "Web-Präsentation",
pickScreen: "Gezeigt auf",
@@ -487,20 +496,20 @@ export const de: Content = {
},
reasons: [
{
title: "Passt auf jeden Bildschirm",
text: "Eine Folie hat ein festes Format. Eine Web-Präsentation ordnet sich für Beamer, Laptop und Handy jeweils neu an.",
title: "Optimal auf jedem Bildschirm",
text: "Egal ob Beamer, Laptop oder Smartphone: Layout und Typografie passen sich der jeweiligen Bildschirmgröße automatisch an.",
},
{
title: "Ein Link, ein Stand",
text: "Niemand muss fragen, welche Datei die aktuelle ist. Sie ändern es an einer Stelle, und jeder, der den Link öffnet, sieht diesen Stand.",
title: "Ein zentraler Link, immer aktuell",
text: "Keine veralteten Datei-Versionen mehr im Umlauf: Aktualisierungen sind sofort für jeden Empfänger live verfügbar.",
},
{
title: "Zeigt das Echte",
text: "Aktuelle Zahlen, eine funktionierende Demo oder ein klickbarer Prototyp können direkt in der Präsentation stehen, statt eines Screenshots davon.",
title: "Echte Interaktivität statt Screenshots",
text: "Binden Sie Live-Daten, funktionierende Demos oder klickbare Prototypen direkt ein – statt statischer Bildschirmfotos.",
},
{
title: "Auch danach noch nützlich",
text: "Nach dem Termin ist sie eine Seite, die man allein lesen, weitergeben und wiederfinden kann.",
title: "Bleibender Eindruck nach dem Termin",
text: "Nach dem Pitch bleibt Ihre Präsentation als hochwertige Landingpage abrufbar, teilbar und suchbar.",
},
],
goodFor: {
@@ -513,65 +522,69 @@ export const de: Content = {
],
},
honest: {
title: "Wann Folien reichen",
text: "Für einen einzelnen internen Termin ist eine Foliendatei schneller und günstiger. Eine Web-Präsentation lohnt sich, wenn sie oft gezeigt wird, an viele Menschen geht oder für Ihr Unternehmen steht.",
title: "Wann klassische Folien genügen",
text: "Für ein kurzes internes Meeting ist eine PowerPoint- oder Keynote-Datei die pragmatischere Lösung. Eine Web-Präsentation lohnt sich bei wichtigen Pitches, wiederkehrenden Vorträgen oder wenn sie Ihr Unternehmen repräsentiert.",
},
cta: "Nach einer Präsentation fragen",
},
story: {
hello: "Für ein Vorhaben im Web brauchen Sie jemanden, der es baut.",
services: "Als Erstes klären wir, was Sie wirklich brauchen.",
hello:
"Für anspruchsvolle Webprojekte brauchen Sie verlässliche Umsetzungskompetenz.",
services: "Zu Beginn klären wir Ihre konkreten Ziele und Anforderungen.",
automation:
"Manchmal ist es gar keine neue Software, sondern weniger Handarbeit.",
"Oft braucht es keine neue Software, sondern nahtlos verzahnte Prozesse.",
presentations:
"Und manchmal ist es ein Termin, bei dem Sie überzeugen müssen.",
work: "Am Ende steht etwas, das läuft.",
faq: "Vorher bleiben meist ein paar Fragen.",
contact: "Und dann beginnt es mit einer E-Mail.",
"Oder eine Präsentation, die Ihr Gegenüber nachhaltig überzeugt.",
work: "Im Ergebnis: Lösungen, die dauerhaft stabil und performant funktionieren.",
faq: "Häufige Fragen vor dem Start.",
contact: "Lassen Sie uns unverbindlich sprechen.",
},
freelance: {
metaTitle: "Freelance-Webentwickler für Ihr Team | Marc Mintel",
metaDescription:
"Für welche Projekte ich passe, womit ich arbeite (React, Next.js, TypeScript) und wie ich Änderungen absichere, bevor sie live gehen.",
"Für welche Projekte ich passe, womit ich arbeite (React, Next.js, TypeScript) und wie automatisierte Tests Deployments absichern.",
label: "Freelance",
title: {
lead: "Ein Entwickler für Ihr Team.",
rest: "Die technischen Details.",
lead: "Erfahrene Verstärkung für Ihr Team.",
rest: "Technische Details & Arbeitsweise.",
},
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.",
"Für Engineering Leads, CTOs und Produktteams: Hier erfahren Sie, bei welchen Vorhaben ich unterstützen kann, auf welchen Tech-Stack ich setze und wie meine Qualitätssicherung aufgebaut ist.",
pipelineLabel: "Absicherung",
faq: {
title: { lead: "Gut zu wissen,", rest: "bevor Sie buchen." },
items: [
{
question: "Wie lange sind wir gebunden?",
question: "Wie flexibel ist die Zusammenarbeit?",
answer:
"Projektarbeit wird nach Aufwand abgerechnet. Beide Seiten können mit zwei Wochen Frist zum Monatsende kündigen.",
},
{
question:
"Können Sie mit unserem bestehenden Team und Code arbeiten?",
"Können Sie in ein bestehendes Team und eine gewachsene Codebasis einsteigen?",
answer:
"Ja. Ich habe jahrelang in Agenturen und Produktteams gearbeitet, der Einstieg in ein bestehendes Projekt ist mir vertraut.",
"Ja, absolut. Durch langjährige Erfahrung in Agenturen und SaaS-Produktteams finde ich mich schnell in gewachsenen Codebasen und bestehenden Team-Workflows zurecht.",
},
{
question: "Wem gehört der Code?",
answer:
"Ihnen. Code und Design gehören Ihnen, und Sie können beides an einen anderen Entwickler übergeben.",
"Vollständig Ihnen. Sämtlicher Code und alle Entwürfe gehen in Ihr Eigentum über – ohne Abhängigkeiten oder Vendor Lock-in.",
},
{
question: "Was machen Sie nicht?",
question: "Welche Bereiche decken Sie nicht ab?",
answer:
"Mobile Apps für die App-Stores, Windows-Software und den Betrieb Ihrer Server. Wenn Ihr Projekt das braucht, sage ich das im ersten Gespräch.",
"Native Mobile Apps (iOS/Android Store-Apps), Windows-Desktop-Software und Server-Hardware-Administration. Sollte Ihr Projekt das erfordern, kommuniziere ich das direkt im Erstgespräch.",
},
],
},
cases: { lead: "Wofür Teams mich buchen.", rest: "Zwei typische Fälle." },
booking: {
label: "Buchung",
title: { lead: "Gebucht wird monatsweise.", rest: "Nicht tageweise." },
text: "Ich arbeite an festen Wochentagen an Ihrem Projekt, vereinbart für jeweils einen Monat. Es gibt kein Paket zu kaufen: Sie zahlen die Stunden, die ich tatsächlich gearbeitet habe.",
title: {
lead: "Monatsweise Zusammenarbeit.",
rest: "Planbare Kapazitäten.",
},
text: "Ich stehe Ihnen an fest vereinbarten Wochentagen zur Verfügung, jeweils gebucht im Monatskontingent. Sie zahlen transparent nur die tatsächlich geleisteten Stunden.",
rate: { label: "Pro Stunde", amount: "100 EUR", note: "netto" },
example: {
label: "Beispiel: 2 Tage pro Woche",
@@ -580,14 +593,14 @@ export const de: Content = {
},
terms: [
"Feste Wochentage, vereinbart für jeweils einen Monat",
"Eine Rechnung pro Monat, mit den erfassten Stunden",
"Monatliche Abrechnung mit detailliertem Stundennachweis",
"Beide Seiten können mit zwei Wochen Frist zum Monatsende kündigen",
"Einzelne Tage buche ich nicht",
"Keine Buchung einzelner Tage",
],
cta: "Verfügbarkeit anfragen",
remote: {
title: "Remote, ohne feste Bürozeiten",
text: "Ich arbeite ortsunabhängig und teile mir die Zeit selbst ein. Für Meetings mit Ihrem Team bin ich nach Absprache da. Eine durchgehende Erreichbarkeit über den ganzen Tag gibt es nicht; dafür arbeite ich in der übrigen Zeit ungestört an Ihrem Projekt.",
title: "Remote & fokussiertes Arbeiten",
text: "Ich arbeite ortsunabhängig mit flexibler Zeiteinteilung. Für Team-Meetings, Pair Programming und Absprachen stehe ich nach Vereinbarung zuverlässig bereit. Statt permanenter Unterbrechungen setze ich auf fokussierte Deep-Work-Phasen – so kommt Ihr Projekt zügig und in hoher Qualität voran.",
},
},
teaser: {
@@ -598,32 +611,35 @@ export const de: Content = {
},
technology: {
label: "Technik",
title: { lead: "Für welche Projekte", rest: "ich der Richtige bin." },
title: {
lead: "Projekte & Schwerpunkte:",
rest: "Wo meine Stärken liegen.",
},
fit: [
{
title: "Passt gut",
title: "Ideale Einsatzbereiche",
items: [
"Web-Apps: Dashboards, Portale, interne Werkzeuge",
"Interfaces, bei denen Design und Bedienbarkeit zählen",
"Interfaces, bei denen Design, Performance und UX zählen",
"Unternehmenswebsites, auch in mehreren Sprachen",
"Web3-Frontends: Wallets, Live-Daten, Dashboards",
"Automatisierung: Systeme und ihre APIs verbinden",
"Prozessautomatisierung: Anbindung und Synchronisation über APIs",
],
},
{
title: "Auch möglich",
title: "Ebenfalls abgedeckt",
items: [
"Das Backend, das eine App braucht: APIs, Login, Integrationen",
"Werkzeuge für die Kommandozeile",
"Bestehenden Code übernehmen und aufräumen",
"App-Backend: REST- und GraphQL-APIs, Authentifizierung, Datenbanken",
"Entwickler-Werkzeuge und CLI-Tools",
"Refactoring und Modernisierung bestehender Codebasen",
],
},
{
title: "Nicht mein Gebiet",
title: "Außerhalb meines Fokus",
items: [
"Mobile Apps für die App-Stores",
"Windows-Software",
"Serverbetrieb, spezialisierte Datenbankarbeit",
"Native Mobile Apps für App-Stores",
"Klassische Windows-Software",
"Server-Hardwarebetrieb und dedizierte Datenbankadministration",
],
},
],
@@ -643,9 +659,9 @@ export const de: Content = {
items: ["Automatisierte Tests", "Docker", "CI/CD"],
},
],
pipelineTitle: "Was passiert, bevor eine Änderung live geht.",
pipelineTitle: "Qualitätssicherung vor jedem Deployment.",
pipelineIntro:
"Software hängt zusammen: Eine Änderung an einer Stelle kann eine andere kaputt machen. Ich sichere mit automatisierten Tests ab, was ich baue, und jede Änderung muss sie bestehen, bevor sie veröffentlicht wird. So sieht ein solcher Durchlauf aus.",
"In komplexen Webanwendungen können lokale Code-Änderungen unerwartete Seiteneffekte auslösen. Deshalb sichere ich alle Entwicklungen mit einer automatisierten CI/CD-Pipeline und Tests ab. Jede Änderung muss alle Qualitätsprüfungen bestehen, bevor sie live geschaltet wird. So sieht ein Durchlauf aus:",
pipeline: {
simulate: "Änderung simulieren in",
scenarios: {
@@ -678,16 +694,16 @@ export const de: Content = {
stages: ["Lint", "Typen", "Tests", "Deploy"],
explanations: [
{
title: "Eine Änderung kommt herein",
text: "Im Bereich {area} wird etwas geändert. Bevor es live gehen kann, wird das ganze Projekt automatisch geprüft.",
title: "Code-Änderung eingereicht",
text: "Im Modul {area} wird eine Änderung committet. Vor dem Deployment wird das gesamte Projekt automatisch auf Herz und Nieren geprüft.",
},
{
title: "Ein Test schlägt fehl, die Freigabe ist gesperrt",
text: "Die Änderung hat an einer anderen Stelle etwas kaputt gemacht. Das fällt hier auf, bei mir, und nichts davon erreicht Ihre Nutzer.",
title: "Test schlägt fehl – Release blockiert",
text: "Die Änderung hat einen unerwarteten Seiteneffekt ausgelöst. Die Test-Pipeline schlägt an und blockiert das Deployment – fehlerhafter Code erreicht niemals Ihre Nutzer.",
},
{
title: "Behoben, erneut geprüft, veröffentlicht",
text: "Ich repariere, was kaputtgegangen ist, der Durchlauf besteht, und erst dann geht die Änderung live.",
title: "Behoben, verifiziert und veröffentlicht",
text: "Die Ursache wird korrigiert, die Pipeline läuft vollständig grün durch und erst dann geht die Änderung sicher live.",
},
],
runAgain: "Erneut starten",
@@ -707,50 +723,50 @@ export const de: Content = {
blocked: "Freigabe gesperrt",
released: "veröffentlicht",
footnote:
"Eine Illustration mit erfundenen Dateinamen und Zahlen, einem echten Testlauf nachempfunden. Tests finden nicht jeden Fehler, aber diese Art schon.",
"Exemplarische Darstellung eines realen CI/CD-Pipelineschritts. Automatisierte Tests fangen Regressionsfehler frühzeitig und zuverlässig ab.",
},
},
working: {
label: "Zusammenarbeit",
title: {
lead: "So läuft die Zusammenarbeit.",
rest: "Direkt und nachvollziehbar.",
rest: "Direkt, transparent und verbindlich.",
},
principles: [
{
title: "Ein Ansprechpartner",
text: "Sie sprechen mit mir, und ich bin derjenige, der die Arbeit macht.",
title: "Fester Ansprechpartner",
text: "Sie sprechen direkt mit mir – und ich bin auch derjenige, der Ihr Projekt technisch umsetzt.",
},
{
title: "Stunden, die Sie nachprüfen können",
text: "Ich erfasse meine Zeit. Die Monatsrechnung zeigt, wofür die Stunden angefallen sind.",
title: "Transparente Zeiterfassung",
text: "Sämtliche Stunden werden minutengenau erfasst. Die Monatsrechnung schlüsselt exakt auf, woran gearbeitet wurde.",
},
{
title: "Sorgfältige Arbeit",
text: "Ich teste, was ich baue, bevor ich es übergebe, und sage es, wenn etwas noch nicht fertig ist oder ich mir nicht sicher bin.",
title: "Verlässliche Qualität",
text: "Ich übergebe ausschließlich getesteten Code und kommuniziere Risiken oder Unklarheiten frühzeitig und offen.",
},
{
title: "Was ich baue, gehört Ihnen",
text: "Code und Design gehören Ihnen. Sie können beides an einen anderen Entwickler übergeben.",
title: "Volles Eigentum",
text: "Code und Design gehören zu 100 % Ihnen. Eine Übergabe an interne Teams oder andere Entwickler ist jederzeit problemlos möglich.",
},
],
diagram: {
description:
"Oft geht eine Anfrage durch mehrere Hände, bevor sie beim Entwickler ankommt. Bei mir gibt es eine direkte Leitung zwischen Ihnen und dem, der die Arbeit macht.",
"In vielen Agenturen wandert ein Briefing durch viele Hände, bevor es beim Entwickler ankommt. Bei mir haben Sie den direkten Draht zu demjenigen, der den Code schreibt.",
chain: ["Sie", "Vertrieb", "Manager", "Designer", "Entwickler"],
you: "Sie",
me: "Ich",
often: "oft",
withMe: "bei mir",
oftenLong: "oft: eine Anfrage wird weitergereicht",
withMeLong: "bei mir: eine direkte Leitung",
oftenLong: "Klassisch: Viele Zwischenstationen und Informationsverluste",
withMeLong: "Bei mir: Direkter Austausch ohne Reibungsverluste",
},
},
work: {
label: "Meine Arbeit",
title: {
lead: "Zwei Websites, die ich gebaut habe.",
rest: "Beide sind live.",
lead: "Ausgewählte Web-Projekte.",
rest: "Erfolgreich im Live-Einsatz.",
},
items: {
"klz-cables.com": {
@@ -777,36 +793,37 @@ export const de: Content = {
openLive: "Live-Website öffnen",
desktopAlt: "{name} auf einem Desktop-Bildschirm",
phoneAlt: "{name} auf einem Handy",
note: "Neben der Arbeit für Kunden baue ich eigene Software, unter anderem ein System in Rust und Solidity, das auf sieben Blockchains läuft.",
note: "Neben Kundenprojekten entwickle ich eigene Software – unter anderem ein System in Rust und Solidity, das auf sieben Blockchains im Produktiveinsatz ist.",
},
faq: {
label: "Fragen",
title: { lead: "Gut zu wissen,", rest: "bevor wir sprechen." },
items: [
{
question: "Ich bin kein Technikmensch. Ist das ein Problem?",
question:
"Ich habe keinen technischen Hintergrund. Ist das ein Problem?",
answer:
"Nein. Ich erkläre in verständlicher Sprache, was ich tue, und Sie können jederzeit nachfragen. Code müssen Sie nicht lesen.",
"Überhaupt nicht. Ich erkläre technische Zusammenhänge in verständlicher Sprache. Sie müssen weder Code lesen noch Fachjargon beherrschen, um fundierte Entscheidungen zu treffen.",
},
{
question: "Was kostet das?",
question: "Was kostet ein Projekt?",
answer:
"Das hängt davon ab, was Sie brauchen. Nach einem kurzen Gespräch bekommen Sie ein schriftliches Angebot. Ich fange erst an, wenn Sie zugestimmt haben.",
"Das richtet sich nach dem konkreten Projektumfang. Nach einem kurzen Kennenlernen erhalten Sie ein transparentes, schriftliches Angebot. Die Arbeit beginnt erst nach Ihrer ausdrücklichen Freigabe.",
},
{
question: "Wem gehört, was Sie bauen?",
question: "Wem gehört das Projektergebnis?",
answer:
"Ihnen. Code und Design gehören Ihnen, und Sie können beides an einen anderen Entwickler übergeben.",
"Vollständig Ihnen. Sämtlicher Code, Designs und Inhalte gehören Ihnen – ohne Abhängigkeiten oder Vendor Lock-in.",
},
{
question: "Wer kümmert sich danach um die Website?",
question: "Wer übernimmt die spätere Betreuung der Website?",
answer:
"Ich, wenn Sie das möchten. Für 89 EUR im Monat läuft die Website auf Servern in Deutschland, und kleine Änderungen sind enthalten: Sie schreiben mir eine E-Mail. Ein Redaktionssystem brauchen Sie nicht. E-Mail-Postfächer bleiben bei Ihrem Anbieter.",
"Auf Wunsch übernehme ich die laufende Betreuung. Für 89 EUR im Monat ist das Hosting auf sicheren Servern in Deutschland abgedeckt und kleine inhaltliche Anpassungen sind inklusive. Sie müssen sich um keine Technik kümmern. Bestehende E-Mail-Postfächer bleiben unverändert bei Ihrem Anbieter.",
},
{
question: "Wie erreiche ich Sie?",
question: "Wie erreichen wir Sie?",
answer:
"Per E-Mail oder Videocall. Ich arbeite remote; einen Termin vereinbaren wir so, dass er für Sie passt.",
"Am besten per E-Mail oder im Video-Call. Termine stimmen wir flexibel so ab, wie es in Ihren Zeitplan passt.",
},
],
},
@@ -815,7 +832,7 @@ export const de: Content = {
{ text: "REDEN", tone: "bits" },
{ text: "WIR.", tone: "solid" },
],
lead: "Wählen Sie aus, was Sie brauchen, und die E-Mail schreibt sich von selbst. Oder schreiben Sie mir direkt:",
lead: "Wählen Sie Ihr Anliegen aus, um eine passende E-Mail-Vorlage zu öffnen – oder schreiben Sie mir direkt:",
newMessage: "Neue Nachricht",
draft: "Entwurf",
need: "Ich brauche",
@@ -830,40 +847,40 @@ export const de: Content = {
id: "developer",
label: "Einen Entwickler",
draft: {
subject: "Ein Entwickler für unser Produkt",
body: `${GREETING}\n\nwir arbeiten an [was Sie bauen] und brauchen Unterstützung bei [was als Nächstes ansteht].\n\nEin erstes Gespräch würde uns um den [Datum oder Woche] passen.\n\n${SIGN_OFF}`,
subject: "Entwickler für unser Produkt",
body: `${GREETING}\n\nwir arbeiten an [Projekt / Produkt] und suchen Unterstützung bei [anstehende Aufgaben / Bereich].\n\nEin Kennenlernen würde uns um den [Datum oder Zeitraum] passen.\n\n${SIGN_OFF}`,
},
},
{
id: "rescue",
label: "Eine zuverlässige App",
label: "App stabilisieren",
draft: {
subject: "Unsere App soll zuverlässig werden",
body: `${GREETING}\n\nunsere App [Name oder kurze Beschreibung] läuft, aber [was immer wieder schiefgeht].\n\nKönnten Sie sich das ansehen?\n\n${SIGN_OFF}`,
subject: "Unterstützung bei App-Stabilisierung",
body: `${GREETING}\n\nunsere Anwendung [Name oder Kurzbeschreibung] läuft, allerdings [Schwachstellen / wiederkehrende Probleme].\n\nKönnen Sie sich das im Rahmen eines Code-Audits ansehen?\n\n${SIGN_OFF}`,
},
},
{
id: "automation",
label: "Automatisierung",
draft: {
subject: "Wir möchten einen Ablauf automatisieren",
body: `${GREETING}\n\nwir möchten [den Ablauf] automatisieren. Heute wird er von Hand in [beteiligte Programme] erledigt.\n\nKönnen wir darüber sprechen?\n\n${SIGN_OFF}`,
subject: "Prozessautomatisierung anfragen",
body: `${GREETING}\n\nwir möchten folgenden Ablauf automatisieren: [Ablauf beschreiben]. Aktuell wird dies manuell zwischen [beteiligte Systeme / Tools] erledigt.\n\nKönnen wir uns dazu kurz austauschen?\n\n${SIGN_OFF}`,
},
},
{
id: "website",
label: "Eine Website",
draft: {
subject: "Eine Website für mein Unternehmen",
body: `${GREETING}\n\nich brauche eine Website für [Ihr Unternehmen]. Sie soll [wofür sie da ist].\n\nWann könnten wir sprechen?\n\n${SIGN_OFF}`,
subject: "Neue Unternehmenswebsite",
body: `${GREETING}\n\nich plane eine neue Website für [Ihr Unternehmen]. Ziel der Seite ist [Zweck / Zielgruppe].\n\nWann passt Ihnen ein kurzes Erstgespräch?\n\n${SIGN_OFF}`,
},
},
{
id: "other",
label: "Etwas anderes",
draft: {
subject: "Eine Frage",
body: `${GREETING}\n\n[was Sie vorhaben]\n\n${SIGN_OFF}`,
subject: "Allgemeine Anfrage",
body: `${GREETING}\n\n[Ihr Anliegen]\n\n${SIGN_OFF}`,
},
},
],
+278 -264
View File
@@ -1,15 +1,15 @@
import type { Content } from "./types";
const SIGN_OFF = "Best regards";
const FIRST_CALL = "A first call, about 20 minutes";
const FIRST_CALL = "Intro call, about 20 minutes";
const GET_IN_TOUCH = "Get in touch";
/** The English texts of the site. de.ts holds the same in German. */
export const en: Content = {
site: {
title: "Freelance web developer for web apps & websites | Marc Mintel",
title: "Freelance Web Developer for Web Apps & Websites | Marc Mintel",
description:
"Freelance web developer with 15 years of experience. I build web apps, interfaces and websites with React, Next.js and TypeScript, and automate processes.",
"Freelance web developer with 15 years of experience. I build modern web apps, intuitive interfaces and websites with React, Next.js and TypeScript, and automate digital workflows.",
jobTitle: "Freelance web developer",
ogLocale: "en_US",
shareImageAlt:
@@ -40,23 +40,23 @@ export const en: Content = {
{ text: "& WEBSITES.", tone: "bits" },
],
lead: "Freelance web developer with 15 years of experience.",
leadStrong: "I build web apps, interfaces and websites.",
leadStrong: "I develop web apps, interfaces and modern websites.",
primaryCta: GET_IN_TOUCH,
secondaryCta: "What I do",
secondaryCta: "Services & Approach",
trust: [
"One contact, who builds it himself",
"An offer before anything costs money",
"Changes by email, no system to learn",
"Servers in Germany",
"Direct technical contact – end-to-end execution",
"Binding quote before project kickoff",
"Effortless updates by email – no CMS training needed",
"Hosted on secure servers in Germany",
],
},
hello: {
label: "Hello",
title: "I am Marc.",
lead: "I have been building for the web for 15 years: first in agencies, later as a senior developer, and now on my own.",
lead: "I have been engineering for the web for 15 years: first in digital agencies, later as a senior developer in product teams, and now as an independent software engineer.",
paragraphs: [
"My strength is the part people see and use: design and interface. I am also at home with what lies behind it, so I can build a complete application and not just its surface.",
"You work with me directly. Whether you run a product team or are commissioning something like this for the first time.",
"My primary focus is on what users see and interact with: thoughtful design and intuitive interfaces. Having deep expertise in backend architecture and APIs as well, I deliver complete, production-ready applications from a single source.",
"You work directly with me – whether you lead an established product team or are launching your first digital initiative.",
],
portraitAlt: "Marc Mintel, freelance web developer",
careerLabel: "The path so far",
@@ -66,70 +66,73 @@ export const en: Content = {
{
years: "2020 – 2023",
role: "Product companies",
place: "Senior software developer",
place: "Senior software engineer",
},
{
years: "Today",
role: "Independent",
place: "Working directly with clients",
place: "Direct collaboration with clients",
},
],
},
services: {
label: "Services",
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",
title: {
lead: "What are you planning?",
rest: "Tailored engineering for your goals.",
},
tablistLabel: "What are you planning?",
youGet: "What you receive",
howItRuns: "The process",
care: {
label: "After the launch",
title: "I keep looking after your website, if you want that.",
text: "You do not have to operate a system or maintain anything yourself. When something needs to change, you write me an email.",
label: "After launch",
title: "Ongoing maintenance and support – reliable and long-term.",
text: "No need to learn a complex CMS: for content updates or adjustments, a quick email is all it takes.",
price: {
label: "Care",
label: "Maintenance",
amount: "89 EUR",
note: "per month, net, cancel monthly",
},
includedLabel: "What is included",
included: [
"The website runs on servers in Germany",
"Address, security and technology are taken care of",
"Small changes: a text, a picture, new opening hours",
"No editing system, no login",
"Hosted on secure servers in Germany",
"Domain, SSL encryption and technical updates included",
"Minor updates: text adjustments, images or business hours",
"No complex CMS to manage, no maintenance burden on your end",
],
termsLabel: "Good to know",
terms: [
"The first three months are included in the project price.",
"Anything bigger, such as a new page, gets a price first.",
"I reply within two working days. There is no on-call service.",
"If you want to leave, you take everything with you. The website is yours.",
"The first three months are already included in the project price.",
"Larger additions (such as new subpages) are quoted transparently in advance.",
"Response time within two business days (no 24/7 on-call service).",
"No vendor lock-in: all code and content belong 100% to you.",
],
},
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",
title: "A clear, binding quote before project kickoff.",
text: "Send me a brief outline of your project. After a 20-minute intro call, you receive a transparent, written quote. Work only starts once you approve.",
cta: "Request a quote",
},
estimate: {
label: "What it costs",
title: "How you get to a price",
label: "Pricing & estimates",
title: "Transparent project estimates",
steps: [
{
title: "A call, about 20 minutes",
text: "You tell me what you need.",
title: "Intro call (approx. 20 minutes)",
text: "We discuss your goals, requirements and scope.",
},
{
title: "A written estimate",
text: "You see the estimated hours and what they include.",
title: "Written estimate",
text: "You receive a clear breakdown of estimated hours and deliverables.",
},
{
title: "You approve a budget",
text: "I bill the hours actually used and tell you early if it will not be enough.",
title: "Budget approval & billing",
text: "Work is billed against actual hours. If anything diverges from the estimate, I flag it early.",
},
],
orientationLabel: "For orientation",
net: "All prices net.",
cta: "Ask for an estimate",
cta: "Request an estimate",
},
paths: [
{
@@ -137,146 +140,150 @@ export const en: Content = {
service: "Web app and frontend development",
need: "We need a developer for our product",
forWhom: "Startups, product teams, agencies, Web3 teams",
headline: "An experienced developer who joins your project.",
headline: "Senior engineering power for your product team.",
intro:
"You have a product and more work than your team can handle. I work on agreed days of the week on what is next on your list: new features, the interface, or the parts nobody gets around to.",
"You have a product and more initiatives than your in-house team can deliver. I join on agreed days each week to tackle what matters most: new features, UI improvements, or technical refactoring.",
youGet: [
"Web apps, dashboards, customer portals and internal tools",
"Interfaces with attention to design and usability",
"Interfaces with a focus on design, performance and usability",
"Web3 frontends: wallet connection, live data, dashboards",
"Small tools and automation for recurring work",
"Custom tools and automation for recurring workflows",
],
steps: [
{
title: FIRST_CALL,
text: "You tell me what you are building and where you need help. If I am not the right person for it, I say so.",
text: "You walk me through your product and current needs. If my skill set is not the ideal match, I will let you know openly.",
},
{
title: "We agree on the days",
text: "How many days a week I work for you, and what should come first.",
title: "Agreeing on cadence",
text: "We define weekly days and prioritize the upcoming roadmap items.",
},
{
title: "I work through the list",
text: "Finished parts go to you for review as they are done. I track my hours and you can see what they were spent on.",
title: "Focused execution",
text: "Completed work is delivered continuously for review. Hours are logged transparently with clear task attribution.",
},
{
title: "Two weeks notice",
text: "The agreement can be ended with two weeks notice to the end of a month.",
text: "The agreement can be cancelled with two weeks notice to the end of any month.",
},
],
orientation: "100 EUR per hour, booked by the month",
orientationNote:
"You book fixed days of the week for one month at a time. I bill the hours I actually worked.",
"Fixed weekly days on a monthly retainer basis. Only actual hours worked are billed.",
},
{
id: "rescue",
service: "Code review and stabilisation of web apps",
need: "Our app needs to become reliable",
forWhom: "Teams whose app was built quickly and is now hard to change",
headline: "A week to look at your app and fix what is most urgent.",
forWhom:
"Teams with fast-growing codebases that have accumulated technical debt or stability issues",
headline:
"One-week code sprint: audit, stabilization and immediate fixes.",
intro:
"The app works, but bugs come back and small changes take longer than they should. I take a week to go through the code, fix what I can in that time and write down what I would do next.",
"The app is live, but recurring bugs and sluggish releases are slowing your team down. Over a dedicated five-day sprint, I audit the codebase, fix the most pressing issues, and outline a clear roadmap for long-term health.",
youGet: [
"An honest assessment: what is solid and what is fragile",
"Automated tests for the most important parts",
"The most urgent problems fixed, as far as a week allows",
"A written list of next steps, in plain language",
"Thorough architecture audit: solid foundations vs. stability and security risks",
"Automated test coverage for mission-critical workflows",
"Immediate resolution of high-priority bottlenecks within the sprint",
"Actionable roadmap of recommended next steps – documented in plain language",
],
steps: [
{
title: FIRST_CALL,
text: "You show me the app and tell me where it causes trouble.",
text: "You demo the app and walk me through the key pain points and fragile areas.",
},
{
title: "One week of work",
text: "I read the code, add tests where they matter most and fix the most urgent problems.",
title: "Five-day deep dive",
text: "I inspect the code, add tests where leverage is highest, and resolve the most urgent blockers.",
},
{
title: "A written summary",
text: "What I found, what I changed and what I recommend. Written so that you can follow it without being a developer.",
title: "Actionable report",
text: "Findings, applied fixes, and strategic recommendations – written so non-developers can make informed decisions.",
},
{
title: "You decide how to continue",
text: "With me, with your own team, or not at all.",
title: "You choose how to proceed",
text: "Continue together, hand over to your internal team, or wrap up.",
},
],
orientation: "3,500 EUR for one fixed week",
orientationNote:
"The scope is one week of my time, 35 hours. A week does not fix everything: if I see in the first call that it will not be enough to be useful, I tell you.",
"The scope is a focused 35-hour sprint. If our initial call reveals that a single week cannot meaningfully move the needle, I will say so upfront.",
},
{
id: "automation",
service: "Process automation and system integration",
need: "We want to automate a process",
forWhom:
"Companies where people copy data between tools or repeat the same steps",
"Companies where teams manually copy data across tools or waste hours on repetitive tasks",
headline:
"Systems that pass work on to each other, so people do not have to.",
"Seamless system integration – eliminating manual data entry and routine busywork.",
intro:
"Someone exports a list here, types it in there and sends an email about it. I connect the tools you already use, so that recurring steps run on their own and your people can do the work that needs them.",
"Exporting spreadsheets, retyping entries into CRMs, emailing notifications by hand: I connect your existing software through robust APIs so data flows automatically and your team can focus on high-value work.",
youGet: [
"Connections between your systems through their interfaces (APIs)",
"Recurring workflows that run without manual steps",
"Where it helps, steps handled with AI: sorting, summarising, reading documents",
"A short description of how it works, so it can be maintained",
"Direct API integrations between your existing business tools",
"Fully automated workflows without manual intervention",
"Targeted AI steps where valuable: document parsing, categorization, summarization",
"Concise system documentation for reliable operation and easy maintenance",
],
steps: [
{
title: FIRST_CALL,
text: "You describe the process and which tools are involved.",
text: "You explain the current workflow and the tools involved.",
},
{
title: "I look at how it is done today",
text: "Step by step, with the people who do it. Often a part can be automated, not everything.",
title: "Process discovery",
text: "We review the current process with the people doing the work and identify high-impact automation targets.",
},
{
title: "I connect the systems",
text: "One step at a time. You test it with real cases before it replaces the manual work.",
title: "Modular integration",
text: "Step-by-step implementation, tested with production-like data before replacing manual workflows.",
},
{
title: "It runs on its own",
text: "You get a note on what it does and what to check when one of the tools changes.",
title: "Autonomous operation",
text: "The automation runs smoothly. You receive clean documentation on maintenance and system changes.",
},
],
orientation: "100 EUR per hour, after an estimate",
orientationNote:
"How long it takes depends on the process, so there is no price before I have seen it. Fees for the tools themselves are paid by you.",
"Project scope depends on workflow complexity. You receive a firm estimate after discovery. Software subscription fees are billed directly by the providers.",
},
{
id: "website",
service: "Website design and development",
need: "I just need a website",
forWhom: "Companies and self-employed people who want it taken care of",
headline: "A website, built and looked after for you.",
need: "I need a professional company website",
forWhom:
"Businesses and founders looking for a turnkey, bespoke web presence",
headline:
"Your company website: custom-designed, engineered and maintained.",
intro:
"You do not want to learn a website builder or deal with hosting. You tell me what your business does and what the site should achieve. I design it, build it and put it online.",
"No clunky site builders, no generic templates, and no server headaches: you tell me about your business and your goals – I take care of concept, design, development, and launch.",
youGet: [
"A design made for your business, not a template",
"Works on phone, tablet and desktop",
"Hosting taken care of, no server for you to manage",
"Changes by email: you write what you need, I make the change",
"Bespoke design tailored to your brand – no off-the-shelf templates",
"Fully responsive layout across mobile, tablet and desktop",
"Hosting, domain and SSL managed end-to-end with zero hassle",
"Effortless updates by email: send what you need, and it gets implemented promptly",
],
steps: [
{
title: FIRST_CALL,
text: "You tell me about your business and what the website is for.",
text: "You tell me about your business, target audience, and what the website should achieve.",
},
{
title: "A design to look at",
text: "You get a first version to click through. We adjust it until it fits.",
title: "Interactive prototype",
text: "You receive a clickable initial version and we refine layout and copy together.",
},
{
title: "I build it and put it online",
text: "With your texts and images and a contact form. You approve it before it goes live.",
title: "Development & launch",
text: "Complete technical implementation with content, speed optimization, and forms. Goes live only with your sign-off.",
},
{
title: "Changes afterwards",
text: "A new photo or a changed price: you send me an email.",
title: "Ongoing care",
text: "New images, updated business hours, or revised pricing: just send a quick email.",
},
],
orientation: "From 3,800 EUR, one-off",
orientationNote:
"This is for a typical company website. Care afterwards costs 89 EUR per month.",
"Applies to a typical multi-page company website. Ongoing maintenance is 89 EUR per month.",
},
],
scenes: {
@@ -285,55 +292,55 @@ export const en: Content = {
talkLength: "about 20 minutes",
days: ["Mon", "Tue", "Wed", "Thu", "Fri"],
daysNote: "for example three days a week",
review: "finished parts go to you for review",
review: "milestones delivered continuously for review",
week: "week {n}",
monthEnd: "end of month",
notice: "two weeks notice",
repair: "fragile parts get tests and fixes",
summaryParts: ["found", "changed", "next"],
summaryNote: "written so you can follow it",
options: ["continue with me", "your own team", "stop here"],
repair: "testing & stabilizing critical paths",
summaryParts: ["findings", "fixes", "next steps"],
summaryNote: "clearly documented for your team",
options: ["continue together", "hand over to team", "wrap up"],
online: "online",
exampleDomain: "yourcompany.com",
firstVersion: "a first version to click through",
approve: "you approve it before it goes live",
changeByEmail: "you send an email, I make the change",
firstVersion: "interactive prototype to click through",
approve: "sign-off before going live",
changeByEmail: "updates easily handled by email",
tools: ["Shop", "Accounting", "Email", "CRM"],
byHand: "today: copied by hand",
wiring: "connected one step at a time",
running: "the steps run without anyone copying",
byHand: "previously: copied manually",
wiring: "integrated step by step",
running: "workflows run fully automated",
},
},
automation: {
label: "Process automation",
title: {
lead: "Your tools do the routine work.",
rest: "Nobody retypes anything.",
lead: "Automate routine workflows.",
rest: "Eliminate errors and manual handoffs.",
},
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:",
"In many companies, team members spend hours moving data between tools: exporting files, copy-pasting records, emailing updates. Smart automation connects these tools via APIs so data flows in the background. Three typical examples:",
examplesLabel: "Example workflows",
running: "running",
runComplete: "run complete",
log: "Log",
byHand: "By hand",
byHand: "Manual",
automated: "Automated",
kinds: {
trigger: "Trigger: something happens",
rule: "Rule: a fixed check",
ai: "AI step: reads or sorts",
action: "Action: a system does something",
human: "Person: decides the unclear cases",
trigger: "Trigger: an event occurs",
rule: "Rule: predefined business logic",
ai: "AI step: automated parsing or classification",
action: "Action: system executes operation",
human: "Human review: manual sign-off on edge cases",
},
workflows: {
order: {
name: "Order to invoice",
summary:
"A new order arrives in the shop. The invoice, the customer record and the confirmation follow without anyone typing.",
"When an order is placed in the shop, the invoice, CRM record and confirmation email are generated automatically.",
byHand:
"Someone opens the order, writes the invoice, updates the customer record and sends an email.",
"Manual: inspect the order, generate the invoice, update the CRM, and email the customer.",
automated:
"The order triggers everything. People only see the finished result.",
"Automated: the order triggers every downstream step – your team simply monitors the result.",
nodes: {
shop: { system: "Shop", label: "New order", log: "order received" },
stock: {
@@ -361,11 +368,11 @@ export const en: Content = {
documents: {
name: "Incoming documents",
summary:
"Invoices arrive as PDF by email. An AI step reads them, a rule checks the result, and a person only sees the unclear ones.",
"Invoices arrive as email attachments. AI extracts structured data, rules validate numbers, and staff only review edge cases.",
byHand:
"Someone opens every PDF, reads supplier, amount and date, and types them into the accounting system.",
"Manual: open each PDF, read vendor, amount and date, and retype them into the accounting system.",
automated:
"Clear cases are booked directly. Unclear ones go to a person with the document attached.",
"Automated: standard invoices are booked directly; ambiguous cases are flagged for quick human approval.",
nodes: {
inbox: {
system: "Inbox",
@@ -384,20 +391,20 @@ export const en: Content = {
log: "booked automatically",
},
ask: {
system: "A person",
label: "Review and decide",
log: "unclear: sent to a person for review",
system: "Team member",
label: "Review & approve",
log: "unclear: routed to staff for review",
},
},
},
lead: {
name: "Enquiry to follow-up",
summary:
"Someone fills in the contact form. The contact is created, the right person is told, and a reminder makes sure nobody forgets.",
"A prospect submits an inquiry form. The lead is created in the CRM, the sales team gets notified, and automated tasks ensure no lead goes cold.",
byHand:
"Someone copies the enquiry into the CRM, forwards it by email and hopes the follow-up is not forgotten.",
"Manual: copy inquiries into the CRM, forward emails to reps, and hope follow-ups aren't forgotten.",
automated:
"The enquiry is filed, assigned and followed up on schedule.",
"Automated: instant lead capture, immediate routing, and scheduled reminders.",
nodes: {
form: {
system: "Website",
@@ -431,25 +438,25 @@ export const en: Content = {
{
title: "Worth automating when",
items: [
"The same steps repeat every day or every week",
"Data is typed from one tool into another",
"Mistakes happen because the work is monotonous",
"Identical tasks repeat daily or weekly",
"Data is manually moved between different software tools",
"Delays or mistakes occur due to monotonous routine work",
],
},
{
title: "What stays with people",
title: "What stays with your team",
items: [
"Decisions and exceptions",
"Anything a customer should hear from a person",
"The final say when the automation is unsure",
"Strategic decisions and nuanced exceptions",
"High-touch customer relationships and advisory",
"Final sign-off on ambiguous cases",
],
},
{
title: "What I need from you",
items: [
"Access to the tools and their interfaces (APIs)",
"Someone who knows the process as it is done today",
"Real examples to test with",
"Access to the software tools and their APIs",
"Insights into the current workflow from the people running it",
"Real-world test data for validation",
],
},
],
@@ -458,10 +465,10 @@ export const en: Content = {
label: "Web presentations",
title: { lead: "A presentation as a link.", rest: "Not as an attachment." },
intro:
"Most presentations are still slide files: one fixed format, sent around as an attachment. I build presentations as websites. They open in any browser, adapt to the screen they are shown on, and can contain things a slide cannot.",
"Most presentations are still static slide decks sent as bulky email attachments. I build presentations as interactive web experiences: accessible in any browser, fully responsive on any device, and capable of live interactions slides could never support.",
compare: {
description:
"A slide keeps its fixed format on every screen and becomes too small to read on a phone. A web presentation rearranges its content for each screen.",
"Slide decks force fixed aspect ratios and become unreadable on mobile screens. A web presentation dynamically adapts layout and typography to the screen size.",
slides: "Slide file",
web: "Web presentation",
pickScreen: "Shown on",
@@ -475,142 +482,149 @@ export const en: Content = {
},
reasons: [
{
title: "Fits every screen",
text: "A slide has one fixed format. A web presentation rearranges itself for the projector, the laptop and the phone.",
title: "Flawless on every screen",
text: "Whether on a 4K projector, laptop, or smartphone: content reflows naturally for optimal readability.",
},
{
title: "One link, one version",
text: "Nobody has to ask which file is the current one. You change it in one place, and everyone who opens the link sees that state.",
title: "One live link, always up to date",
text: "No more circulating outdated attachment versions: edits are instantly live for anyone opening the URL.",
},
{
title: "Shows the real thing",
text: "Current figures, a working demo or a clickable prototype can sit inside the presentation, instead of a screenshot of them.",
title: "Real interactivity over static screenshots",
text: "Embed live metrics, working product demos, or clickable prototypes directly into the narrative.",
},
{
title: "Still useful afterwards",
text: "After the meeting it is a page people can read on their own, pass on and find again.",
title: "A lasting asset after the meeting",
text: "Instead of being lost in inboxes, your presentation remains a high-impact, shareable landing page.",
},
],
goodFor: {
title: "Typical uses",
items: [
"Company and product presentations",
"Pitches and offers sent as a link",
"Reports with figures that change",
"Screens at trade fairs and events",
"Pitches and proposals sent as a link",
"Reports with dynamic, changing data",
"Display screens at trade fairs and events",
],
},
honest: {
title: "When slides are enough",
text: "For a single internal meeting, a slide file is quicker and cheaper. A web presentation is worth it when it is shown often, sent to many people, or stands for your company.",
title: "When standard slides are sufficient",
text: "For a quick internal status update, a PowerPoint or Keynote deck is faster and more pragmatic. A web presentation shines when presenting high-stakes pitches, recurring keynotes, or public-facing company milestones.",
},
cta: "Ask about a presentation",
cta: "Inquire about a web presentation",
},
story: {
hello: "For a project on the web you need someone who builds it.",
services: "First we find out what you really need.",
hello: "Ambitious web projects require proven technical craftsmanship.",
services:
"First, we clarify your core requirements and architectural goals.",
automation:
"Sometimes it is not new software at all, but less work by hand.",
"Often, the right solution isn't more software – it's connected workflows.",
presentations:
"And sometimes it is a meeting in which you have to convince.",
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.",
"Or a high-stakes presentation that needs to leave a lasting impression.",
work: "The end result: rock-solid software that performs reliably in production.",
faq: "Answers to common questions before we begin.",
contact: "Let's discuss your project.",
},
freelance: {
metaTitle: "Freelance web developer for your team | Marc Mintel",
metaTitle: "Freelance Web Developer for Engineering Teams | Marc Mintel",
metaDescription:
"Which projects I am right for, what I work with (React, Next.js, TypeScript) and how I secure changes before they go live.",
"Technical focus, technology stack (React, Next.js, TypeScript), and automated CI/CD safeguards before deploying to production.",
label: "Freelance",
title: {
lead: "A developer for your team.",
rest: "The technical details.",
lead: "Senior engineering power for your team.",
rest: "Technical details & approach.",
},
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.",
"For engineering leads, CTOs, and product managers: an overview of where I fit best, the technologies I use, and how automated tests safeguard production releases.",
pipelineLabel: "Safeguards",
faq: {
title: { lead: "Good to know", rest: "before you book." },
items: [
{
question: "How long are we committed?",
question: "How flexible is the engagement?",
answer:
"Project work is billed by effort. Either side can end it with two weeks notice to the end of a month.",
"Work is billed on time and materials. Either party can cancel with two weeks notice to the end of any month.",
},
{
question: "Can you work with our existing team and code?",
question: "Can you onboard into our existing codebase and team?",
answer:
"Yes. I worked in agencies and product teams for years, so joining an existing project is familiar to me.",
"Yes. Having worked in agencies and SaaS product companies for years, I am well versed in navigating complex codebases and established team workflows.",
},
{
question: "Who owns the code?",
answer:
"You do. Code and design belong to you, and you can hand them to another developer.",
"You do. 100% of all code, assets, and documentation are transferred to you – with zero vendor lock-in.",
},
{
question: "What do you not do?",
question: "What falls outside your core focus?",
answer:
"Mobile apps for the app stores, Windows software and running your servers. If your project needs those, I say so in the first call.",
"Native mobile apps (iOS/Android App Store), Windows desktop applications, and bare-metal server management. If your initiative requires these, I will be upfront in our initial call.",
},
],
},
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." },
text: "I work on your project on fixed days of the week, agreed for one month at a time. There is no package to buy: you pay the hours I actually worked.",
title: {
lead: "Retainer-based monthly bookings.",
rest: "Predictable engineering bandwidth.",
},
text: "I dedicate agreed days of the week to your project, scheduled on a monthly retainer basis. No opaque packages: you only pay for actual hours logged.",
rate: { label: "Per hour", amount: "100 EUR", note: "net" },
example: {
label: "Example: 2 days a week",
amount: "about 6,400 EUR",
note: "64 hours in four weeks, net",
amount: "approx. 6,400 EUR",
note: "64 hours over four weeks, net",
},
terms: [
"Fixed days of the week, agreed for one month at a time",
"One invoice per month, with the tracked hours",
"Either side can end it with two weeks notice to the end of a month",
"I do not book single days",
"Dedicated weekly days, booked on a monthly basis",
"Itemized monthly invoices with transparent time tracking",
"Two weeks notice to the end of any month on both sides",
"No single-day ad-hoc bookings",
],
cta: "Ask about availability",
cta: "Check availability",
remote: {
title: "Remote, without fixed office hours",
text: "I work from wherever I am and plan my own time. For meetings with your team I am there by arrangement. I am not reachable all day long; in return I work on your project undisturbed the rest of the time.",
title: "Remote & focused deep work",
text: "I work fully remotely with flexible scheduling. I am available for sprint ceremonies, pair programming, and standups by arrangement. Instead of all-day chat distractions, I prioritize dedicated deep-work blocks – ensuring your roadmap moves forward swiftly and with high code quality.",
},
},
teaser: {
title: "You develop yourself or lead a team?",
text: "Which projects I am right for, what I work with and how I secure changes is on a page of its own.",
cta: "To the technical details",
title: "Are you an engineering lead or CTO?",
text: "Explore my technical focus, stack, and CI/CD quality assurance workflows on a dedicated page.",
cta: "Explore technical details",
},
},
technology: {
label: "Technology",
title: { lead: "Which projects", rest: "I am right for." },
title: {
lead: "Technical Focus & Specialties:",
rest: "Where I add the most value.",
},
fit: [
{
title: "A good fit",
title: "Ideal project fit",
items: [
"Web apps: dashboards, portals, internal tools",
"Interfaces where design and usability matter",
"Interfaces where design, performance and UX matter",
"Company websites, also in several languages",
"Web3 frontends: wallets, live data, dashboards",
"Automation: connecting systems and their APIs",
],
},
{
title: "Also possible",
title: "Also covered",
items: [
"The backend an app needs: APIs, login, integrations",
"Command-line tools",
"Taking over and tidying up existing code",
"App backends: REST & GraphQL APIs, authentication, databases",
"Command-line tools and developer utilities",
"Refactoring and modernizing existing codebases",
],
},
{
title: "Not my field",
title: "Outside my focus",
items: [
"Mobile apps for the app stores",
"Windows software",
"Running servers, specialised database work",
"Native mobile apps for app stores",
"Legacy Windows software",
"Bare-metal server hosting and specialized DBA work",
],
},
],
@@ -621,15 +635,15 @@ export const en: Content = {
items: ["TypeScript", "React", "Next.js", "Vue.js", "Tailwind CSS"],
},
{
area: "Behind it",
area: "Backend & Data",
items: ["Node.js", "REST APIs", "PostgreSQL", "Headless CMS"],
},
{ area: "Web3 and systems", items: ["Solidity", "Rust"] },
{ area: "Web3 & Systems", items: ["Solidity", "Rust"] },
{ area: "Delivery", items: ["Automated tests", "Docker", "CI/CD"] },
],
pipelineTitle: "What happens before a change goes live.",
pipelineTitle: "Automated quality gates before every production release.",
pipelineIntro:
"Software is connected: a change in one place can break another. I secure what I build with automated tests, and every change has to pass them before it is released. This is what such a run looks like.",
"In complex applications, isolated changes can introduce subtle regressions elsewhere. I protect everything I build with automated CI/CD pipelines and regression tests. Every commit must pass all quality gates before being deployed. Here is how that looks in practice:",
pipeline: {
simulate: "Simulate a change in",
scenarios: {
@@ -661,23 +675,23 @@ export const en: Content = {
stages: ["Lint", "Types", "Tests", "Deploy"],
explanations: [
{
title: "A change comes in",
text: "Something is changed in {area}. Before it can go live, the whole project is checked automatically.",
title: "Change submitted",
text: "A code change is pushed in {area}. Before deployment, the entire application undergoes automated linting, type-checking, and test suites.",
},
{
title: "A test fails, the release is blocked",
text: "The change broke something in a different place. It is caught here, on my side, and nothing reaches your users.",
title: "Test fails – release blocked",
text: "The change triggered an unexpected regression. The automated pipeline halts immediately – broken code never reaches your users.",
},
{
title: "Fixed, checked again, released",
text: "I repair what broke, the run passes, and only then does the change go live.",
title: "Fixed, verified, and deployed",
text: "The regression is resolved, the test suite turns green, and only then is the release securely promoted to production.",
},
],
runAgain: "Run again",
run: "run",
fixPushed: "fix pushed",
lint: "$ lint: checking the code style…",
types: "$ types: checking that the parts fit together…",
lint: "$ lint: checking code style…",
types: "$ types: validating type safety and interfaces…",
tests: "tests",
expected: "expected",
received: "received",
@@ -690,103 +704,103 @@ export const en: Content = {
blocked: "release blocked",
released: "released",
footnote:
"An illustration with made-up file names and numbers, modelled on a real test run. Tests do not catch every mistake, but they do catch this kind.",
"An illustrative scenario modeled on a real CI/CD pipeline run. Automated test suites systematically catch regression defects before they impact customers.",
},
},
working: {
label: "Working with me",
title: {
lead: "How working together goes.",
rest: "Direct and easy to follow.",
lead: "Working relationship.",
rest: "Direct, transparent, and dependable.",
},
principles: [
{
title: "One contact",
text: "You talk to me, and I am the one who does the work.",
title: "Dedicated point of contact",
text: "You communicate directly with me – and I am the engineer who implements your code.",
},
{
title: "Hours you can check",
text: "I track my time. The monthly invoice shows what the hours were spent on.",
title: "Transparent time tracking",
text: "Every hour is logged with precision. Monthly invoices itemize exactly what tasks were completed.",
},
{
title: "Careful work",
text: "I test what I build before I hand it over, and I say so when something is not finished or I am not sure.",
title: "Engineered quality",
text: "I only hand over tested code, and I proactively flag technical risks or uncertainties as soon as they arise.",
},
{
title: "What I build is yours",
text: "Code and design belong to you. You can hand them to another developer.",
title: "Full IP ownership",
text: "All code, architecture, and design belong entirely to you. Handoffs to internal teams or other developers are seamless.",
},
],
diagram: {
description:
"Often a request passes through several people before it reaches the developer. With me there is one direct line between you and the person who does the work.",
"In many agencies, requirements filter through account managers, PMs, and designers before reaching an engineer. With me, you have a direct line to the person writing the code.",
chain: ["You", "Sales", "Manager", "Designer", "Developer"],
you: "You",
me: "Me",
often: "often",
withMe: "with me",
oftenLong: "often: a request is passed along",
withMeLong: "with me: one direct line",
oftenLong: "Agencies: multiple handoffs and communication overhead",
withMeLong: "With me: direct technical alignment without friction",
},
},
work: {
label: "My work",
title: { lead: "Two sites I built.", rest: "Both are live." },
title: { lead: "Featured web projects.", rest: "Live and battle-tested." },
items: {
"klz-cables.com": {
client: "Cable supplier",
text: "The company website of a supplier of energy cables, in German and English.",
text: "Corporate website for a European energy cable supplier, localized in German and English.",
did: [
"Product catalogue with categories and detail pages",
"Datasheets generated from the product data",
"Content the client can edit in a CMS",
"Product catalogue with structured categories and detail pages",
"Dynamic datasheet generation from product specifications",
"Headless CMS integration for intuitive client editing",
],
tech: ["Next.js", "TypeScript", "Headless CMS", "Two languages"],
},
"e-tib.com": {
client: "Cable network construction",
text: "The company website of a group in cable network construction, in German and English.",
text: "Corporate website for an infrastructure and network construction group, in German and English.",
did: [
"Pages for services, references, careers and events",
"The same content in two languages",
"Works on phone, tablet and desktop",
"Dedicated sections for services, references, careers and events",
"Synchronized multilingual content architecture",
"Responsive layouts optimized for mobile, tablet and desktop",
],
tech: ["Next.js", "TypeScript", "Headless CMS", "Two languages"],
},
},
openLive: "Open the live site",
openLive: "Open live website",
desktopAlt: "{name} on a desktop screen",
phoneAlt: "{name} on a phone",
note: "Besides client work I build my own software, among other things a system in Rust and Solidity that runs on seven blockchains.",
phoneAlt: "{name} on a mobile screen",
note: "Alongside client work, I develop proprietary systems – including an engine in Rust and Solidity running in production across seven blockchains.",
},
faq: {
label: "Questions",
title: { lead: "Good to know", rest: "before we talk." },
items: [
{
question: "I am not technical. Is that a problem?",
question: "I don't have a technical background. Is that an issue?",
answer:
"No. I explain what I am doing in plain language, and you can ask at any time. You do not need to read code.",
"Not at all. I communicate technical concepts in plain, accessible language. You never need to read code or decipher jargon to make sound business decisions.",
},
{
question: "What does it cost?",
question: "How much does a project cost?",
answer:
"That depends on what you need. After a short call you get a written offer. I only start once you have agreed.",
"It depends on scope and complexity. After a brief intro call, you receive a transparent, itemized quote. Engineering work only begins once you give your explicit sign-off.",
},
{
question: "Who owns what you build?",
answer:
"You do. Code and design belong to you, and you can hand them to another developer.",
"You do. Full copyright and intellectual property rights for code, assets, and documentation belong to you – no strings attached.",
},
{
question: "Who looks after the website afterwards?",
question: "Who maintains the website after launch?",
answer:
"I do, if you want that. For 89 EUR per month the website runs on servers in Germany, and small changes are included: you write me an email. You do not need an editing system. Email inboxes stay with your provider.",
"I do, if you wish. For 89 EUR per month, hosting on secure German servers, security updates, and minor content adjustments via email are covered. No CMS overhead for you. Existing email inboxes remain with your current host.",
},
{
question: "How do I reach you?",
question: "How do we get in touch?",
answer:
"By email or video call. I work remotely; we agree on a time that suits you.",
"Best via email or video call. As I work remotely, we schedule meetings to suit your calendar.",
},
],
},
@@ -795,7 +809,7 @@ export const en: Content = {
{ text: "LET'S", tone: "bits" },
{ text: "TALK.", tone: "solid" },
],
lead: "Pick what you need and the email writes itself. Or write to me directly:",
lead: "Choose your inquiry topic to generate a pre-filled email draft – or write to me directly:",
newMessage: "New message",
draft: "draft",
need: "I need",
@@ -808,42 +822,42 @@ export const en: Content = {
topics: [
{
id: "developer",
label: "A developer",
label: "Hire a developer",
draft: {
subject: "A developer for our product",
body: `Hi Marc,\n\nwe are working on [what you are building] and need help with [what is next on your list].\n\nA first call would suit us around [date or week].\n\n${SIGN_OFF}`,
subject: "Senior developer for our product",
body: `Hi Marc,\n\nwe are working on [project / product description] and are looking for engineering support with [upcoming initiatives / feature areas].\n\nAn intro call would suit us around [target date or week].\n\n${SIGN_OFF}`,
},
},
{
id: "rescue",
label: "A reliable app",
label: "Stabilize an app",
draft: {
subject: "Our app needs to become reliable",
body: `Hi Marc,\n\nour app [name or short description] works, but [what keeps going wrong].\n\nCould you take a look?\n\n${SIGN_OFF}`,
subject: "Web app stabilization & code audit",
body: `Hi Marc,\n\nour application [name or brief description] is live, but [current pain points / stability issues].\n\nCould you take a look as part of a code audit?\n\n${SIGN_OFF}`,
},
},
{
id: "automation",
label: "Automation",
label: "Process automation",
draft: {
subject: "We want to automate a process",
body: `Hi Marc,\n\nwe would like to automate [the process]. Today it is done by hand in [the tools involved].\n\nCan we talk about it?\n\n${SIGN_OFF}`,
subject: "Process automation inquiry",
body: `Hi Marc,\n\nwe would like to automate the following workflow: [workflow description]. Currently it is handled manually across [involved tools / systems].\n\nCan we schedule a quick call to discuss?\n\n${SIGN_OFF}`,
},
},
{
id: "website",
label: "A website",
label: "Company website",
draft: {
subject: "A website for my business",
body: `Hi Marc,\n\nI need a website for [your business]. It should [what it is for].\n\nWhen could we talk?\n\n${SIGN_OFF}`,
subject: "New company website project",
body: `Hi Marc,\n\nI am planning a new website for [company name]. The goal is to [business objective / target audience].\n\nWhen would suit you for a brief intro call?\n\n${SIGN_OFF}`,
},
},
{
id: "other",
label: "Something else",
label: "General inquiry",
draft: {
subject: "A question",
body: `Hi Marc,\n\n[what you have in mind]\n\n${SIGN_OFF}`,
subject: "Project inquiry",
body: `Hi Marc,\n\n[your message]\n\n${SIGN_OFF}`,
},
},
],