feat(i18n): angielskie tłumaczenia treści + tytuł i opis per język

Krok 2 z dwóch: podmiana wartości w en.ts — struktura kluczy bez zmian,
więc diff jest czysto tekstowy.

App.tsx ustawia teraz document.title i meta description z t.meta obok
atrybutu lang, bo index.html ma je zaszyte po polsku.

Jedna uwaga do treści: dopisek "(nazwa robocza — do potwierdzenia przed
publikacją)" nie miał wersji angielskiej w materiale źródłowym, a polski
tekst na stronie EN wyglądałby na błąd. Wpisałem "(working name — to be
confirmed before launch)" — do poprawy, jeśli ma brzmieć inaczej.

Weryfikacja lokalna przed deployem: /, /privacy i /platforma renderują tekst
identyczny z produkcją; /en, /en/privacy i /en/platforma nie zawierają ani
jednego polskiego znaku diakrytycznego.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
oskar 2026-07-31 16:49:44 +02:00
parent 605bc3d025
commit da79e359fc
2 changed files with 122 additions and 117 deletions

View file

@ -10,7 +10,7 @@ import CTASection from './components/CTASection';
import Footer from './components/Footer'; import Footer from './components/Footer';
import PrivacyPolicyPage from './components/PrivacyPolicyPage'; import PrivacyPolicyPage from './components/PrivacyPolicyPage';
import PlatformPage from './components/PlatformPage'; import PlatformPage from './components/PlatformPage';
import { useLang, stripLangPrefix } from './i18n'; import { useLang, useT, stripLangPrefix } from './i18n';
import { usePathname } from './router'; import { usePathname } from './router';
function App() { function App() {
@ -18,15 +18,21 @@ function App() {
// of leaving a stale page under a changed URL. // of leaving a stale page under a changed URL.
const pathname = usePathname(); const pathname = usePathname();
const lang = useLang(); const lang = useLang();
const t = useT();
// One route table for both languages: /en/privacy and /privacy both match // One route table for both languages: /en/privacy and /privacy both match
// '/privacy' here. // '/privacy' here.
const route = stripLangPrefix(pathname); const route = stripLangPrefix(pathname);
// index.html ships lang="pl"; keep the document honest on the English routes // index.html ships the Polish lang/title/description; keep the document
// (screen readers, translation prompts, search engines all read this). // honest on the English routes (screen readers, translation prompts, the
// browser tab, search engines all read these).
useEffect(() => { useEffect(() => {
document.documentElement.lang = lang; document.documentElement.lang = lang;
}, [lang]); document.title = t.meta.title;
document
.querySelector('meta[name="description"]')
?.setAttribute('content', t.meta.description);
}, [lang, t]);
// The landing sections are client-rendered, so when a /#section URL arrives // The landing sections are client-rendered, so when a /#section URL arrives
// with the initial request — following "Oferta"/"Kontakt" from /privacy or // with the initial request — following "Oferta"/"Kontakt" from /privacy or

View file

@ -1,121 +1,117 @@
import type { Bullet, Rich } from './types'; import type { Bullet, Rich } from './types';
import type { pl } from './pl'; import type { pl } from './pl';
// Step 1 of the i18n rollout: the keys are in place, the values are still the
// Polish source text. Translating them is the next commit — this file's diff is
// then purely textual and reviewable sentence by sentence.
export const en: typeof pl = { export const en: typeof pl = {
nav: { nav: {
offerings: 'Oferta', offerings: 'Services',
platform: 'Platforma', platform: 'Platform',
process: 'Proces', process: 'Process',
contact: 'Kontakt', contact: 'Contact',
cta: 'Porozmawiajmy', cta: 'Let\'s talk',
}, },
common: { common: {
backToHome: '← Back to homepage', backToHome: '← Back to homepage',
}, },
hero: { hero: {
// Split so the accent span can wrap a different phrase per language. // Split so the accent span can wrap a different phrase per language.
titleBefore: 'Budujemy ', titleBefore: 'We build the human ',
titleAccent: 'ludzką stronę', titleAccent: 'side',
titleAfter: ' AI', titleAfter: ' of AI',
subtitle: subtitle:
'Projektujemy i wdrażamy systemy AI, które pomagają ludziom pracować szybciej, mądrzej i spokojniej — od automatyzacji po multiagentowe platformy produktowe.', 'We design and deploy AI systems that help people work faster, smarter, and with more peace of mind — from automation to multi-agent product platforms.',
ctaPrimary: 'Zacznijmy od audytu AI', ctaPrimary: 'Start with an AI audit',
ctaSecondary: 'Zobacz ofertę', ctaSecondary: 'See our services',
}, },
about: { about: {
title: 'Czym jest humanAI?', title: 'What is humanAI?',
lead: 'humanAI łączy doradztwo, automatyzację, budowę produktów i własne środowisko agentowe. Pomagamy przejść od ciekawości wokół AI do działających procesów, narzędzi i systemów.', lead: 'humanAI combines advisory, automation, product development, and our own agentic environment. We help you move from curiosity about AI to working processes, tools, and systems.',
points: [ points: [
'Strategia bez hypeu', 'Strategy without the hype',
'Automatyzacje, które da się utrzymać', 'Automation you can actually maintain',
'Agenci pod kontrolą człowieka', 'Agents under human control',
], ],
}, },
offerings: { offerings: {
title: 'Nasza Oferta', title: 'Our Services',
lead: 'Budujemy kompleksowe rozwiązania, które przekładają potencjał sztucznej inteligencji na realne wyniki biznesowe.', lead: 'We build end-to-end solutions that turn the potential of artificial intelligence into real business outcomes.',
// Service names stay identical across languages, but are kept as per-language // Service names stay identical across languages, but are kept as per-language
// keys so they can diverge later without a refactor. // keys so they can diverge later without a refactor.
items: { items: {
strategy: { strategy: {
title: 'AI Strategy & Advisory', title: 'AI Strategy & Advisory',
description: description:
'Pomagamy znaleźć realne zastosowania AI w firmie, wybrać priorytety i zaplanować wdrożenia bez przepalania czasu na przypadkowe eksperymenty.', 'We help you find real applications for AI in your business, choose priorities, and plan deployments without burning time on random experiments.',
points: ['audyt procesów', 'mapa use caseów', 'priorytetyzacja wdrożeń', 'polityki bezpieczeństwa AI'], points: ['process audit', 'use-case mapping', 'deployment prioritisation', 'AI safety policies'],
}, },
automation: { automation: {
title: 'AI Automation & Workflows', title: 'AI Automation & Workflows',
description: description:
'Budujemy automatyzacje, które łączą modele AI z codziennymi narzędziami: dokumentami, mailem, CRM, bazami danych, API i wewnętrznymi procesami.', 'We build automations that connect AI models with everyday tools: documents, email, CRM, databases, APIs, and internal processes.',
points: ['automatyzacje operacyjne', 'integracje API', 'workflow z człowiekiem w pętli', 'monitoring i logi'], points: ['operational automation', 'API integrations', 'human-in-the-loop workflows', 'monitoring and logs'],
}, },
products: { products: {
title: 'AI Products & Interfaces', title: 'AI Products & Interfaces',
description: description:
'Projektujemy i tworzymy aplikacje, panele, chatboty, copilots i wyszukiwarki semantyczne, które przekładają AI na użyteczne doświadczenie użytkownika.', 'We design and build applications, dashboards, chatbots, copilots, and semantic search tools that turn AI into a genuinely useful user experience.',
points: ['aplikacje webowe', 'panele AI', 'chatboty i copilots', 'RAG / wyszukiwanie w wiedzy'], points: ['web applications', 'AI dashboards', 'chatbots and copilots', 'RAG / knowledge search'],
}, },
multiagent: { multiagent: {
title: 'Multiagent Systems & Infrastructure', title: 'Multiagent Systems & Infrastructure',
description: description:
'Tworzymy systemy wieloagentowe, które potrafią planować, wykonywać zadania, korzystać z narzędzi i współpracować z człowiekiem przy zachowaniu kontroli i audytowalności.', 'We build multi-agent systems that can plan, execute tasks, use tools, and collaborate with humans while keeping control and auditability intact.',
points: ['agent orchestration', 'tool registry / MCP', 'approval gates', 'pamięć, logi i obserwowalność'], points: ['agent orchestration', 'tool registry / MCP', 'approval gates', 'memory, logs & observability'],
linkLabel: 'Zobacz jak to działa', linkLabel: 'See how it works',
}, },
}, },
}, },
why: { why: {
title: 'AI nie powinno być czarną skrzynką', title: 'AI shouldn\'t be a black box',
lead: 'Najlepsze wdrożenia AI są zrozumiałe, mierzalne i bezpieczne. Dlatego projektujemy systemy, które pokazują swoje działanie, zostawiają ślad decyzyjny i pozwalają człowiekowi zatwierdzać ważne kroki.', lead: 'The best AI deployments are understandable, measurable, and safe. That\'s why we design systems that show their work, leave a decision trail, and let humans approve the steps that matter.',
items: { items: {
hitl: 'Human-in-the-loop', hitl: 'Human-in-the-loop',
security: 'Bezpieczeństwo od początku', security: 'Security from day one',
integration: 'Integracja z istniejącymi narzędziami', integration: 'Integrates with what you already use',
impact: 'Mierzalny efekt biznesowy', impact: 'Measurable business impact',
}, },
}, },
process: { process: {
title: 'Od pomysłu do działającego systemu', title: 'From idea to working system',
stepLabel: 'Krok', stepLabel: 'Step',
steps: { steps: {
diagnosis: 'Diagnoza', diagnosis: 'Diagnosis',
design: 'Projekt rozwiązania', design: 'Solution design',
prototype: 'Prototyp', prototype: 'Prototype',
deployment: 'Wdrożenie', deployment: 'Deployment',
maintenance: 'Utrzymanie i rozwój', maintenance: 'Maintenance & growth',
}, },
}, },
audience: { audience: {
title: 'Dla kogo', title: 'Who we work with',
items: [ items: [
'founderzy i małe zespoły', 'founders and small teams',
'firmy usługowe', 'service businesses',
'działy operacyjne', 'operations teams',
'zespoły produktowe', 'product teams',
'software housey i integratorzy', 'software houses and integrators',
], ],
}, },
cta: { cta: {
title: 'Masz proces, który powinien już pracować sam?', title: 'Got a process that should already run itself?',
lead: 'Opowiedz, co robisz ręcznie, powtarzalnie albo zbyt wolno. Sprawdzimy, czy AI może to uprościć.', lead: 'Tell us what you\'re doing manually, repetitively, or too slowly. We\'ll see if AI can make it simpler.',
quote: '"Na start wystarczy jeden proces, jeden problem albo jeden pomysł."', quote: '"One process, one problem, or one idea is enough to start."',
}, },
footer: { footer: {
tagline: 'ludzka strona AI — budujemy praktyczne systemy AI dla ludzi i organizacji.', tagline: 'the human side of AI — we build practical AI systems for people and organisations.',
navHeading: 'Nawigacja', navHeading: 'Navigation',
privacyHeading: 'Prywatność', privacyHeading: 'Privacy',
privacyPolicy: 'Polityka prywatności', privacyPolicy: 'Privacy Policy',
cookies: 'Cookies', cookies: 'Cookies',
rights: 'Wszelkie prawa zastrzeżone.', rights: 'All rights reserved.',
}, },
meta: { meta: {
title: 'humanAI — ludzka strona AI', title: 'humanAI — the human side of AI',
description: description:
'Strategia, automatyzacje, produkty AI i systemy multiagentowe projektowane z człowiekiem w centrum.', 'Strategy, automation, AI products, and multi-agent systems designed with humans at the center.',
}, },
contact: { contact: {
labelName: 'Name', labelName: 'Name',
@ -171,136 +167,139 @@ export const en: typeof pl = {
], ],
}, },
platform: { platform: {
title: 'Nadzór nad systemami agentowymi', title: 'Overseeing agentic systems',
workingName: '(nazwa robocza — do potwierdzenia przed publikacją)', workingName: '(working name — to be confirmed before launch)',
watchers: { watchers: {
title: 'Kto pilnuje agentów, którzy pilnują wszystkiego innego?', title: 'Who watches the agents that watch everything else?',
paragraphs: [ paragraphs: [
[ [
{ {
t: 'Automatyzacje i agenci AI potrafią pracować bez człowieka — porządkować dokumenty, sterować urządzeniami, reagować na zdarzenia. Ale zostawione bez nadzoru, prędzej czy później zrobią coś, czego nikt nie chciał. Zbudowaliśmy system, który ', t: 'Automations and AI agents can work without a human — organising documents, controlling devices, reacting to events. But left unsupervised, sooner or later they\'ll do something nobody wanted. ',
}, },
{ t: 'obserwuje inne systemy — w tym inne systemy agentowe', em: 'strong' },
{ {
t: ' — wykrywa, że coś nie działa, diagnozuje przyczynę i naprawia problem sam. A tam, gdzie decyzja jest nieodwracalna, czeka na człowieka.', t: 'We built a system that observes other systems — including other agentic systems',
em: 'strong',
},
{
t: ' — it detects when something isn\'t working, diagnoses the cause, and fixes the problem itself. And wherever a decision is irreversible, it waits for a human.',
}, },
], ],
'To nie koncept. Ten sam rdzeń od miesięcy prowadzi naszą własną, rozproszoną infrastrukturę — i przeszedł przez realne awarie, z których każda coś go nauczyła.', 'This isn\'t a concept. The same core has been running our own distributed infrastructure for months — and has been through real incidents, each of which made it smarter.',
] as Rich[], ] as Rich[],
}, },
problem: { problem: {
title: 'Problem, który znika', title: 'The problem that disappears',
bullets: [ bullets: [
{ {
lead: 'Autonomia bez ram to ryzyko.', lead: 'Autonomy without boundaries is a risk.',
body: ' Coś, co może samo otworzyć bramę albo zmienić konfigurację usługi, potrzebuje jasnej granicy: co wolno zrobić samodzielnie, co wymaga zgody człowieka.', body: ' Anything that can open a gate or change a service\'s configuration on its own needs a clear line: what it can do by itself, and what needs a human\'s go-ahead.',
}, },
{ {
lead: 'Automatyka to nie inteligencja.', lead: 'Automation isn\'t intelligence.',
body: [ body: [
{ t: ' Wiele domów i firm ma już systemy, które ' }, { t: ' Many homes and businesses already have systems that ' },
{ t: 'wykonują', em: 'em' }, { t: 'execute', em: 'em' },
{ t: ' polecenia — światła, rolety, bramy, obieg dokumentów. Problem w tym, że nic tego nie ' }, { t: ' commands — lights, blinds, gates, document flows. The problem is that none of it ' },
{ t: 'rozumie', em: 'em' }, { t: 'understands', em: 'em' },
{ t: ': nie kojarzy faktów, nie reaguje na kontekst, nie uczy się.' }, { t: ': it doesn\'t connect facts, react to context, or learn.' },
], ],
}, },
{ {
lead: 'Wiedza znika.', lead: 'Knowledge disappears.',
body: ' Dlaczego coś się zepsuło miesiąc temu i co wtedy pomogło? Zwykle ta wiedza siedzi w głowie jednej osoby albo w nieprzeszukiwalnym stosie dokumentów.', body: ' Why did something break a month ago, and what fixed it? That knowledge usually lives in one person\'s head, or in an unsearchable pile of documents.',
}, },
] as Bullet[], ] as Bullet[],
}, },
howItWorks: { howItWorks: {
title: 'Jak to działa', title: 'How it works',
core: [ core: [
{ t: 'Rdzeń nadzoru — jeden, wspólny dla wszystkiego.', em: 'strong' }, { t: 'The supervisory core — one, shared by everything.', em: 'strong' },
{ {
t: ' Lekki agent na każdej maszynie zgłasza stan usług. Centralny „mózg" buduje z tego pełny obraz sytuacji, wykrywa odchylenia od tego, co powinno działać, i albo naprawia problem sam — jeśli akcja jest bezpieczna — albo pyta człowieka, jeśli nie jest.', t: ' A lightweight agent on every machine reports the state of its services. A central "brain" builds a full picture from that, detects deviations from what should be running, and either fixes the problem itself — if the action is safe — or asks a human if it isn\'t.',
}, },
] as Rich, ] as Rich,
humanAsk: [ humanAsk: [
{ {
t: 'To „pytanie człowieka" nie jest teorią. Przykład z życia: system zauważa, że wyjechałeś na weekend, a rolety zostały otwarte. Sam ich nie zamknie — wysyła Ci wiadomość: ', t: 'That "asking a human" part isn\'t theoretical. A real example: the system notices you\'ve left for the weekend and the blinds are still open. It won\'t close them on its own — it sends you a message: ',
}, },
{ t: '„Nie zamknąłeś rolet. Zamknąć teraz?"', em: 'quote' }, { t: '"You left the blinds open. Close them now?"', em: 'quote' },
{ {
t: ' Odpisujesz „tak" — i dopiero wtedy system zleca to istniejącej automatyce domowej. Decyzja zawsze należy do Ciebie; wykonanie bierze na siebie system.', t: ' You reply "yes" — and only then does the system hand that off to your existing home automation. The decision is always yours; the system handles the execution.',
}, },
] as Rich, ] as Rich,
tailored: [ tailored: [
{ t: 'System roboczy — budowany pod Ciebie.', em: 'strong' }, { t: 'The working system — built around you.', em: 'strong' },
{ t: ' To, co ten nadzór pilnuje, dopasowujemy do konkretnej potrzeby.' }, { t: ' What this supervision watches over is tailored to what you actually need.' },
] as Rich, ] as Rich,
home: { home: {
title: 'Dla domu', title: 'For your home',
body: [ body: [
{ {
t: 'Masz już zautomatyzowany dom — światła, rolety, bramy, klimatyzację — ale to automatyka, nie inteligencja: robi dokładnie to, co jej każesz, i nic więcej. Dokładamy warstwę, która ', t: 'You already have an automated home — lights, blinds, gates, climate control — but that\'s automation, not intelligence: it does exactly what you tell it, and nothing more. We add a layer that ',
}, },
{ t: 'rozumie kontekst', em: 'strong' }, { t: 'understands context', em: 'strong' },
{ {
t: ': rozpoznaje Twój samochód po tablicy rejestracyjnej i otwiera bramę, zanim dojedziesz do niej. Widzi na kamerach, że nikogo nie ma w domu, i sama wygasza światła na noc. Zauważa, że wyjechałeś, a coś zostało otwarte — i pyta, zanim cokolwiek zrobi.', t: ': it recognises your car by its license plate and opens the gate before you get there. It sees on your cameras that no one\'s home and dims the lights for the night on its own. It notices you\'ve left and something was left open — and asks before it does anything.',
}, },
] as Rich, ] as Rich,
}, },
business: { business: {
title: 'Dla firm', title: 'For your business',
body: 'Masz bałagan w dokumentach, obieg papierowy, który nikogo nie satysfakcjonuje, i dane rozsiane po cudzych chmurach, nad którymi nie masz pełnej kontroli. Budujemy Ci paperless na Twoich własnych serwerach — z własną domeną i autoryzacją, bez uzależnienia od zewnętrznych dostawców chmury. Indeksujemy dokumenty, zdjęcia i korespondencję tak, żeby dało się to przeszukać po sensie, nie po słowach kluczowych. Interfejs — webowy panel, a jeśli to naprawdę pasuje do Twojej firmy, także chatbot — dobieramy do tego, czego faktycznie potrzebujesz, a nie do tego, co akurat modne.' as Rich, body: 'You\'ve got a mess of documents, a paper trail nobody\'s happy with, and data scattered across someone else\'s cloud that you don\'t fully control. We build you a paperless system on your own servers — with your own domain and authentication, with no dependency on external cloud providers. We index documents, photos, and correspondence so they can be searched by meaning, not just keywords. The interface — a web dashboard always, and a chatbot too if it genuinely fits your business — is matched to what you actually need, not to whatever\'s trendy.' as Rich,
}, },
shared: shared:
'Obie ścieżki łączy to samo: cała konfiguracja tego, co ma działać, jest zapisana jako kod w repozytorium — każda zmiana ma historię i da się ją cofnąć — i obie działają pod tym samym nadzorem, który pilnuje, żeby nic nie zawiodło po cichu.' as Rich, 'Both paths share the same foundation: everything that\'s supposed to run is defined as code in a repository — every change has a history and can be rolled back — and both run under the same supervision that makes sure nothing fails silently.' as Rich,
}, },
underTheHood: { underTheHood: {
title: 'Pod maską — dla ciekawych', title: 'Under the hood — for the curious',
bullets: [ bullets: [
{ {
body: [ body: [
{ t: 'Baza wiedzy nie kończy jako martwy indeks. Nad wyszukiwaniem semantycznym powstaje ' }, { t: 'A knowledge base shouldn\'t end up as a dead vector index. On top of semantic search, we build a ' },
{ t: 'czytelna, kompilowana wiki utrzymywana przez model językowy', em: 'strong' }, { t: 'readable, compiled wiki maintained by a language model', em: 'strong' },
{ {
t: ' — pliki tekstowe z linkami między pojęciami, które agent czyta i aktualizuje tak jak człowiek utrzymuje kod. Budujemy to na otwartym standardzie (Google OKF), nie na własnym, zamkniętym formacie — żeby wiedza, którą zbudujemy, zawsze zostawała czytelna i przenośna.', t: ' — plain text files with cross-links between concepts, which the agent reads and updates the way a person maintains code. We build this on an open standard (Google OKF), not a closed format of our own — so the knowledge stays readable and portable.',
}, },
], ],
}, },
{ {
body: 'Do zapytań najpierw sięga tańszy model — droższy dopiero wtedy, gdy sprawa naprawdę tego wymaga. W praktyce: streszczenie całego korpusu dokumentów potrafiło kosztować grosze zamiast dni obliczeń.', body: 'Queries first reach a cheaper model — a more expensive one only steps in when the task genuinely calls for it. In practice: summarising an entire document corpus once cost pennies instead of days of compute.',
}, },
{ {
body: 'Nie wszystko musi być online 24 godziny na dobę. Kiedy główna maszyna śpi, zapytania automatycznie przejmuje zapasowy sprzęt — bez przerwy zauważalnej dla użytkownika.', body: 'Not everything needs to be online 24 hours a day. When the primary machine is asleep, queries automatically fail over to backup hardware — with no interruption the user would notice.',
}, },
{ {
body: 'System sam odróżnia „usługa nie działa" od „usługa śpi zgodnie z planem" — co wcześniej było częstym źródłem fałszywych alarmów.', body: 'The system tells the difference between "this service is down" and "this service is asleep as planned" — previously a common source of false alarms.',
}, },
] as Bullet[], ] as Bullet[],
}, },
why: { why: {
title: 'Dlaczego to, a nie zwykły monitoring czy zwykła automatyka', title: 'Why this, not ordinary monitoring or ordinary automation',
bullets: [ bullets: [
{ lead: 'Rozumiemy kontekst, nie tylko wykonujemy polecenia.' }, { lead: 'We understand context, not just execute commands.' },
{ lead: 'Naprawiamy, nie tylko alarmujemy.' }, { lead: 'We fix things, not just raise alarms.' },
{ {
lead: 'Człowiek naprawdę jest w pętli', lead: 'A human is genuinely in the loop',
body: ' — decyzje zawsze do Ciebie, wykonanie bierze na siebie system.', body: ' — decisions are always yours, execution is the system\'s job.',
}, },
{ lead: 'Zero czarnej skrzynki.', body: ' Każda decyzja zostawia ślad, który można później przejrzeć.' }, { lead: 'Zero black box.', body: ' Every decision leaves a trail you can review later.' },
{ {
lead: 'Twoje dane zostają Twoje', lead: 'Your data stays yours',
body: ' — własny serwer, własna domena, bez uzależnienia od cudzej chmury.', body: ' — your own server, your own domain, no dependency on someone else\'s cloud.',
}, },
] as Bullet[], ] as Bullet[],
}, },
status: { status: {
title: 'Uczciwie o tym, gdzie jesteśmy', title: 'Honestly, where we are',
paragraphs: [ paragraphs: [
'Rdzeń nadzoru prowadzi naszą infrastrukturę na co dzień — samonaprawa działa od początku do końca, alerty trafiają na telefon, baza wiedzy odpowiada na pytania nawet gdy główny sprzęt śpi.', 'The supervisory core runs our infrastructure every day — self-healing works end to end, alerts reach a phone, the knowledge base answers questions even when the primary hardware is asleep.',
'Dedykowane wdrożenia — pod konkretny dom czy firmę — budujemy w miarę potrzeb, opierając się na tym samym, sprawdzonym rdzeniu. Wolimy powiedzieć wprost, co jeszcze dopracowujemy, niż obiecywać więcej niż działa.', 'Dedicated deployments — for a specific home or business — we build as needed, on top of the same proven core. We\'d rather say plainly what we\'re still working on than promise more than what actually works.',
] as Rich[], ] as Rich[],
}, },
cta: { cta: {
title: 'Umów rozmowę', title: 'Let\'s talk',
body: 'Powiedz, co chcesz zautomatyzować albo uporządkować — zobaczymy, jak to zbudować i objąć nadzorem, który sami na sobie testujemy.' as Rich, body: 'Tell us what you want to automate or organise — we\'ll figure out how to build it, and put it under the same supervision we run on ourselves.' as Rich,
button: 'Porozmawiajmy', button: 'Let\'s talk',
}, },
}, },
}; };