Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76873808ce |
+241
-224
@@ -10,7 +10,7 @@ export const de: Content = {
|
|||||||
site: {
|
site: {
|
||||||
title: "Freelance-Webentwickler für Web-Apps & Websites | Marc Mintel",
|
title: "Freelance-Webentwickler für Web-Apps & Websites | Marc Mintel",
|
||||||
description:
|
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",
|
jobTitle: "Freelance-Webentwickler",
|
||||||
ogLocale: "de_DE",
|
ogLocale: "de_DE",
|
||||||
shareImageAlt:
|
shareImageAlt:
|
||||||
@@ -41,23 +41,23 @@ export const de: Content = {
|
|||||||
{ text: "& WEBSITES.", tone: "bits" },
|
{ text: "& WEBSITES.", tone: "bits" },
|
||||||
],
|
],
|
||||||
lead: "Freelance-Webentwickler mit 15 Jahren Erfahrung.",
|
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,
|
primaryCta: GET_IN_TOUCH,
|
||||||
secondaryCta: "Was ich mache",
|
secondaryCta: "Leistungen & Arbeitsweise",
|
||||||
trust: [
|
trust: [
|
||||||
"Ein Ansprechpartner, der es selbst baut",
|
"Direkter Kontakt – Umsetzung aus einer Hand",
|
||||||
"Ein Angebot, bevor etwas kostet",
|
"Verbindliches Angebot vor Projektstart",
|
||||||
"Änderungen per E-Mail, kein System zu lernen",
|
"Änderungen unkompliziert per E-Mail – ohne CMS-Einarbeitung",
|
||||||
"Server in Deutschland",
|
"Hosting auf Servern in Deutschland",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
hello: {
|
hello: {
|
||||||
label: "Hallo",
|
label: "Hallo",
|
||||||
title: "Ich bin Marc.",
|
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: [
|
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.",
|
"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 direkt mit mir. Egal, ob Sie ein Produktteam leiten oder so etwas zum ersten Mal in Auftrag geben.",
|
"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",
|
portraitAlt: "Marc Mintel, Freelance-Webentwickler",
|
||||||
careerLabel: "Der Weg bisher",
|
careerLabel: "Der Weg bisher",
|
||||||
@@ -78,14 +78,18 @@ export const de: Content = {
|
|||||||
},
|
},
|
||||||
services: {
|
services: {
|
||||||
label: "Leistungen",
|
label: "Leistungen",
|
||||||
title: { lead: "Was brauchen Sie?", rest: "Meist eines von beiden." },
|
title: {
|
||||||
tablistLabel: "Was brauchen Sie?",
|
lead: "Was planen Sie?",
|
||||||
youGet: "Das bekommen Sie",
|
rest: "Passgenaue Unterstützung für Ihr Vorhaben.",
|
||||||
howItRuns: "So läuft es ab",
|
},
|
||||||
|
tablistLabel: "Was planen Sie?",
|
||||||
|
youGet: "Was Sie erhalten",
|
||||||
|
howItRuns: "Der Ablauf",
|
||||||
care: {
|
care: {
|
||||||
label: "Nach dem Start",
|
label: "Nach dem Start",
|
||||||
title: "Ich kümmere mich weiter um Ihre Website, wenn Sie das möchten.",
|
title:
|
||||||
text: "Sie müssen kein System bedienen und nichts selbst pflegen. Wenn etwas zu ändern ist, schreiben Sie mir eine E-Mail.",
|
"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: {
|
price: {
|
||||||
label: "Betreuung",
|
label: "Betreuung",
|
||||||
amount: "89 EUR",
|
amount: "89 EUR",
|
||||||
@@ -93,39 +97,39 @@ export const de: Content = {
|
|||||||
},
|
},
|
||||||
includedLabel: "Das ist enthalten",
|
includedLabel: "Das ist enthalten",
|
||||||
included: [
|
included: [
|
||||||
"Die Website läuft auf Servern in Deutschland",
|
"Hosting auf abgesicherten Servern in Deutschland",
|
||||||
"Adresse, Sicherheit und Technik sind erledigt",
|
"Domain, SSL-Verschlüsselung und technische Wartung inklusive",
|
||||||
"Kleine Änderungen: ein Text, ein Bild, neue Öffnungszeiten",
|
"Kleine Änderungen: Anpassung von Texten, Bildern und Kontaktdaten",
|
||||||
"Kein Redaktionssystem, kein Login",
|
"Kein komplexes Redaktionssystem, keine Update-Pflege durch Sie",
|
||||||
],
|
],
|
||||||
termsLabel: "Gut zu wissen",
|
termsLabel: "Gut zu wissen",
|
||||||
terms: [
|
terms: [
|
||||||
"Die ersten drei Monate sind im Projektpreis enthalten.",
|
"Die ersten drei Monate sind im Projektpreis bereits enthalten.",
|
||||||
"Größeres, etwa eine neue Seite, bekommt vorher einen Preis.",
|
"Größere Erweiterungen (z. B. neue Unterseiten) stimme ich vorab transparent mit Ihnen ab.",
|
||||||
"Ich antworte innerhalb von zwei Werktagen. Eine Rufbereitschaft gibt es nicht.",
|
"Feste Reaktionszeit innerhalb von zwei Werktagen (keine 24/7-Rufbereitschaft).",
|
||||||
"Wenn Sie gehen möchten, bekommen Sie alles mit. Die Website gehört Ihnen.",
|
"Kein Vendor Lock-in: Sämtlicher Code und alle Inhalte gehören zu 100 % Ihnen.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
offer: {
|
offer: {
|
||||||
title: "Sie bekommen ein Angebot, bevor etwas kostet.",
|
title: "Klares, verbindliches Angebot vor Projektbeginn.",
|
||||||
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.",
|
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",
|
cta: "Angebot anfragen",
|
||||||
},
|
},
|
||||||
estimate: {
|
estimate: {
|
||||||
label: "Was es kostet",
|
label: "Preise & Schätzung",
|
||||||
title: "So kommen Sie zu einem Preis",
|
title: "Transparente Aufwandsschätzung",
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: "Ein Gespräch, etwa 20 Minuten",
|
title: "Unverbindliches Erstgespräch (ca. 20 Minuten)",
|
||||||
text: "Sie erzählen mir, was Sie brauchen.",
|
text: "Wir besprechen Ihre Anforderungen, Ziele und Rahmenbedingungen.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Eine schriftliche Schätzung",
|
title: "Schriftliche Aufwandsschätzung",
|
||||||
text: "Sie sehen die geschätzten Stunden und was darin enthalten ist.",
|
text: "Sie erhalten eine transparente Aufschlüsselung der geschätzten Stunden und Leistungen.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Sie geben ein Budget frei",
|
title: "Budgetfreigabe & Abrechnung",
|
||||||
text: "Ich rechne die tatsächlichen Stunden ab und sage früh Bescheid, wenn es nicht reicht.",
|
text: "Abgerechnet wird nach tatsächlichem Aufwand. Drohen Abweichungen, informiere ich Sie frühzeitig.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orientationLabel: "Zur Orientierung",
|
orientationLabel: "Zur Orientierung",
|
||||||
@@ -138,27 +142,27 @@ export const de: Content = {
|
|||||||
service: "Entwicklung von Web-Apps und Frontends",
|
service: "Entwicklung von Web-Apps und Frontends",
|
||||||
need: "Wir brauchen einen Entwickler für unser Produkt",
|
need: "Wir brauchen einen Entwickler für unser Produkt",
|
||||||
forWhom: "Start-ups, Produktteams, Agenturen, Web3-Teams",
|
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:
|
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: [
|
youGet: [
|
||||||
"Web-Apps, Dashboards, Kundenportale und interne Werkzeuge",
|
"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",
|
"Web3-Frontends: Wallet-Anbindung, Live-Daten, Dashboards",
|
||||||
"Kleine Werkzeuge und Automatisierung für wiederkehrende Arbeit",
|
"Kleine Tools und Automatisierungen für wiederkehrende Aufgaben",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: FIRST_CALL,
|
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",
|
title: "Feste Kapazitäten vereinbaren",
|
||||||
text: "Wie viele Tage pro Woche ich für Sie arbeite und was zuerst drankommt.",
|
text: "Wir legen die wöchentlichen Tage fest und priorisieren die anstehenden Aufgaben.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Ich arbeite die Liste ab",
|
title: "Fokussierte Umsetzung",
|
||||||
text: "Fertige Teile gehen zur Durchsicht an Sie, sobald sie fertig sind. Ich erfasse meine Stunden, und Sie sehen, wofür sie angefallen sind.",
|
text: "Arbeitsergebnisse übergebe ich fortlaufend zur Durchsicht. Die Arbeitszeit wird detailliert und transparent erfasst.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Zwei Wochen Kündigungsfrist",
|
title: "Zwei Wochen Kündigungsfrist",
|
||||||
@@ -167,61 +171,61 @@ export const de: Content = {
|
|||||||
],
|
],
|
||||||
orientation: "100 EUR pro Stunde, monatsweise gebucht",
|
orientation: "100 EUR pro Stunde, monatsweise gebucht",
|
||||||
orientationNote:
|
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",
|
id: "rescue",
|
||||||
service: "Code-Review und Stabilisierung von Web-Apps",
|
service: "Code-Review und Stabilisierung von Web-Apps",
|
||||||
need: "Unsere App soll zuverlässig werden",
|
need: "Unsere App soll zuverlässig werden",
|
||||||
forWhom:
|
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:
|
headline:
|
||||||
"Eine Woche, um Ihre App durchzusehen und das Dringendste zu beheben.",
|
"Einwöchiger Code-Sprint: Analyse, Stabilisierung und Sofortmaßnahmen.",
|
||||||
intro:
|
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: [
|
youGet: [
|
||||||
"Eine ehrliche Einschätzung: was solide ist und was wackelt",
|
"Fundierte Bestandsaufnahme: Was steht solide da, wo liegen Stabilitäts- und Sicherheitsrisiken?",
|
||||||
"Automatisierte Tests für die wichtigsten Teile",
|
"Automatisierte Tests für geschäftskritische Workflows",
|
||||||
"Die dringendsten Probleme behoben, soweit eine Woche reicht",
|
"Sofortige Behebung der gravierendsten Engpässe im Rahmen der Sprint-Woche",
|
||||||
"Eine schriftliche Liste der nächsten Schritte, in verständlicher Sprache",
|
"Pragmatische Handlungsempfehlungen für nächste Schritte – verständlich dokumentiert",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: FIRST_CALL,
|
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",
|
title: "Fünf Tage Deep Dive",
|
||||||
text: "Ich lese den Code, ergänze Tests, wo sie am meisten bringen, und behebe die dringendsten Probleme.",
|
text: "Ich analysiere die Architektur, etabliere Tests an kritischen Pfaden und behebe die dringendsten Bugs.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Eine schriftliche Zusammenfassung",
|
title: "Verständlicher Abschlussbericht",
|
||||||
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.",
|
text: "Befunde, umgesetzte Fixes und strategische Empfehlungen – so aufbereitet, dass auch Nicht-Entwickler fundierte Entscheidungen treffen können.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Sie entscheiden, wie es weitergeht",
|
title: "Sie entscheiden über die nächsten Schritte",
|
||||||
text: "Mit mir, mit Ihrem eigenen Team oder gar nicht.",
|
text: "Gemeinsam mit mir, intern mit Ihrem Team oder zu einem späteren Zeitpunkt.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orientation: "3.500 EUR für eine feste Woche",
|
orientation: "3.500 EUR für eine feste Woche",
|
||||||
orientationNote:
|
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",
|
id: "automation",
|
||||||
service: "Prozessautomatisierung und Systemintegration",
|
service: "Prozessautomatisierung und Systemintegration",
|
||||||
need: "Wir wollen einen Ablauf automatisieren",
|
need: "Wir wollen einen Ablauf automatisieren",
|
||||||
forWhom:
|
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:
|
headline:
|
||||||
"Systeme, die Arbeit aneinander weitergeben, damit Menschen es nicht tun müssen.",
|
"Systeme nahtlos verbinden – manuelle Routineaufgaben und Medienbrüche eliminieren.",
|
||||||
intro:
|
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: [
|
youGet: [
|
||||||
"Verbindungen zwischen Ihren Systemen über deren Schnittstellen (APIs)",
|
"Direkte Schnittstellenanbindung (APIs) Ihrer bestehenden Software",
|
||||||
"Wiederkehrende Abläufe, die ohne Handarbeit laufen",
|
"Vollautomatisierte Workflows ohne manuelle Zwischenschritte",
|
||||||
"Wo es hilft, Schritte mit KI: sortieren, zusammenfassen, Dokumente lesen",
|
"Gezielter KI-Einsatz: Intelligentes Auslesen von Belegen, Vorstrukturieren und Validieren",
|
||||||
"Eine kurze Beschreibung, wie es funktioniert, damit es gewartet werden kann",
|
"Kompakte Dokumentation für stabilen Betrieb und einfache spätere Wartung",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
@@ -229,58 +233,59 @@ export const de: Content = {
|
|||||||
text: "Sie beschreiben den Ablauf und welche Programme beteiligt sind.",
|
text: "Sie beschreiben den Ablauf und welche Programme beteiligt sind.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Ich sehe mir an, wie es heute läuft",
|
title: "Ist-Analyse des Prozesses",
|
||||||
text: "Schritt für Schritt, mit den Menschen, die es machen. Oft lässt sich ein Teil automatisieren, nicht alles.",
|
text: "Wir analysieren den bestehenden Ablauf mit den Beteiligten und identifizieren die lohnendsten Automatisierungspotenziale.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Ich verbinde die Systeme",
|
title: "Schrittweise Integration",
|
||||||
text: "Einen Schritt nach dem anderen. Sie testen es mit echten Fällen, bevor es die Handarbeit ersetzt.",
|
text: "Die Anbindung erfolgt modular und wird mit realen Datensätzen validiert, bevor der Prozess produktiv geschaltet wird.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Es läuft von selbst",
|
title: "Automatisierter Betrieb",
|
||||||
text: "Sie bekommen eine Notiz dazu, was es tut und was zu prüfen ist, wenn sich eines der Programme ändert.",
|
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",
|
orientation: "100 EUR pro Stunde, nach Schätzung",
|
||||||
orientationNote:
|
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",
|
id: "website",
|
||||||
service: "Gestaltung und Entwicklung von Websites",
|
service: "Gestaltung und Entwicklung von Websites",
|
||||||
need: "Ich brauche einfach eine Website",
|
need: "Ich brauche eine professionelle Unternehmenswebsite",
|
||||||
forWhom:
|
forWhom:
|
||||||
"Unternehmen und Selbstständige, die sich nicht selbst darum kümmern wollen",
|
"Unternehmen und Selbstständige, die eine schlüsselfertige, moderne Weblösung suchen",
|
||||||
headline: "Eine Website, für Sie gebaut und betreut.",
|
headline:
|
||||||
|
"Ihre Unternehmenswebsite: Maßgeschneidert entwickelt und zuverlässig betreut.",
|
||||||
intro:
|
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: [
|
youGet: [
|
||||||
"Ein Design für Ihr Unternehmen, keine Vorlage",
|
"Individuelles Design, abgestimmt auf Ihr Unternehmen – keine austauschbare Vorlage",
|
||||||
"Funktioniert auf Handy, Tablet und Desktop",
|
"Optimale Darstellung auf Smartphones, Tablets und Desktops (Responsive Design)",
|
||||||
"Um das Hosting kümmere ich mich, Sie betreuen keinen Server",
|
"Hosting, Domain und SSL aus einer Hand – ohne technischen Aufwand für Sie",
|
||||||
"Änderungen per E-Mail: Sie schreiben, was Sie brauchen, ich setze es um",
|
"Änderungen unkompliziert per E-Mail: Sie senden Ihre Wünsche, ich setze sie zeitnah um",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: FIRST_CALL,
|
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",
|
title: "Interaktiver Entwurf",
|
||||||
text: "Sie bekommen eine erste Version zum Durchklicken. Wir passen sie an, bis sie passt.",
|
text: "Sie erhalten einen ersten klickbaren Entwurf und wir stimmen das Feintuning gemeinsam ab.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Ich baue sie und bringe sie online",
|
title: "Umsetzung & Go-Live",
|
||||||
text: "Mit Ihren Texten und Bildern und einem Kontaktformular. Sie geben sie frei, bevor sie live geht.",
|
text: "Technische Fertigstellung mit Ihren Inhalten, optimierten Ladezeiten und Kontaktmöglichkeiten. Online geht es erst nach Ihrer Freigabe.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Änderungen danach",
|
title: "Laufende Pflege",
|
||||||
text: "Ein neues Foto oder ein geänderter Preis: Sie schreiben mir eine E-Mail.",
|
text: "Neue Inhalte, aktuelle Öffnungszeiten oder geänderte Preise: Eine kurze Nachricht genügt.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orientation: "Ab 3.800 EUR, einmalig",
|
orientation: "Ab 3.800 EUR, einmalig",
|
||||||
orientationNote:
|
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: {
|
scenes: {
|
||||||
@@ -289,33 +294,37 @@ export const de: Content = {
|
|||||||
talkLength: "etwa 20 Minuten",
|
talkLength: "etwa 20 Minuten",
|
||||||
days: ["Mo", "Di", "Mi", "Do", "Fr"],
|
days: ["Mo", "Di", "Mi", "Do", "Fr"],
|
||||||
daysNote: "zum Beispiel drei Tage pro Woche",
|
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}",
|
week: "Woche {n}",
|
||||||
monthEnd: "Monatsende",
|
monthEnd: "Monatsende",
|
||||||
notice: "zwei Wochen Frist",
|
notice: "zwei Wochen Frist",
|
||||||
repair: "Wackliges wird getestet und behoben",
|
repair: "Kritische Stellen testen & stabilisieren",
|
||||||
summaryParts: ["gefunden", "geändert", "als Nächstes"],
|
summaryParts: ["Befunde", "Fixes", "Nächste Schritte"],
|
||||||
summaryNote: "so geschrieben, dass Sie folgen können",
|
summaryNote: "klar und verständlich dokumentiert",
|
||||||
options: ["weiter mit mir", "Ihr eigenes Team", "hier aufhören"],
|
options: [
|
||||||
|
"Zusammenarbeit fortsetzen",
|
||||||
|
"Übergabe an Ihr Team",
|
||||||
|
"Projekt abschließen",
|
||||||
|
],
|
||||||
online: "online",
|
online: "online",
|
||||||
exampleDomain: "ihrefirma.de",
|
exampleDomain: "ihrefirma.de",
|
||||||
firstVersion: "eine erste Version zum Durchklicken",
|
firstVersion: "Erster klickbarer Entwurf",
|
||||||
approve: "Sie geben frei, bevor es live geht",
|
approve: "Freigabe vor dem Go-Live",
|
||||||
changeByEmail: "Sie schreiben, ich setze es um",
|
changeByEmail: "Änderungen einfach per E-Mail",
|
||||||
tools: ["Shop", "Buchhaltung", "E-Mail", "CRM"],
|
tools: ["Shop", "Buchhaltung", "E-Mail", "CRM"],
|
||||||
byHand: "heute: von Hand kopiert",
|
byHand: "Bisher: manuelle Übertragung",
|
||||||
wiring: "Schritt für Schritt verbunden",
|
wiring: "Schrittweise integriert",
|
||||||
running: "die Schritte laufen ohne Handarbeit",
|
running: "Abläufe laufen vollautomatisch",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
automation: {
|
automation: {
|
||||||
label: "Prozessautomatisierung",
|
label: "Prozessautomatisierung",
|
||||||
title: {
|
title: {
|
||||||
lead: "Ihre Programme erledigen die Routine.",
|
lead: "Routineaufgaben automatisieren.",
|
||||||
rest: "Niemand tippt mehr ab.",
|
rest: "Medienbrüche und Fehlerquellen eliminieren.",
|
||||||
},
|
},
|
||||||
intro:
|
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",
|
examplesLabel: "Beispielabläufe",
|
||||||
running: "läuft",
|
running: "läuft",
|
||||||
runComplete: "Durchlauf fertig",
|
runComplete: "Durchlauf fertig",
|
||||||
@@ -323,21 +332,21 @@ export const de: Content = {
|
|||||||
byHand: "Von Hand",
|
byHand: "Von Hand",
|
||||||
automated: "Automatisiert",
|
automated: "Automatisiert",
|
||||||
kinds: {
|
kinds: {
|
||||||
trigger: "Auslöser: etwas passiert",
|
trigger: "Auslöser: ein Ereignis tritt ein",
|
||||||
rule: "Regel: eine feste Prüfung",
|
rule: "Regel: vordefinierte Prüfung",
|
||||||
ai: "KI-Schritt: liest oder sortiert",
|
ai: "KI-Schritt: automatisiertes Auslesen oder Sortieren",
|
||||||
action: "Aktion: ein System tut etwas",
|
action: "Aktion: System führt Operation aus",
|
||||||
human: "Mensch: entscheidet die unklaren Fälle",
|
human: "Menschliche Prüfung: Freigabe bei Grenzfällen",
|
||||||
},
|
},
|
||||||
workflows: {
|
workflows: {
|
||||||
order: {
|
order: {
|
||||||
name: "Bestellung bis Rechnung",
|
name: "Bestellung bis Rechnung",
|
||||||
summary:
|
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:
|
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:
|
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: {
|
nodes: {
|
||||||
shop: {
|
shop: {
|
||||||
system: "Shop",
|
system: "Shop",
|
||||||
@@ -369,11 +378,11 @@ export const de: Content = {
|
|||||||
documents: {
|
documents: {
|
||||||
name: "Eingehende Dokumente",
|
name: "Eingehende Dokumente",
|
||||||
summary:
|
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:
|
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:
|
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: {
|
nodes: {
|
||||||
inbox: {
|
inbox: {
|
||||||
system: "Posteingang",
|
system: "Posteingang",
|
||||||
@@ -392,20 +401,20 @@ export const de: Content = {
|
|||||||
log: "automatisch gebucht",
|
log: "automatisch gebucht",
|
||||||
},
|
},
|
||||||
ask: {
|
ask: {
|
||||||
system: "Ein Mensch",
|
system: "Mitarbeiter",
|
||||||
label: "Prüfen, entscheiden",
|
label: "Prüfen & freigeben",
|
||||||
log: "unklar: zur Prüfung an einen Menschen",
|
log: "Grenzfall: Zur manuellen Prüfung vorgelegt",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
lead: {
|
lead: {
|
||||||
name: "Anfrage bis Nachfassen",
|
name: "Anfrage bis Nachfassen",
|
||||||
summary:
|
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:
|
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:
|
automated:
|
||||||
"Die Anfrage wird abgelegt, zugewiesen und zum geplanten Zeitpunkt nachverfolgt.",
|
"Automatisiert: Vollständige Erfassung, sofortige Zuweisung und verlässliche Wiedervorlage.",
|
||||||
nodes: {
|
nodes: {
|
||||||
form: {
|
form: {
|
||||||
system: "Website",
|
system: "Website",
|
||||||
@@ -439,25 +448,25 @@ export const de: Content = {
|
|||||||
{
|
{
|
||||||
title: "Wann es sich lohnt",
|
title: "Wann es sich lohnt",
|
||||||
items: [
|
items: [
|
||||||
"Dieselben Schritte wiederholen sich täglich oder wöchentlich",
|
"Dieselben Arbeitsschritte wiederholen sich täglich oder wöchentlich",
|
||||||
"Daten werden von einem Programm ins andere getippt",
|
"Daten werden manuell zwischen verschiedenen Programmen übertragen",
|
||||||
"Fehler passieren, weil die Arbeit eintönig ist",
|
"Fehler und Verzögerungen entstehen durch monotone Routinearbeiten",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Was bei Menschen bleibt",
|
title: "Was beim Team bleibt",
|
||||||
items: [
|
items: [
|
||||||
"Entscheidungen und Ausnahmen",
|
"Strategische Entscheidungen und fachliche Ausnahmen",
|
||||||
"Alles, was ein Kunde von einem Menschen hören sollte",
|
"Persönlicher Kundenkontakt und Beratung",
|
||||||
"Das letzte Wort, wenn die Automatisierung unsicher ist",
|
"Die finale Entscheidung, wenn ein Fall unklar ist",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Was ich von Ihnen brauche",
|
title: "Was ich von Ihnen benötige",
|
||||||
items: [
|
items: [
|
||||||
"Zugang zu den Programmen und ihren Schnittstellen (APIs)",
|
"Zugänge zu den beteiligten Systemen und deren Schnittstellen (APIs)",
|
||||||
"Jemanden, der den Ablauf so kennt, wie er heute gemacht wird",
|
"Einblicke in den bisherigen Ablauf durch die zuständigen Kollegen",
|
||||||
"Echte Beispiele zum Testen",
|
"Reale Beispieldaten zum Testen und Validieren",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -466,10 +475,10 @@ export const de: Content = {
|
|||||||
label: "Web-Präsentationen",
|
label: "Web-Präsentationen",
|
||||||
title: { lead: "Eine Präsentation als Link.", rest: "Nicht als Anhang." },
|
title: { lead: "Eine Präsentation als Link.", rest: "Nicht als Anhang." },
|
||||||
intro:
|
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: {
|
compare: {
|
||||||
description:
|
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",
|
slides: "Foliendatei",
|
||||||
web: "Web-Präsentation",
|
web: "Web-Präsentation",
|
||||||
pickScreen: "Gezeigt auf",
|
pickScreen: "Gezeigt auf",
|
||||||
@@ -487,20 +496,20 @@ export const de: Content = {
|
|||||||
},
|
},
|
||||||
reasons: [
|
reasons: [
|
||||||
{
|
{
|
||||||
title: "Passt auf jeden Bildschirm",
|
title: "Optimal auf jedem Bildschirm",
|
||||||
text: "Eine Folie hat ein festes Format. Eine Web-Präsentation ordnet sich für Beamer, Laptop und Handy jeweils neu an.",
|
text: "Egal ob Beamer, Laptop oder Smartphone: Layout und Typografie passen sich der jeweiligen Bildschirmgröße automatisch an.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Ein Link, ein Stand",
|
title: "Ein zentraler Link, immer aktuell",
|
||||||
text: "Niemand muss fragen, welche Datei die aktuelle ist. Sie ändern es an einer Stelle, und jeder, der den Link öffnet, sieht diesen Stand.",
|
text: "Keine veralteten Datei-Versionen mehr im Umlauf: Aktualisierungen sind sofort für jeden Empfänger live verfügbar.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Zeigt das Echte",
|
title: "Echte Interaktivität statt Screenshots",
|
||||||
text: "Aktuelle Zahlen, eine funktionierende Demo oder ein klickbarer Prototyp können direkt in der Präsentation stehen, statt eines Screenshots davon.",
|
text: "Binden Sie Live-Daten, funktionierende Demos oder klickbare Prototypen direkt ein – statt statischer Bildschirmfotos.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Auch danach noch nützlich",
|
title: "Bleibender Eindruck nach dem Termin",
|
||||||
text: "Nach dem Termin ist sie eine Seite, die man allein lesen, weitergeben und wiederfinden kann.",
|
text: "Nach dem Pitch bleibt Ihre Präsentation als hochwertige Landingpage abrufbar, teilbar und suchbar.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
goodFor: {
|
goodFor: {
|
||||||
@@ -513,65 +522,69 @@ export const de: Content = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
honest: {
|
honest: {
|
||||||
title: "Wann Folien reichen",
|
title: "Wann klassische Folien genügen",
|
||||||
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.",
|
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",
|
cta: "Nach einer Präsentation fragen",
|
||||||
},
|
},
|
||||||
story: {
|
story: {
|
||||||
hello: "Für ein Vorhaben im Web brauchen Sie jemanden, der es baut.",
|
hello:
|
||||||
services: "Als Erstes klären wir, was Sie wirklich brauchen.",
|
"Für anspruchsvolle Webprojekte brauchen Sie verlässliche Umsetzungskompetenz.",
|
||||||
|
services: "Zu Beginn klären wir Ihre konkreten Ziele und Anforderungen.",
|
||||||
automation:
|
automation:
|
||||||
"Manchmal ist es gar keine neue Software, sondern weniger Handarbeit.",
|
"Oft braucht es keine neue Software, sondern nahtlos verzahnte Prozesse.",
|
||||||
presentations:
|
presentations:
|
||||||
"Und manchmal ist es ein Termin, bei dem Sie überzeugen müssen.",
|
"Oder eine Präsentation, die Ihr Gegenüber nachhaltig überzeugt.",
|
||||||
work: "Am Ende steht etwas, das läuft.",
|
work: "Im Ergebnis: Lösungen, die dauerhaft stabil und performant funktionieren.",
|
||||||
faq: "Vorher bleiben meist ein paar Fragen.",
|
faq: "Häufige Fragen vor dem Start.",
|
||||||
contact: "Und dann beginnt es mit einer E-Mail.",
|
contact: "Lassen Sie uns unverbindlich sprechen.",
|
||||||
},
|
},
|
||||||
freelance: {
|
freelance: {
|
||||||
metaTitle: "Freelance-Webentwickler für Ihr Team | Marc Mintel",
|
metaTitle: "Freelance-Webentwickler für Ihr Team | Marc Mintel",
|
||||||
metaDescription:
|
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",
|
label: "Freelance",
|
||||||
title: {
|
title: {
|
||||||
lead: "Ein Entwickler für Ihr Team.",
|
lead: "Erfahrene Verstärkung für Ihr Team.",
|
||||||
rest: "Die technischen Details.",
|
rest: "Technische Details & Arbeitsweise.",
|
||||||
},
|
},
|
||||||
intro:
|
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",
|
pipelineLabel: "Absicherung",
|
||||||
faq: {
|
faq: {
|
||||||
title: { lead: "Gut zu wissen,", rest: "bevor Sie buchen." },
|
title: { lead: "Gut zu wissen,", rest: "bevor Sie buchen." },
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
question: "Wie lange sind wir gebunden?",
|
question: "Wie flexibel ist die Zusammenarbeit?",
|
||||||
answer:
|
answer:
|
||||||
"Projektarbeit wird nach Aufwand abgerechnet. Beide Seiten können mit zwei Wochen Frist zum Monatsende kündigen.",
|
"Projektarbeit wird nach Aufwand abgerechnet. Beide Seiten können mit zwei Wochen Frist zum Monatsende kündigen.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question:
|
question:
|
||||||
"Können Sie mit unserem bestehenden Team und Code arbeiten?",
|
"Können Sie in ein bestehendes Team und eine gewachsene Codebasis einsteigen?",
|
||||||
answer:
|
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?",
|
question: "Wem gehört der Code?",
|
||||||
answer:
|
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:
|
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." },
|
cases: { lead: "Wofür Teams mich buchen.", rest: "Zwei typische Fälle." },
|
||||||
booking: {
|
booking: {
|
||||||
label: "Buchung",
|
label: "Buchung",
|
||||||
title: { lead: "Gebucht wird monatsweise.", rest: "Nicht tageweise." },
|
title: {
|
||||||
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.",
|
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" },
|
rate: { label: "Pro Stunde", amount: "100 EUR", note: "netto" },
|
||||||
example: {
|
example: {
|
||||||
label: "Beispiel: 2 Tage pro Woche",
|
label: "Beispiel: 2 Tage pro Woche",
|
||||||
@@ -580,14 +593,14 @@ export const de: Content = {
|
|||||||
},
|
},
|
||||||
terms: [
|
terms: [
|
||||||
"Feste Wochentage, vereinbart für jeweils einen Monat",
|
"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",
|
"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",
|
cta: "Verfügbarkeit anfragen",
|
||||||
remote: {
|
remote: {
|
||||||
title: "Remote, ohne feste Bürozeiten",
|
title: "Remote & fokussiertes Arbeiten",
|
||||||
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.",
|
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: {
|
teaser: {
|
||||||
@@ -598,32 +611,35 @@ export const de: Content = {
|
|||||||
},
|
},
|
||||||
technology: {
|
technology: {
|
||||||
label: "Technik",
|
label: "Technik",
|
||||||
title: { lead: "Für welche Projekte", rest: "ich der Richtige bin." },
|
title: {
|
||||||
|
lead: "Projekte & Schwerpunkte:",
|
||||||
|
rest: "Wo meine Stärken liegen.",
|
||||||
|
},
|
||||||
fit: [
|
fit: [
|
||||||
{
|
{
|
||||||
title: "Passt gut",
|
title: "Ideale Einsatzbereiche",
|
||||||
items: [
|
items: [
|
||||||
"Web-Apps: Dashboards, Portale, interne Werkzeuge",
|
"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",
|
"Unternehmenswebsites, auch in mehreren Sprachen",
|
||||||
"Web3-Frontends: Wallets, Live-Daten, Dashboards",
|
"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: [
|
items: [
|
||||||
"Das Backend, das eine App braucht: APIs, Login, Integrationen",
|
"App-Backend: REST- und GraphQL-APIs, Authentifizierung, Datenbanken",
|
||||||
"Werkzeuge für die Kommandozeile",
|
"Entwickler-Werkzeuge und CLI-Tools",
|
||||||
"Bestehenden Code übernehmen und aufräumen",
|
"Refactoring und Modernisierung bestehender Codebasen",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Nicht mein Gebiet",
|
title: "Außerhalb meines Fokus",
|
||||||
items: [
|
items: [
|
||||||
"Mobile Apps für die App-Stores",
|
"Native Mobile Apps für App-Stores",
|
||||||
"Windows-Software",
|
"Klassische Windows-Software",
|
||||||
"Serverbetrieb, spezialisierte Datenbankarbeit",
|
"Server-Hardwarebetrieb und dedizierte Datenbankadministration",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -643,9 +659,9 @@ export const de: Content = {
|
|||||||
items: ["Automatisierte Tests", "Docker", "CI/CD"],
|
items: ["Automatisierte Tests", "Docker", "CI/CD"],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
pipelineTitle: "Was passiert, bevor eine Änderung live geht.",
|
pipelineTitle: "Qualitätssicherung vor jedem Deployment.",
|
||||||
pipelineIntro:
|
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: {
|
pipeline: {
|
||||||
simulate: "Änderung simulieren in",
|
simulate: "Änderung simulieren in",
|
||||||
scenarios: {
|
scenarios: {
|
||||||
@@ -678,16 +694,16 @@ export const de: Content = {
|
|||||||
stages: ["Lint", "Typen", "Tests", "Deploy"],
|
stages: ["Lint", "Typen", "Tests", "Deploy"],
|
||||||
explanations: [
|
explanations: [
|
||||||
{
|
{
|
||||||
title: "Eine Änderung kommt herein",
|
title: "Code-Änderung eingereicht",
|
||||||
text: "Im Bereich {area} wird etwas geändert. Bevor es live gehen kann, wird das ganze Projekt automatisch geprüft.",
|
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",
|
title: "Test schlägt fehl – Release blockiert",
|
||||||
text: "Die Änderung hat an einer anderen Stelle etwas kaputt gemacht. Das fällt hier auf, bei mir, und nichts davon erreicht Ihre Nutzer.",
|
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",
|
title: "Behoben, verifiziert und veröffentlicht",
|
||||||
text: "Ich repariere, was kaputtgegangen ist, der Durchlauf besteht, und erst dann geht die Änderung live.",
|
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",
|
runAgain: "Erneut starten",
|
||||||
@@ -707,50 +723,50 @@ export const de: Content = {
|
|||||||
blocked: "Freigabe gesperrt",
|
blocked: "Freigabe gesperrt",
|
||||||
released: "veröffentlicht",
|
released: "veröffentlicht",
|
||||||
footnote:
|
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: {
|
working: {
|
||||||
label: "Zusammenarbeit",
|
label: "Zusammenarbeit",
|
||||||
title: {
|
title: {
|
||||||
lead: "So läuft die Zusammenarbeit.",
|
lead: "So läuft die Zusammenarbeit.",
|
||||||
rest: "Direkt und nachvollziehbar.",
|
rest: "Direkt, transparent und verbindlich.",
|
||||||
},
|
},
|
||||||
principles: [
|
principles: [
|
||||||
{
|
{
|
||||||
title: "Ein Ansprechpartner",
|
title: "Fester Ansprechpartner",
|
||||||
text: "Sie sprechen mit mir, und ich bin derjenige, der die Arbeit macht.",
|
text: "Sie sprechen direkt mit mir – und ich bin auch derjenige, der Ihr Projekt technisch umsetzt.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Stunden, die Sie nachprüfen können",
|
title: "Transparente Zeiterfassung",
|
||||||
text: "Ich erfasse meine Zeit. Die Monatsrechnung zeigt, wofür die Stunden angefallen sind.",
|
text: "Sämtliche Stunden werden minutengenau erfasst. Die Monatsrechnung schlüsselt exakt auf, woran gearbeitet wurde.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Sorgfältige Arbeit",
|
title: "Verlässliche Qualität",
|
||||||
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.",
|
text: "Ich übergebe ausschließlich getesteten Code und kommuniziere Risiken oder Unklarheiten frühzeitig und offen.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Was ich baue, gehört Ihnen",
|
title: "Volles Eigentum",
|
||||||
text: "Code und Design gehören Ihnen. Sie können beides an einen anderen Entwickler übergeben.",
|
text: "Code und Design gehören zu 100 % Ihnen. Eine Übergabe an interne Teams oder andere Entwickler ist jederzeit problemlos möglich.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
diagram: {
|
diagram: {
|
||||||
description:
|
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"],
|
chain: ["Sie", "Vertrieb", "Manager", "Designer", "Entwickler"],
|
||||||
you: "Sie",
|
you: "Sie",
|
||||||
me: "Ich",
|
me: "Ich",
|
||||||
often: "oft",
|
often: "oft",
|
||||||
withMe: "bei mir",
|
withMe: "bei mir",
|
||||||
oftenLong: "oft: eine Anfrage wird weitergereicht",
|
oftenLong: "Klassisch: Viele Zwischenstationen und Informationsverluste",
|
||||||
withMeLong: "bei mir: eine direkte Leitung",
|
withMeLong: "Bei mir: Direkter Austausch ohne Reibungsverluste",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
work: {
|
work: {
|
||||||
label: "Meine Arbeit",
|
label: "Meine Arbeit",
|
||||||
title: {
|
title: {
|
||||||
lead: "Zwei Websites, die ich gebaut habe.",
|
lead: "Ausgewählte Web-Projekte.",
|
||||||
rest: "Beide sind live.",
|
rest: "Erfolgreich im Live-Einsatz.",
|
||||||
},
|
},
|
||||||
items: {
|
items: {
|
||||||
"klz-cables.com": {
|
"klz-cables.com": {
|
||||||
@@ -777,36 +793,37 @@ export const de: Content = {
|
|||||||
openLive: "Live-Website öffnen",
|
openLive: "Live-Website öffnen",
|
||||||
desktopAlt: "{name} auf einem Desktop-Bildschirm",
|
desktopAlt: "{name} auf einem Desktop-Bildschirm",
|
||||||
phoneAlt: "{name} auf einem Handy",
|
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: {
|
faq: {
|
||||||
label: "Fragen",
|
label: "Fragen",
|
||||||
title: { lead: "Gut zu wissen,", rest: "bevor wir sprechen." },
|
title: { lead: "Gut zu wissen,", rest: "bevor wir sprechen." },
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
question: "Ich bin kein Technikmensch. Ist das ein Problem?",
|
question:
|
||||||
|
"Ich habe keinen technischen Hintergrund. Ist das ein Problem?",
|
||||||
answer:
|
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:
|
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:
|
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:
|
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:
|
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: "REDEN", tone: "bits" },
|
||||||
{ text: "WIR.", tone: "solid" },
|
{ 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",
|
newMessage: "Neue Nachricht",
|
||||||
draft: "Entwurf",
|
draft: "Entwurf",
|
||||||
need: "Ich brauche",
|
need: "Ich brauche",
|
||||||
@@ -830,40 +847,40 @@ export const de: Content = {
|
|||||||
id: "developer",
|
id: "developer",
|
||||||
label: "Einen Entwickler",
|
label: "Einen Entwickler",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "Ein Entwickler für unser Produkt",
|
subject: "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}`,
|
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",
|
id: "rescue",
|
||||||
label: "Eine zuverlässige App",
|
label: "App stabilisieren",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "Unsere App soll zuverlässig werden",
|
subject: "Unterstützung bei App-Stabilisierung",
|
||||||
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}`,
|
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",
|
id: "automation",
|
||||||
label: "Automatisierung",
|
label: "Automatisierung",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "Wir möchten einen Ablauf automatisieren",
|
subject: "Prozessautomatisierung anfragen",
|
||||||
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}`,
|
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",
|
id: "website",
|
||||||
label: "Eine Website",
|
label: "Eine Website",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "Eine Website für mein Unternehmen",
|
subject: "Neue Unternehmenswebsite",
|
||||||
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}`,
|
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",
|
id: "other",
|
||||||
label: "Etwas anderes",
|
label: "Etwas anderes",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "Eine Frage",
|
subject: "Allgemeine Anfrage",
|
||||||
body: `${GREETING}\n\n[was Sie vorhaben]\n\n${SIGN_OFF}`,
|
body: `${GREETING}\n\n[Ihr Anliegen]\n\n${SIGN_OFF}`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
+278
-264
@@ -1,15 +1,15 @@
|
|||||||
import type { Content } from "./types";
|
import type { Content } from "./types";
|
||||||
|
|
||||||
const SIGN_OFF = "Best regards";
|
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";
|
const GET_IN_TOUCH = "Get in touch";
|
||||||
|
|
||||||
/** The English texts of the site. de.ts holds the same in German. */
|
/** The English texts of the site. de.ts holds the same in German. */
|
||||||
export const en: Content = {
|
export const en: Content = {
|
||||||
site: {
|
site: {
|
||||||
title: "Freelance web developer for web apps & websites | Marc Mintel",
|
title: "Freelance Web Developer for Web Apps & Websites | Marc Mintel",
|
||||||
description:
|
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",
|
jobTitle: "Freelance web developer",
|
||||||
ogLocale: "en_US",
|
ogLocale: "en_US",
|
||||||
shareImageAlt:
|
shareImageAlt:
|
||||||
@@ -40,23 +40,23 @@ export const en: Content = {
|
|||||||
{ text: "& WEBSITES.", tone: "bits" },
|
{ text: "& WEBSITES.", tone: "bits" },
|
||||||
],
|
],
|
||||||
lead: "Freelance web developer with 15 years of experience.",
|
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,
|
primaryCta: GET_IN_TOUCH,
|
||||||
secondaryCta: "What I do",
|
secondaryCta: "Services & Approach",
|
||||||
trust: [
|
trust: [
|
||||||
"One contact, who builds it himself",
|
"Direct technical contact – end-to-end execution",
|
||||||
"An offer before anything costs money",
|
"Binding quote before project kickoff",
|
||||||
"Changes by email, no system to learn",
|
"Effortless updates by email – no CMS training needed",
|
||||||
"Servers in Germany",
|
"Hosted on secure servers in Germany",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
hello: {
|
hello: {
|
||||||
label: "Hello",
|
label: "Hello",
|
||||||
title: "I am Marc.",
|
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: [
|
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.",
|
"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 with me directly. Whether you run a product team or are commissioning something like this for the first time.",
|
"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",
|
portraitAlt: "Marc Mintel, freelance web developer",
|
||||||
careerLabel: "The path so far",
|
careerLabel: "The path so far",
|
||||||
@@ -66,70 +66,73 @@ export const en: Content = {
|
|||||||
{
|
{
|
||||||
years: "2020 – 2023",
|
years: "2020 – 2023",
|
||||||
role: "Product companies",
|
role: "Product companies",
|
||||||
place: "Senior software developer",
|
place: "Senior software engineer",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
years: "Today",
|
years: "Today",
|
||||||
role: "Independent",
|
role: "Independent",
|
||||||
place: "Working directly with clients",
|
place: "Direct collaboration with clients",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
services: {
|
services: {
|
||||||
label: "Services",
|
label: "Services",
|
||||||
title: { lead: "What do you need?", rest: "Usually one of the two." },
|
title: {
|
||||||
tablistLabel: "What do you need?",
|
lead: "What are you planning?",
|
||||||
youGet: "What you get",
|
rest: "Tailored engineering for your goals.",
|
||||||
howItRuns: "How it runs",
|
},
|
||||||
|
tablistLabel: "What are you planning?",
|
||||||
|
youGet: "What you receive",
|
||||||
|
howItRuns: "The process",
|
||||||
care: {
|
care: {
|
||||||
label: "After the launch",
|
label: "After launch",
|
||||||
title: "I keep looking after your website, if you want that.",
|
title: "Ongoing maintenance and support – reliable and long-term.",
|
||||||
text: "You do not have to operate a system or maintain anything yourself. When something needs to change, you write me an email.",
|
text: "No need to learn a complex CMS: for content updates or adjustments, a quick email is all it takes.",
|
||||||
price: {
|
price: {
|
||||||
label: "Care",
|
label: "Maintenance",
|
||||||
amount: "89 EUR",
|
amount: "89 EUR",
|
||||||
note: "per month, net, cancel monthly",
|
note: "per month, net, cancel monthly",
|
||||||
},
|
},
|
||||||
includedLabel: "What is included",
|
includedLabel: "What is included",
|
||||||
included: [
|
included: [
|
||||||
"The website runs on servers in Germany",
|
"Hosted on secure servers in Germany",
|
||||||
"Address, security and technology are taken care of",
|
"Domain, SSL encryption and technical updates included",
|
||||||
"Small changes: a text, a picture, new opening hours",
|
"Minor updates: text adjustments, images or business hours",
|
||||||
"No editing system, no login",
|
"No complex CMS to manage, no maintenance burden on your end",
|
||||||
],
|
],
|
||||||
termsLabel: "Good to know",
|
termsLabel: "Good to know",
|
||||||
terms: [
|
terms: [
|
||||||
"The first three months are included in the project price.",
|
"The first three months are already included in the project price.",
|
||||||
"Anything bigger, such as a new page, gets a price first.",
|
"Larger additions (such as new subpages) are quoted transparently in advance.",
|
||||||
"I reply within two working days. There is no on-call service.",
|
"Response time within two business days (no 24/7 on-call service).",
|
||||||
"If you want to leave, you take everything with you. The website is yours.",
|
"No vendor lock-in: all code and content belong 100% to you.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
offer: {
|
offer: {
|
||||||
title: "You get an offer before anything costs money.",
|
title: "A clear, binding quote before project kickoff.",
|
||||||
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.",
|
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: "Ask for an offer",
|
cta: "Request a quote",
|
||||||
},
|
},
|
||||||
estimate: {
|
estimate: {
|
||||||
label: "What it costs",
|
label: "Pricing & estimates",
|
||||||
title: "How you get to a price",
|
title: "Transparent project estimates",
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: "A call, about 20 minutes",
|
title: "Intro call (approx. 20 minutes)",
|
||||||
text: "You tell me what you need.",
|
text: "We discuss your goals, requirements and scope.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "A written estimate",
|
title: "Written estimate",
|
||||||
text: "You see the estimated hours and what they include.",
|
text: "You receive a clear breakdown of estimated hours and deliverables.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "You approve a budget",
|
title: "Budget approval & billing",
|
||||||
text: "I bill the hours actually used and tell you early if it will not be enough.",
|
text: "Work is billed against actual hours. If anything diverges from the estimate, I flag it early.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orientationLabel: "For orientation",
|
orientationLabel: "For orientation",
|
||||||
net: "All prices net.",
|
net: "All prices net.",
|
||||||
cta: "Ask for an estimate",
|
cta: "Request an estimate",
|
||||||
},
|
},
|
||||||
paths: [
|
paths: [
|
||||||
{
|
{
|
||||||
@@ -137,146 +140,150 @@ export const en: Content = {
|
|||||||
service: "Web app and frontend development",
|
service: "Web app and frontend development",
|
||||||
need: "We need a developer for our product",
|
need: "We need a developer for our product",
|
||||||
forWhom: "Startups, product teams, agencies, Web3 teams",
|
forWhom: "Startups, product teams, agencies, Web3 teams",
|
||||||
headline: "An experienced developer who joins your project.",
|
headline: "Senior engineering power for your product team.",
|
||||||
intro:
|
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: [
|
youGet: [
|
||||||
"Web apps, dashboards, customer portals and internal tools",
|
"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",
|
"Web3 frontends: wallet connection, live data, dashboards",
|
||||||
"Small tools and automation for recurring work",
|
"Custom tools and automation for recurring workflows",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: FIRST_CALL,
|
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",
|
title: "Agreeing on cadence",
|
||||||
text: "How many days a week I work for you, and what should come first.",
|
text: "We define weekly days and prioritize the upcoming roadmap items.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "I work through the list",
|
title: "Focused execution",
|
||||||
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.",
|
text: "Completed work is delivered continuously for review. Hours are logged transparently with clear task attribution.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Two weeks notice",
|
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",
|
orientation: "100 EUR per hour, booked by the month",
|
||||||
orientationNote:
|
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",
|
id: "rescue",
|
||||||
service: "Code review and stabilisation of web apps",
|
service: "Code review and stabilisation of web apps",
|
||||||
need: "Our app needs to become reliable",
|
need: "Our app needs to become reliable",
|
||||||
forWhom: "Teams whose app was built quickly and is now hard to change",
|
forWhom:
|
||||||
headline: "A week to look at your app and fix what is most urgent.",
|
"Teams with fast-growing codebases that have accumulated technical debt or stability issues",
|
||||||
|
headline:
|
||||||
|
"One-week code sprint: audit, stabilization and immediate fixes.",
|
||||||
intro:
|
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: [
|
youGet: [
|
||||||
"An honest assessment: what is solid and what is fragile",
|
"Thorough architecture audit: solid foundations vs. stability and security risks",
|
||||||
"Automated tests for the most important parts",
|
"Automated test coverage for mission-critical workflows",
|
||||||
"The most urgent problems fixed, as far as a week allows",
|
"Immediate resolution of high-priority bottlenecks within the sprint",
|
||||||
"A written list of next steps, in plain language",
|
"Actionable roadmap of recommended next steps – documented in plain language",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: FIRST_CALL,
|
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",
|
title: "Five-day deep dive",
|
||||||
text: "I read the code, add tests where they matter most and fix the most urgent problems.",
|
text: "I inspect the code, add tests where leverage is highest, and resolve the most urgent blockers.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "A written summary",
|
title: "Actionable report",
|
||||||
text: "What I found, what I changed and what I recommend. Written so that you can follow it without being a developer.",
|
text: "Findings, applied fixes, and strategic recommendations – written so non-developers can make informed decisions.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "You decide how to continue",
|
title: "You choose how to proceed",
|
||||||
text: "With me, with your own team, or not at all.",
|
text: "Continue together, hand over to your internal team, or wrap up.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orientation: "3,500 EUR for one fixed week",
|
orientation: "3,500 EUR for one fixed week",
|
||||||
orientationNote:
|
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",
|
id: "automation",
|
||||||
service: "Process automation and system integration",
|
service: "Process automation and system integration",
|
||||||
need: "We want to automate a process",
|
need: "We want to automate a process",
|
||||||
forWhom:
|
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:
|
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:
|
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: [
|
youGet: [
|
||||||
"Connections between your systems through their interfaces (APIs)",
|
"Direct API integrations between your existing business tools",
|
||||||
"Recurring workflows that run without manual steps",
|
"Fully automated workflows without manual intervention",
|
||||||
"Where it helps, steps handled with AI: sorting, summarising, reading documents",
|
"Targeted AI steps where valuable: document parsing, categorization, summarization",
|
||||||
"A short description of how it works, so it can be maintained",
|
"Concise system documentation for reliable operation and easy maintenance",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: FIRST_CALL,
|
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",
|
title: "Process discovery",
|
||||||
text: "Step by step, with the people who do it. Often a part can be automated, not everything.",
|
text: "We review the current process with the people doing the work and identify high-impact automation targets.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "I connect the systems",
|
title: "Modular integration",
|
||||||
text: "One step at a time. You test it with real cases before it replaces the manual work.",
|
text: "Step-by-step implementation, tested with production-like data before replacing manual workflows.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "It runs on its own",
|
title: "Autonomous operation",
|
||||||
text: "You get a note on what it does and what to check when one of the tools changes.",
|
text: "The automation runs smoothly. You receive clean documentation on maintenance and system changes.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orientation: "100 EUR per hour, after an estimate",
|
orientation: "100 EUR per hour, after an estimate",
|
||||||
orientationNote:
|
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",
|
id: "website",
|
||||||
service: "Website design and development",
|
service: "Website design and development",
|
||||||
need: "I just need a website",
|
need: "I need a professional company website",
|
||||||
forWhom: "Companies and self-employed people who want it taken care of",
|
forWhom:
|
||||||
headline: "A website, built and looked after for you.",
|
"Businesses and founders looking for a turnkey, bespoke web presence",
|
||||||
|
headline:
|
||||||
|
"Your company website: custom-designed, engineered and maintained.",
|
||||||
intro:
|
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: [
|
youGet: [
|
||||||
"A design made for your business, not a template",
|
"Bespoke design tailored to your brand – no off-the-shelf templates",
|
||||||
"Works on phone, tablet and desktop",
|
"Fully responsive layout across mobile, tablet and desktop",
|
||||||
"Hosting taken care of, no server for you to manage",
|
"Hosting, domain and SSL managed end-to-end with zero hassle",
|
||||||
"Changes by email: you write what you need, I make the change",
|
"Effortless updates by email: send what you need, and it gets implemented promptly",
|
||||||
],
|
],
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: FIRST_CALL,
|
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",
|
title: "Interactive prototype",
|
||||||
text: "You get a first version to click through. We adjust it until it fits.",
|
text: "You receive a clickable initial version and we refine layout and copy together.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "I build it and put it online",
|
title: "Development & launch",
|
||||||
text: "With your texts and images and a contact form. You approve it before it goes live.",
|
text: "Complete technical implementation with content, speed optimization, and forms. Goes live only with your sign-off.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Changes afterwards",
|
title: "Ongoing care",
|
||||||
text: "A new photo or a changed price: you send me an email.",
|
text: "New images, updated business hours, or revised pricing: just send a quick email.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orientation: "From 3,800 EUR, one-off",
|
orientation: "From 3,800 EUR, one-off",
|
||||||
orientationNote:
|
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: {
|
scenes: {
|
||||||
@@ -285,55 +292,55 @@ export const en: Content = {
|
|||||||
talkLength: "about 20 minutes",
|
talkLength: "about 20 minutes",
|
||||||
days: ["Mon", "Tue", "Wed", "Thu", "Fri"],
|
days: ["Mon", "Tue", "Wed", "Thu", "Fri"],
|
||||||
daysNote: "for example three days a week",
|
daysNote: "for example three days a week",
|
||||||
review: "finished parts go to you for review",
|
review: "milestones delivered continuously for review",
|
||||||
week: "week {n}",
|
week: "week {n}",
|
||||||
monthEnd: "end of month",
|
monthEnd: "end of month",
|
||||||
notice: "two weeks notice",
|
notice: "two weeks notice",
|
||||||
repair: "fragile parts get tests and fixes",
|
repair: "testing & stabilizing critical paths",
|
||||||
summaryParts: ["found", "changed", "next"],
|
summaryParts: ["findings", "fixes", "next steps"],
|
||||||
summaryNote: "written so you can follow it",
|
summaryNote: "clearly documented for your team",
|
||||||
options: ["continue with me", "your own team", "stop here"],
|
options: ["continue together", "hand over to team", "wrap up"],
|
||||||
online: "online",
|
online: "online",
|
||||||
exampleDomain: "yourcompany.com",
|
exampleDomain: "yourcompany.com",
|
||||||
firstVersion: "a first version to click through",
|
firstVersion: "interactive prototype to click through",
|
||||||
approve: "you approve it before it goes live",
|
approve: "sign-off before going live",
|
||||||
changeByEmail: "you send an email, I make the change",
|
changeByEmail: "updates easily handled by email",
|
||||||
tools: ["Shop", "Accounting", "Email", "CRM"],
|
tools: ["Shop", "Accounting", "Email", "CRM"],
|
||||||
byHand: "today: copied by hand",
|
byHand: "previously: copied manually",
|
||||||
wiring: "connected one step at a time",
|
wiring: "integrated step by step",
|
||||||
running: "the steps run without anyone copying",
|
running: "workflows run fully automated",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
automation: {
|
automation: {
|
||||||
label: "Process automation",
|
label: "Process automation",
|
||||||
title: {
|
title: {
|
||||||
lead: "Your tools do the routine work.",
|
lead: "Automate routine workflows.",
|
||||||
rest: "Nobody retypes anything.",
|
rest: "Eliminate errors and manual handoffs.",
|
||||||
},
|
},
|
||||||
intro:
|
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",
|
examplesLabel: "Example workflows",
|
||||||
running: "running",
|
running: "running",
|
||||||
runComplete: "run complete",
|
runComplete: "run complete",
|
||||||
log: "Log",
|
log: "Log",
|
||||||
byHand: "By hand",
|
byHand: "Manual",
|
||||||
automated: "Automated",
|
automated: "Automated",
|
||||||
kinds: {
|
kinds: {
|
||||||
trigger: "Trigger: something happens",
|
trigger: "Trigger: an event occurs",
|
||||||
rule: "Rule: a fixed check",
|
rule: "Rule: predefined business logic",
|
||||||
ai: "AI step: reads or sorts",
|
ai: "AI step: automated parsing or classification",
|
||||||
action: "Action: a system does something",
|
action: "Action: system executes operation",
|
||||||
human: "Person: decides the unclear cases",
|
human: "Human review: manual sign-off on edge cases",
|
||||||
},
|
},
|
||||||
workflows: {
|
workflows: {
|
||||||
order: {
|
order: {
|
||||||
name: "Order to invoice",
|
name: "Order to invoice",
|
||||||
summary:
|
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:
|
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:
|
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: {
|
nodes: {
|
||||||
shop: { system: "Shop", label: "New order", log: "order received" },
|
shop: { system: "Shop", label: "New order", log: "order received" },
|
||||||
stock: {
|
stock: {
|
||||||
@@ -361,11 +368,11 @@ export const en: Content = {
|
|||||||
documents: {
|
documents: {
|
||||||
name: "Incoming documents",
|
name: "Incoming documents",
|
||||||
summary:
|
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:
|
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:
|
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: {
|
nodes: {
|
||||||
inbox: {
|
inbox: {
|
||||||
system: "Inbox",
|
system: "Inbox",
|
||||||
@@ -384,20 +391,20 @@ export const en: Content = {
|
|||||||
log: "booked automatically",
|
log: "booked automatically",
|
||||||
},
|
},
|
||||||
ask: {
|
ask: {
|
||||||
system: "A person",
|
system: "Team member",
|
||||||
label: "Review and decide",
|
label: "Review & approve",
|
||||||
log: "unclear: sent to a person for review",
|
log: "unclear: routed to staff for review",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
lead: {
|
lead: {
|
||||||
name: "Enquiry to follow-up",
|
name: "Enquiry to follow-up",
|
||||||
summary:
|
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:
|
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:
|
automated:
|
||||||
"The enquiry is filed, assigned and followed up on schedule.",
|
"Automated: instant lead capture, immediate routing, and scheduled reminders.",
|
||||||
nodes: {
|
nodes: {
|
||||||
form: {
|
form: {
|
||||||
system: "Website",
|
system: "Website",
|
||||||
@@ -431,25 +438,25 @@ export const en: Content = {
|
|||||||
{
|
{
|
||||||
title: "Worth automating when",
|
title: "Worth automating when",
|
||||||
items: [
|
items: [
|
||||||
"The same steps repeat every day or every week",
|
"Identical tasks repeat daily or weekly",
|
||||||
"Data is typed from one tool into another",
|
"Data is manually moved between different software tools",
|
||||||
"Mistakes happen because the work is monotonous",
|
"Delays or mistakes occur due to monotonous routine work",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "What stays with people",
|
title: "What stays with your team",
|
||||||
items: [
|
items: [
|
||||||
"Decisions and exceptions",
|
"Strategic decisions and nuanced exceptions",
|
||||||
"Anything a customer should hear from a person",
|
"High-touch customer relationships and advisory",
|
||||||
"The final say when the automation is unsure",
|
"Final sign-off on ambiguous cases",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "What I need from you",
|
title: "What I need from you",
|
||||||
items: [
|
items: [
|
||||||
"Access to the tools and their interfaces (APIs)",
|
"Access to the software tools and their APIs",
|
||||||
"Someone who knows the process as it is done today",
|
"Insights into the current workflow from the people running it",
|
||||||
"Real examples to test with",
|
"Real-world test data for validation",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -458,10 +465,10 @@ export const en: Content = {
|
|||||||
label: "Web presentations",
|
label: "Web presentations",
|
||||||
title: { lead: "A presentation as a link.", rest: "Not as an attachment." },
|
title: { lead: "A presentation as a link.", rest: "Not as an attachment." },
|
||||||
intro:
|
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: {
|
compare: {
|
||||||
description:
|
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",
|
slides: "Slide file",
|
||||||
web: "Web presentation",
|
web: "Web presentation",
|
||||||
pickScreen: "Shown on",
|
pickScreen: "Shown on",
|
||||||
@@ -475,142 +482,149 @@ export const en: Content = {
|
|||||||
},
|
},
|
||||||
reasons: [
|
reasons: [
|
||||||
{
|
{
|
||||||
title: "Fits every screen",
|
title: "Flawless on every screen",
|
||||||
text: "A slide has one fixed format. A web presentation rearranges itself for the projector, the laptop and the phone.",
|
text: "Whether on a 4K projector, laptop, or smartphone: content reflows naturally for optimal readability.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "One link, one version",
|
title: "One live link, always up to date",
|
||||||
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.",
|
text: "No more circulating outdated attachment versions: edits are instantly live for anyone opening the URL.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Shows the real thing",
|
title: "Real interactivity over static screenshots",
|
||||||
text: "Current figures, a working demo or a clickable prototype can sit inside the presentation, instead of a screenshot of them.",
|
text: "Embed live metrics, working product demos, or clickable prototypes directly into the narrative.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Still useful afterwards",
|
title: "A lasting asset after the meeting",
|
||||||
text: "After the meeting it is a page people can read on their own, pass on and find again.",
|
text: "Instead of being lost in inboxes, your presentation remains a high-impact, shareable landing page.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
goodFor: {
|
goodFor: {
|
||||||
title: "Typical uses",
|
title: "Typical uses",
|
||||||
items: [
|
items: [
|
||||||
"Company and product presentations",
|
"Company and product presentations",
|
||||||
"Pitches and offers sent as a link",
|
"Pitches and proposals sent as a link",
|
||||||
"Reports with figures that change",
|
"Reports with dynamic, changing data",
|
||||||
"Screens at trade fairs and events",
|
"Display screens at trade fairs and events",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
honest: {
|
honest: {
|
||||||
title: "When slides are enough",
|
title: "When standard slides are sufficient",
|
||||||
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.",
|
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: {
|
story: {
|
||||||
hello: "For a project on the web you need someone who builds it.",
|
hello: "Ambitious web projects require proven technical craftsmanship.",
|
||||||
services: "First we find out what you really need.",
|
services:
|
||||||
|
"First, we clarify your core requirements and architectural goals.",
|
||||||
automation:
|
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:
|
presentations:
|
||||||
"And sometimes it is a meeting in which you have to convince.",
|
"Or a high-stakes presentation that needs to leave a lasting impression.",
|
||||||
work: "In the end there is something that runs.",
|
work: "The end result: rock-solid software that performs reliably in production.",
|
||||||
faq: "Before that, a few questions usually remain.",
|
faq: "Answers to common questions before we begin.",
|
||||||
contact: "And then it starts with an email.",
|
contact: "Let's discuss your project.",
|
||||||
},
|
},
|
||||||
freelance: {
|
freelance: {
|
||||||
metaTitle: "Freelance web developer for your team | Marc Mintel",
|
metaTitle: "Freelance Web Developer for Engineering Teams | Marc Mintel",
|
||||||
metaDescription:
|
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",
|
label: "Freelance",
|
||||||
title: {
|
title: {
|
||||||
lead: "A developer for your team.",
|
lead: "Senior engineering power for your team.",
|
||||||
rest: "The technical details.",
|
rest: "Technical details & approach.",
|
||||||
},
|
},
|
||||||
intro:
|
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",
|
pipelineLabel: "Safeguards",
|
||||||
faq: {
|
faq: {
|
||||||
title: { lead: "Good to know", rest: "before you book." },
|
title: { lead: "Good to know", rest: "before you book." },
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
question: "How long are we committed?",
|
question: "How flexible is the engagement?",
|
||||||
answer:
|
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:
|
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?",
|
question: "Who owns the code?",
|
||||||
answer:
|
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:
|
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." },
|
cases: { lead: "What teams book me for.", rest: "Two typical cases." },
|
||||||
booking: {
|
booking: {
|
||||||
label: "Booking",
|
label: "Booking",
|
||||||
title: { lead: "Booked by the month.", rest: "Not by the day." },
|
title: {
|
||||||
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.",
|
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" },
|
rate: { label: "Per hour", amount: "100 EUR", note: "net" },
|
||||||
example: {
|
example: {
|
||||||
label: "Example: 2 days a week",
|
label: "Example: 2 days a week",
|
||||||
amount: "about 6,400 EUR",
|
amount: "approx. 6,400 EUR",
|
||||||
note: "64 hours in four weeks, net",
|
note: "64 hours over four weeks, net",
|
||||||
},
|
},
|
||||||
terms: [
|
terms: [
|
||||||
"Fixed days of the week, agreed for one month at a time",
|
"Dedicated weekly days, booked on a monthly basis",
|
||||||
"One invoice per month, with the tracked hours",
|
"Itemized monthly invoices with transparent time tracking",
|
||||||
"Either side can end it with two weeks notice to the end of a month",
|
"Two weeks notice to the end of any month on both sides",
|
||||||
"I do not book single days",
|
"No single-day ad-hoc bookings",
|
||||||
],
|
],
|
||||||
cta: "Ask about availability",
|
cta: "Check availability",
|
||||||
remote: {
|
remote: {
|
||||||
title: "Remote, without fixed office hours",
|
title: "Remote & focused deep work",
|
||||||
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.",
|
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: {
|
teaser: {
|
||||||
title: "You develop yourself or lead a team?",
|
title: "Are you an engineering lead or CTO?",
|
||||||
text: "Which projects I am right for, what I work with and how I secure changes is on a page of its own.",
|
text: "Explore my technical focus, stack, and CI/CD quality assurance workflows on a dedicated page.",
|
||||||
cta: "To the technical details",
|
cta: "Explore technical details",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
technology: {
|
technology: {
|
||||||
label: "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: [
|
fit: [
|
||||||
{
|
{
|
||||||
title: "A good fit",
|
title: "Ideal project fit",
|
||||||
items: [
|
items: [
|
||||||
"Web apps: dashboards, portals, internal tools",
|
"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",
|
"Company websites, also in several languages",
|
||||||
"Web3 frontends: wallets, live data, dashboards",
|
"Web3 frontends: wallets, live data, dashboards",
|
||||||
"Automation: connecting systems and their APIs",
|
"Automation: connecting systems and their APIs",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Also possible",
|
title: "Also covered",
|
||||||
items: [
|
items: [
|
||||||
"The backend an app needs: APIs, login, integrations",
|
"App backends: REST & GraphQL APIs, authentication, databases",
|
||||||
"Command-line tools",
|
"Command-line tools and developer utilities",
|
||||||
"Taking over and tidying up existing code",
|
"Refactoring and modernizing existing codebases",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Not my field",
|
title: "Outside my focus",
|
||||||
items: [
|
items: [
|
||||||
"Mobile apps for the app stores",
|
"Native mobile apps for app stores",
|
||||||
"Windows software",
|
"Legacy Windows software",
|
||||||
"Running servers, specialised database work",
|
"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"],
|
items: ["TypeScript", "React", "Next.js", "Vue.js", "Tailwind CSS"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
area: "Behind it",
|
area: "Backend & Data",
|
||||||
items: ["Node.js", "REST APIs", "PostgreSQL", "Headless CMS"],
|
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"] },
|
{ 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:
|
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: {
|
pipeline: {
|
||||||
simulate: "Simulate a change in",
|
simulate: "Simulate a change in",
|
||||||
scenarios: {
|
scenarios: {
|
||||||
@@ -661,23 +675,23 @@ export const en: Content = {
|
|||||||
stages: ["Lint", "Types", "Tests", "Deploy"],
|
stages: ["Lint", "Types", "Tests", "Deploy"],
|
||||||
explanations: [
|
explanations: [
|
||||||
{
|
{
|
||||||
title: "A change comes in",
|
title: "Change submitted",
|
||||||
text: "Something is changed in {area}. Before it can go live, the whole project is checked automatically.",
|
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",
|
title: "Test fails – release blocked",
|
||||||
text: "The change broke something in a different place. It is caught here, on my side, and nothing reaches your users.",
|
text: "The change triggered an unexpected regression. The automated pipeline halts immediately – broken code never reaches your users.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Fixed, checked again, released",
|
title: "Fixed, verified, and deployed",
|
||||||
text: "I repair what broke, the run passes, and only then does the change go live.",
|
text: "The regression is resolved, the test suite turns green, and only then is the release securely promoted to production.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
runAgain: "Run again",
|
runAgain: "Run again",
|
||||||
run: "run",
|
run: "run",
|
||||||
fixPushed: "fix pushed",
|
fixPushed: "fix pushed",
|
||||||
lint: "$ lint: checking the code style…",
|
lint: "$ lint: checking code style…",
|
||||||
types: "$ types: checking that the parts fit together…",
|
types: "$ types: validating type safety and interfaces…",
|
||||||
tests: "tests",
|
tests: "tests",
|
||||||
expected: "expected",
|
expected: "expected",
|
||||||
received: "received",
|
received: "received",
|
||||||
@@ -690,103 +704,103 @@ export const en: Content = {
|
|||||||
blocked: "release blocked",
|
blocked: "release blocked",
|
||||||
released: "released",
|
released: "released",
|
||||||
footnote:
|
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: {
|
working: {
|
||||||
label: "Working with me",
|
label: "Working with me",
|
||||||
title: {
|
title: {
|
||||||
lead: "How working together goes.",
|
lead: "Working relationship.",
|
||||||
rest: "Direct and easy to follow.",
|
rest: "Direct, transparent, and dependable.",
|
||||||
},
|
},
|
||||||
principles: [
|
principles: [
|
||||||
{
|
{
|
||||||
title: "One contact",
|
title: "Dedicated point of contact",
|
||||||
text: "You talk to me, and I am the one who does the work.",
|
text: "You communicate directly with me – and I am the engineer who implements your code.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Hours you can check",
|
title: "Transparent time tracking",
|
||||||
text: "I track my time. The monthly invoice shows what the hours were spent on.",
|
text: "Every hour is logged with precision. Monthly invoices itemize exactly what tasks were completed.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Careful work",
|
title: "Engineered quality",
|
||||||
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.",
|
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",
|
title: "Full IP ownership",
|
||||||
text: "Code and design belong to you. You can hand them to another developer.",
|
text: "All code, architecture, and design belong entirely to you. Handoffs to internal teams or other developers are seamless.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
diagram: {
|
diagram: {
|
||||||
description:
|
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"],
|
chain: ["You", "Sales", "Manager", "Designer", "Developer"],
|
||||||
you: "You",
|
you: "You",
|
||||||
me: "Me",
|
me: "Me",
|
||||||
often: "often",
|
often: "often",
|
||||||
withMe: "with me",
|
withMe: "with me",
|
||||||
oftenLong: "often: a request is passed along",
|
oftenLong: "Agencies: multiple handoffs and communication overhead",
|
||||||
withMeLong: "with me: one direct line",
|
withMeLong: "With me: direct technical alignment without friction",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
work: {
|
work: {
|
||||||
label: "My 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: {
|
items: {
|
||||||
"klz-cables.com": {
|
"klz-cables.com": {
|
||||||
client: "Cable supplier",
|
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: [
|
did: [
|
||||||
"Product catalogue with categories and detail pages",
|
"Product catalogue with structured categories and detail pages",
|
||||||
"Datasheets generated from the product data",
|
"Dynamic datasheet generation from product specifications",
|
||||||
"Content the client can edit in a CMS",
|
"Headless CMS integration for intuitive client editing",
|
||||||
],
|
],
|
||||||
tech: ["Next.js", "TypeScript", "Headless CMS", "Two languages"],
|
tech: ["Next.js", "TypeScript", "Headless CMS", "Two languages"],
|
||||||
},
|
},
|
||||||
"e-tib.com": {
|
"e-tib.com": {
|
||||||
client: "Cable network construction",
|
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: [
|
did: [
|
||||||
"Pages for services, references, careers and events",
|
"Dedicated sections for services, references, careers and events",
|
||||||
"The same content in two languages",
|
"Synchronized multilingual content architecture",
|
||||||
"Works on phone, tablet and desktop",
|
"Responsive layouts optimized for mobile, tablet and desktop",
|
||||||
],
|
],
|
||||||
tech: ["Next.js", "TypeScript", "Headless CMS", "Two languages"],
|
tech: ["Next.js", "TypeScript", "Headless CMS", "Two languages"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
openLive: "Open the live site",
|
openLive: "Open live website",
|
||||||
desktopAlt: "{name} on a desktop screen",
|
desktopAlt: "{name} on a desktop screen",
|
||||||
phoneAlt: "{name} on a phone",
|
phoneAlt: "{name} on a mobile screen",
|
||||||
note: "Besides client work I build my own software, among other things a system in Rust and Solidity that runs on seven blockchains.",
|
note: "Alongside client work, I develop proprietary systems – including an engine in Rust and Solidity running in production across seven blockchains.",
|
||||||
},
|
},
|
||||||
faq: {
|
faq: {
|
||||||
label: "Questions",
|
label: "Questions",
|
||||||
title: { lead: "Good to know", rest: "before we talk." },
|
title: { lead: "Good to know", rest: "before we talk." },
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
question: "I am not technical. Is that a problem?",
|
question: "I don't have a technical background. Is that an issue?",
|
||||||
answer:
|
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:
|
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?",
|
question: "Who owns what you build?",
|
||||||
answer:
|
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:
|
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:
|
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: "LET'S", tone: "bits" },
|
||||||
{ text: "TALK.", tone: "solid" },
|
{ 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",
|
newMessage: "New message",
|
||||||
draft: "draft",
|
draft: "draft",
|
||||||
need: "I need",
|
need: "I need",
|
||||||
@@ -808,42 +822,42 @@ export const en: Content = {
|
|||||||
topics: [
|
topics: [
|
||||||
{
|
{
|
||||||
id: "developer",
|
id: "developer",
|
||||||
label: "A developer",
|
label: "Hire a developer",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "A developer for our product",
|
subject: "Senior 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}`,
|
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",
|
id: "rescue",
|
||||||
label: "A reliable app",
|
label: "Stabilize an app",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "Our app needs to become reliable",
|
subject: "Web app stabilization & code audit",
|
||||||
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}`,
|
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",
|
id: "automation",
|
||||||
label: "Automation",
|
label: "Process automation",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "We want to automate a process",
|
subject: "Process automation inquiry",
|
||||||
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}`,
|
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",
|
id: "website",
|
||||||
label: "A website",
|
label: "Company website",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "A website for my business",
|
subject: "New company website project",
|
||||||
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}`,
|
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",
|
id: "other",
|
||||||
label: "Something else",
|
label: "General inquiry",
|
||||||
draft: {
|
draft: {
|
||||||
subject: "A question",
|
subject: "Project inquiry",
|
||||||
body: `Hi Marc,\n\n[what you have in mind]\n\n${SIGN_OFF}`,
|
body: `Hi Marc,\n\n[your message]\n\n${SIGN_OFF}`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user