diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index fe09107..e1aab3c 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -5,6 +5,7 @@ import { Hero } from "@/components/hero/hero"; import { ProjectGrid } from "@/components/project/project-grid"; import { ProjectPreviewModal } from "@/components/project/project-preview-modal"; import { UpstreamFixModal } from "@/components/upstream/upstream-fix-modal"; +import { UpstreamProofBand } from "@/components/home/upstream-proof-band"; import { OrganizationJsonLd } from "@/components/seo/json-ld"; import type { Locale } from "@/i18n/locales"; import { buildLocaleAlternates, canonicalFor, METADATA_BASE } from "@/lib/seo/alternates"; @@ -39,6 +40,7 @@ export default async function HomePage({ <> + diff --git a/app/[locale]/process/page.tsx b/app/[locale]/process/page.tsx index 7f313bd..a451f6d 100644 --- a/app/[locale]/process/page.tsx +++ b/app/[locale]/process/page.tsx @@ -5,6 +5,7 @@ import { getTranslations, setRequestLocale } from "next-intl/server"; import { Link } from "@/i18n/navigation"; import type { Locale } from "@/i18n/locales"; import { buildLocaleAlternates, canonicalFor, METADATA_BASE } from "@/lib/seo/alternates"; +import { BookACall } from "@/components/cta/book-a-call"; export async function generateMetadata({ params, @@ -125,13 +126,16 @@ function CtaBlock() { return (
- - {t("primary")} - - +
+ + {t("primary")} + + + +

{t.rich("sub", { link: (chunks) => ( diff --git a/components/contact/contact-section.tsx b/components/contact/contact-section.tsx index 9314e2b..fcec55f 100644 --- a/components/contact/contact-section.tsx +++ b/components/contact/contact-section.tsx @@ -2,6 +2,7 @@ import { useTranslations } from "next-intl"; import { ContactForm } from "./contact-form"; +import { BookACall } from "@/components/cta/book-a-call"; export function ContactSection() { const t = useTranslations("home.contactSection"); @@ -26,6 +27,9 @@ export function ContactSection() {

{t("sub")}

+
+ +
diff --git a/components/cta/book-a-call.tsx b/components/cta/book-a-call.tsx new file mode 100644 index 0000000..20cdbc6 --- /dev/null +++ b/components/cta/book-a-call.tsx @@ -0,0 +1,42 @@ +import { ArrowUpRight } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { cn } from "@/lib/cn"; + +/** + * Zero-friction "Book a call" CTA — links straight to the self-hosted + * Cal.com discovery event, bypassing the 5-step contact form. + * + * Renders only when `NEXT_PUBLIC_CAL_URL` is set. That var is baked into + * the client bundle at build time on the VPS (`.github/workflows/deploy.yml`) + * and is intentionally absent in local dev — so this no-ops locally and + * appears only in production, exactly like the contact-form success CTA. + */ +export function BookACall({ + variant = "solid", + className, +}: { + variant?: "solid" | "ghost"; + className?: string; +}) { + const t = useTranslations("common.actions"); + const calUrl = process.env.NEXT_PUBLIC_CAL_URL; + if (!calUrl) return null; + + return ( + + {t("bookCall")} + + + ); +} diff --git a/components/home/upstream-proof-band.tsx b/components/home/upstream-proof-band.tsx new file mode 100644 index 0000000..9dccff6 --- /dev/null +++ b/components/home/upstream-proof-band.tsx @@ -0,0 +1,98 @@ +import { getTranslations } from "next-intl/server"; +import { ArrowRight } from "lucide-react"; +import { Link } from "@/i18n/navigation"; +import { aggregates, findRepo, type UpstreamRepo } from "@/lib/upstream"; +import { BrandIcon } from "@/components/upstream/brand-icon"; + +/** + * Home trust band — promotes the /upstream OSS proof (merged PRs into the + * tools people's stacks actually run on) to the home page as a named, + * quantified credibility signal. Counts are data-driven off + * `aggregates()` so they never drift from the enriched snapshot. + * + * MARQUEE labels are brand display names — never translated (brand names + * stay verbatim per the i18n rules). Each slug maps to a repo in + * content/upstream.json; a slug with no match is skipped gracefully. + */ +const MARQUEE: { slug: string; label: string }[] = [ + { slug: "nodejs-undici", label: "Node.js" }, + { slug: "mozilla-pdf-js", label: "Mozilla" }, + { slug: "mongodb-js-bson", label: "MongoDB" }, + { slug: "redis-node-redis", label: "Redis" }, + { slug: "puppeteer-puppeteer", label: "Puppeteer" }, + { slug: "remix-run-react-router", label: "React Router" }, + { slug: "graphql-graphql-js", label: "GraphQL" }, + { slug: "eslint-eslint", label: "ESLint" }, + { slug: "solidjs-solid", label: "Solid" }, + { slug: "statelyai-xstate", label: "XState" }, + { slug: "mantinedev-mantine", label: "Mantine" }, + { slug: "vitest-dev-eslint-plugin-vitest", label: "Vitest" }, +]; + +export async function UpstreamProofBand({ locale }: { locale: string }) { + const t = await getTranslations({ locale, namespace: "home.upstream" }); + const agg = aggregates(); + + const brands = MARQUEE.map((m) => { + const repo = findRepo(m.slug); + return repo ? { ...m, repo } : null; + }).filter( + (b): b is { slug: string; label: string; repo: UpstreamRepo } => b !== null, + ); + + return ( +
+
+
+

+ {t("eyebrow")} +

+

+ {t("heading")} +

+

+ {t("sub", { prs: agg.totalPrs, repos: agg.totalRepos })} +

+ +
    + {brands.map(({ slug, label, repo }) => ( +
  • + + + {label} + +
  • + ))} +
+ +
+ + {t("cta")} + + +
+
+
+ ); +} diff --git a/components/nav/footer.tsx b/components/nav/footer.tsx index 8357377..4cc8a52 100644 --- a/components/nav/footer.tsx +++ b/components/nav/footer.tsx @@ -1,6 +1,18 @@ +import { siGithub } from "simple-icons"; +import type { SimpleIcon } from "simple-icons"; import { useTranslations } from "next-intl"; import { Link } from "@/i18n/navigation"; +/** + * Public social profiles — kept in sync with the JSON-LD `sameAs` array in + * `components/seo/json-ld.tsx`. GitHub is live today; LinkedIn / X land here + * (and in `sameAs`) once those handles are confirmed. Brand marks come from + * `simple-icons` (lucide-react v1 dropped brand icons). + */ +const SOCIALS: { href: string; label: string; icon: SimpleIcon }[] = [ + { href: "https://github.com/spokodev", label: "GitHub", icon: siGithub }, +]; + export function Footer() { const t = useTranslations("common.footer"); const nav = useTranslations("common.nav"); @@ -14,6 +26,27 @@ export function Footer() {

{t("tagline")}

+ {SOCIALS.map(({ href, label, icon }) => ( + + + + + + ))} - 04 + {String(items.length + 1).padStart(2, "0")} {t("contact")} diff --git a/components/seo/json-ld.tsx b/components/seo/json-ld.tsx index 107b46f..1ec4aec 100644 --- a/components/seo/json-ld.tsx +++ b/components/seo/json-ld.tsx @@ -67,8 +67,11 @@ export function OrganizationJsonLd() { "@id": `${SITE_URL}/#founder`, name: "Yaroslav", jobTitle: "Founder & Principal Engineer", + description: + "Principal engineer with fourteen years across the stack — sysadmin, QA, product, and engineering — leading Spoko Studio.", url: `${SITE_URL}/about`, knowsAbout: EXPERTISE, + sameAs: ["https://github.com/spokodev"], }, sameAs: ["https://github.com/spokodev"], address: { diff --git a/messages/de/about.json b/messages/de/about.json index c57c694..3f5b786 100644 --- a/messages/de/about.json +++ b/messages/de/about.json @@ -20,9 +20,9 @@ }, "whatWeDo": { "eyebrow": "Wie wir aufgestellt sind", - "heading": "Ein Ingenieur im Kern. Ein Netzwerk drum herum.", - "p1": "Im Herzen von Spoko Studio steht ein Ingenieur mit vierzehn Jahren Erfahrung, der persönlich in jedes Projekt investiert ist, das wir ausliefern. Für größere Vorhaben arbeiten wir mit einem bewährten Netzwerk von Spezialisten zusammen, mit denen wir seit Jahren echte Produkte gebaut haben.", - "p2": "Wir wählen Arbeit, in der wir monatelang wirklich aufgehen wollen. Wir launchen in Wochen, nicht in Quartalen. Und wir bleiben in den Jahren danach — dieselbe Codebasis, weiterhin im Wachstum. Die Projekte auf dieser Seite beantworten «Was machen Sie eigentlich?» besser als jede Biografie." + "p2": "Wir wählen Arbeit, in der wir monatelang wirklich aufgehen wollen. Wir launchen in Wochen, nicht in Quartalen. Und wir bleiben in den Jahren danach — dieselbe Codebasis, weiterhin im Wachstum. Die Projekte auf dieser Seite beantworten «Was machen Sie eigentlich?» besser als jede Biografie.", + "heading": "Im Kern ein Ingenieur. Um ihn herum ein Team.", + "p1": "Spoko Studio wird von Yaroslav geleitet – einem leitenden Ingenieur mit vierzehn Jahren Erfahrung in allen Bereichen, von Systemadministration und Qualitätssicherung bis hin zu Produktentwicklung und Technik. Er engagiert sich persönlich für jedes Projekt, das wir auf den Markt bringen. Um ihn herum arbeitet ein kleines, eingespieltes Team aus Ingenieuren und Spezialisten, mit denen wir seit Jahren echte Produkte entwickeln." }, "process": { "eyebrow": "Wie wir arbeiten", diff --git a/messages/de/common.json b/messages/de/common.json index 72f124e..6aa70a2 100644 --- a/messages/de/common.json +++ b/messages/de/common.json @@ -14,7 +14,8 @@ }, "primaryNav": "Hauptnavigation", "openMenu": "Menü öffnen", - "closeMenu": "Menü schließen" + "closeMenu": "Menü schließen", + "process": "Prozess" }, "footer": { "tagline": "Mit Sorgfalt gebaut – von Menschen, für Menschen.", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Gelauncht in", "velocityLiveLabel": "Seit … live", "breadcrumbHome": "Startseite", - "breadcrumbWork": "Projekte" + "breadcrumbWork": "Projekte", + "bookCall": "Buchen Sie ein 30-minütiges Telefonat" } } diff --git a/messages/de/home.json b/messages/de/home.json index 8956007..1cbce78 100644 --- a/messages/de/home.json +++ b/messages/de/home.json @@ -6,9 +6,9 @@ "hero": { "h1Line1": "Sie sehen die Idee.", "h1Line2": "Wir sehen den Weg dorthin.", - "sub": "Spoko Studio ist ein Engineer plus ein erweitertes Netzwerk, das die Dinge, von denen Sie geträumt haben — die Sie aber noch nicht umsetzen konnten — in fertige Produkte verwandelt, die im Betrieb zuverlässig laufen.", "ctaPrimary": "Unsere Projekte entdecken", - "ctaSecondary": "Oder sprechen wir" + "ctaSecondary": "Oder sprechen wir", + "sub": "Spoko Studio ist ein kleines Team von Entwicklern, das Ihre Träume – die Sie bisher noch nicht verwirklichen konnten – in marktreife Produkte verwandelt, die im Produktivbetrieb zuverlässig funktionieren." }, "scrollCue": "Scrollen", "selectedWork": { @@ -19,5 +19,11 @@ "eyebrow": "Kontakt", "heading": "Eine Idee, die sich noch nicht ganz in Worte fassen lässt?", "sub": "Genau dann sind wir hilfreich. Sagen Sie uns, was Sie sehen — wir helfen, den Weg zu finden." + }, + "upstream": { + "eyebrow": "Open Source", + "heading": "Wir kümmern uns um die Tools, auf denen Ihr Stack läuft.", + "sub": "{prs} zusammengeführte Pull-Anfragen in {repos} Open-Source-Projekten – Node.js, MongoDB, Redis, Mozilla und weiteren. Keine Demos: echte Fehler, die reproduziert, behoben und in den Upstream integriert wurden.", + "cta": "Entdecken Sie die vorgelagerten Arbeiten" } } diff --git a/messages/en/about.json b/messages/en/about.json index 939eced..93af94a 100644 --- a/messages/en/about.json +++ b/messages/en/about.json @@ -20,8 +20,8 @@ }, "whatWeDo": { "eyebrow": "How we're built", - "heading": "An engineer at the heart. A network around them.", - "p1": "At the heart of Spoko Studio is an engineer with fourteen years of craft, personally invested in every project we ship. For larger scopes, we collaborate with a trusted network of specialists we've built real products with for years.", + "heading": "An engineer at the heart. A team around them.", + "p1": "Spoko Studio is led by Yaroslav — a principal engineer with fourteen years across the stack, from sysadmin and QA to product and engineering. He's personally invested in every project we ship. Around him works a small, trusted team of engineers and specialists we've built real products with for years.", "p2": "We choose work we want to live inside for months at a time. We launch in weeks, not quarters. And we stay around for the years that follow — same codebase, still evolving year over year. The projects on this site answer \"what do you do?\" better than any biography." }, "process": { diff --git a/messages/en/common.json b/messages/en/common.json index e76807a..aeef525 100644 --- a/messages/en/common.json +++ b/messages/en/common.json @@ -2,6 +2,7 @@ "nav": { "work": "Work", "services": "Services", + "process": "Process", "upstream": "Upstream", "about": "About", "contact": "Contact", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Launched in", "velocityLiveLabel": "Live for", "breadcrumbHome": "Home", - "breadcrumbWork": "Work" + "breadcrumbWork": "Work", + "bookCall": "Book a 30-min call" } } diff --git a/messages/en/home.json b/messages/en/home.json index c543d41..aa9df11 100644 --- a/messages/en/home.json +++ b/messages/en/home.json @@ -6,11 +6,17 @@ "hero": { "h1Line1": "You see the idea.", "h1Line2": "We see the path to it.", - "sub": "Spoko Studio is one engineer plus an extended network that turns the things you've been dreaming about — but couldn't yet build — into launched products that keep working in production.", + "sub": "Spoko Studio is a small team of engineers who turn the things you've been dreaming about — but couldn't yet build — into launched products that keep working in production.", "ctaPrimary": "Explore our work", "ctaSecondary": "Or let's talk" }, "scrollCue": "Scroll", + "upstream": { + "eyebrow": "Open source", + "heading": "We fix the tools your stack runs on.", + "sub": "{prs} merged pull requests across {repos} open-source projects — Node.js, MongoDB, Redis, Mozilla and more. Not demos: real bugs, reproduced, fixed, and merged upstream.", + "cta": "Explore the upstream work" + }, "selectedWork": { "eyebrow": "Selected work", "heading": "Seven projects, launched and live." diff --git a/messages/es/about.json b/messages/es/about.json index 30711f1..1a3ace6 100644 --- a/messages/es/about.json +++ b/messages/es/about.json @@ -20,9 +20,9 @@ }, "whatWeDo": { "eyebrow": "Cómo estamos formados", - "heading": "Un ingeniero en el centro. Una red a su alrededor.", - "p1": "En el corazón de Spoko Studio hay un ingeniero con catorce años de oficio, implicado personalmente en cada proyecto que entregamos. Para alcances mayores, colaboramos con una red de especialistas de confianza con quienes llevamos años construyendo productos reales.", - "p2": "Elegimos trabajos en los que queremos vivir durante meses. Lanzamos en semanas, no en trimestres. Y nos quedamos durante los años que siguen — la misma base de código, evolucionando año tras año. Los proyectos de este sitio responden «¿qué hacéis?» mejor que cualquier biografía." + "p2": "Elegimos trabajos en los que queremos vivir durante meses. Lanzamos en semanas, no en trimestres. Y nos quedamos durante los años que siguen — la misma base de código, evolucionando año tras año. Los proyectos de este sitio responden «¿qué hacéis?» mejor que cualquier biografía.", + "heading": "Un ingeniero en el centro. Un equipo a su alrededor.", + "p1": "Spoko Studio está dirigido por Yaroslav, un ingeniero jefe con catorce años de experiencia en todas las áreas, desde la administración de sistemas y el control de calidad hasta el desarrollo de productos y la ingeniería. Se implica personalmente en cada proyecto que lanzamos. A su alrededor trabaja un pequeño equipo de confianza formado por ingenieros y especialistas con los que llevamos años creando productos reales." }, "process": { "eyebrow": "Cómo trabajamos", diff --git a/messages/es/common.json b/messages/es/common.json index ddeaef2..4383aee 100644 --- a/messages/es/common.json +++ b/messages/es/common.json @@ -14,7 +14,8 @@ }, "primaryNav": "Principal", "openMenu": "Abrir menú", - "closeMenu": "Cerrar menú" + "closeMenu": "Cerrar menú", + "process": "Proceso" }, "footer": { "tagline": "Hecho con cuidado, por personas, para personas.", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Lanzado en", "velocityLiveLabel": "Activo desde hace", "breadcrumbHome": "Inicio", - "breadcrumbWork": "Work" + "breadcrumbWork": "Work", + "bookCall": "Reserva una llamada de 30 minutos" } } diff --git a/messages/es/home.json b/messages/es/home.json index d6e7088..f97f605 100644 --- a/messages/es/home.json +++ b/messages/es/home.json @@ -6,9 +6,9 @@ "hero": { "h1Line1": "Tú ves la idea.", "h1Line2": "Nosotros vemos el camino.", - "sub": "Spoko Studio es un ingeniero más una red ampliada que convierte aquello que llevas tiempo soñando — pero que aún no pudiste construir — en productos lanzados que siguen funcionando en producción.", "ctaPrimary": "Explora nuestro trabajo", - "ctaSecondary": "O hablemos" + "ctaSecondary": "O hablemos", + "sub": "Spoko Studio es un pequeño equipo de ingenieros que convierte aquello con lo que has soñado —pero que aún no has podido crear— en productos lanzados al mercado que siguen funcionando en entorno de producción." }, "scrollCue": "Desplázate", "selectedWork": { @@ -19,5 +19,11 @@ "eyebrow": "Contacto", "heading": "¿Tienes una idea que no terminas de articular?", "sub": "Para eso estamos. Cuéntanos lo que ves — nosotros ayudamos a encontrar el camino." + }, + "upstream": { + "eyebrow": "Código abierto", + "heading": "Nos encargamos de mantener las herramientas en las que se ejecuta tu pila tecnológica.", + "sub": "{prs} solicitudes de incorporación de cambios fusionadas en {repos} proyectos de código abierto: Node.js, MongoDB, Redis, Mozilla y otros. No son demostraciones: son errores reales, reproducidos, corregidos y fusionados en el código original.", + "cta": "Descubre el trabajo previo" } } diff --git a/messages/fr/about.json b/messages/fr/about.json index 9a050f6..bfba3e9 100644 --- a/messages/fr/about.json +++ b/messages/fr/about.json @@ -20,9 +20,9 @@ }, "whatWeDo": { "eyebrow": "Notre structure", - "heading": "Un ingénieur au cœur. Un réseau autour de lui.", - "p1": "Au cœur de Spoko Studio se trouve un ingénieur avec quatorze ans de métier, personnellement investi dans chaque projet que nous livrons. Pour les périmètres plus larges, nous collaborons avec un réseau de confiance de spécialistes avec lesquels nous avons construit de vrais produits pendant des années.", - "p2": "Nous choisissons des projets dans lesquels nous voulons nous immerger pendant des mois. Nous lançons en semaines, pas en trimestres. Et nous restons là pour les années qui suivent — même codebase, toujours en évolution d'une année sur l'autre. Les projets sur ce site répondent à «Que faites-vous ?» mieux que n'importe quelle biographie." + "p2": "Nous choisissons des projets dans lesquels nous voulons nous immerger pendant des mois. Nous lançons en semaines, pas en trimestres. Et nous restons là pour les années qui suivent — même codebase, toujours en évolution d'une année sur l'autre. Les projets sur ce site répondent à «Que faites-vous ?» mieux que n'importe quelle biographie.", + "heading": "Un ingénieur au cœur de l'action. Une équipe à ses côtés.", + "p1": "Spoko Studio est dirigé par Yaroslav, un ingénieur principal fort de quatorze ans d’expérience dans tous les domaines, de l’administration système et de l’assurance qualité au développement de produits et à l’ingénierie. Il s’investit personnellement dans chaque projet que nous livrons. Il est entouré d’une petite équipe soudée d’ingénieurs et de spécialistes avec lesquels nous développons des produits concrets depuis des années." }, "process": { "eyebrow": "Notre méthode", diff --git a/messages/fr/common.json b/messages/fr/common.json index a76ab49..17feb85 100644 --- a/messages/fr/common.json +++ b/messages/fr/common.json @@ -14,7 +14,8 @@ }, "primaryNav": "Principal", "openMenu": "Ouvrir le menu", - "closeMenu": "Fermer le menu" + "closeMenu": "Fermer le menu", + "process": "Processus" }, "footer": { "tagline": "Conçu avec soin, par des humains, pour des humains.", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Lancé en", "velocityLiveLabel": "En ligne depuis", "breadcrumbHome": "Accueil", - "breadcrumbWork": "Projets" + "breadcrumbWork": "Projets", + "bookCall": "Réservez un appel de 30 minutes" } } diff --git a/messages/fr/home.json b/messages/fr/home.json index 6bf72cf..3c5a5ea 100644 --- a/messages/fr/home.json +++ b/messages/fr/home.json @@ -6,9 +6,9 @@ "hero": { "h1Line1": "Vous voyez l'idée.", "h1Line2": "Nous voyons le chemin.", - "sub": "Spoko Studio, c'est un ingénieur et un réseau étendu qui transforment ce dont vous rêvez — mais que vous n'avez pas encore pu construire — en produits lancés qui continuent de fonctionner en production.", "ctaPrimary": "Découvrir nos projets", - "ctaSecondary": "Ou parlons-en" + "ctaSecondary": "Ou parlons-en", + "sub": "Spoko Studio est une petite équipe d'ingénieurs qui transforme les idées dont vous rêvez — mais que vous n'avez pas encore pu concrétiser — en produits lancés sur le marché et qui continuent de fonctionner en production." }, "scrollCue": "Défiler", "selectedWork": { @@ -19,5 +19,11 @@ "eyebrow": "Contact", "heading": "Une idée que vous n'arrivez pas tout à fait à formuler ?", "sub": "C'est exactement là que nous sommes utiles. Dites-nous ce que vous voyez — nous vous aiderons à trouver le chemin." + }, + "upstream": { + "eyebrow": "Open source", + "heading": "Nous assurons la maintenance des outils sur lesquels fonctionne votre pile technologique.", + "sub": "{prs} pull requests fusionnées sur {repos} projets open source — Node.js, MongoDB, Redis, Mozilla et bien d'autres. Pas de démos : de vrais bugs, reproduits, corrigés et intégrés en amont.", + "cta": "Découvrez les activités en amont" } } diff --git a/messages/nl/about.json b/messages/nl/about.json index 29f75b7..5c85c6c 100644 --- a/messages/nl/about.json +++ b/messages/nl/about.json @@ -20,9 +20,9 @@ }, "whatWeDo": { "eyebrow": "Hoe we zijn opgebouwd", - "heading": "Een engineer in het hart. Een netwerk eromheen.", - "p1": "In het hart van Spoko Studio zit een engineer met veertien jaar vakmanschap, persoonlijk betrokken bij elk project dat we opleveren. Voor grotere trajecten werken we samen met een betrouwbaar netwerk van specialisten waarmee we al jaren echte producten hebben gebouwd.", - "p2": "We kiezen werk waarin we maandenlang willen leven. We lanceren in weken, niet in kwartalen. En we blijven daarna — hetzelfde codebase, jaar na jaar verder groeiend. De projecten op deze site geven een beter antwoord op «wat doen jullie?» dan welke biografie ook." + "p2": "We kiezen werk waarin we maandenlang willen leven. We lanceren in weken, niet in kwartalen. En we blijven daarna — hetzelfde codebase, jaar na jaar verder groeiend. De projecten op deze site geven een beter antwoord op «wat doen jullie?» dan welke biografie ook.", + "heading": "Een ingenieur als spil. Een team om hem heen.", + "p1": "Spoko Studio staat onder leiding van Yaroslav — een hoofdingenieur met veertien jaar ervaring in het hele spectrum, van systeembeheer en kwaliteitscontrole tot productontwikkeling en engineering. Hij zet zich persoonlijk in voor elk project dat we opleveren. Om hem heen werkt een klein, hecht team van ingenieurs en specialisten waarmee we al jarenlang concrete producten ontwikkelen." }, "process": { "eyebrow": "Hoe we werken", diff --git a/messages/nl/common.json b/messages/nl/common.json index bf36100..7f25e8a 100644 --- a/messages/nl/common.json +++ b/messages/nl/common.json @@ -14,7 +14,8 @@ }, "primaryNav": "Primair", "openMenu": "Menu openen", - "closeMenu": "Menu sluiten" + "closeMenu": "Menu sluiten", + "process": "Proces" }, "footer": { "tagline": "Met zorg gebouwd, door mensen, voor mensen.", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Gelanceerd in", "velocityLiveLabel": "Al live voor", "breadcrumbHome": "Home", - "breadcrumbWork": "Work" + "breadcrumbWork": "Work", + "bookCall": "Boek een gesprek van 30 minuten" } } diff --git a/messages/nl/home.json b/messages/nl/home.json index 15eeaef..0e5f07b 100644 --- a/messages/nl/home.json +++ b/messages/nl/home.json @@ -6,9 +6,9 @@ "hero": { "h1Line1": "Jij ziet het idee.", "h1Line2": "Wij zien de weg ernaartoe.", - "sub": "Spoko Studio is één engineer plus een uitgebreid netwerk dat de dingen waar jij al een tijdje van droomt — maar nog niet kon bouwen — omzet in gelanceerde producten die blijven werken in productie.", "ctaPrimary": "Bekijk ons werk", - "ctaSecondary": "Of laten we praten" + "ctaSecondary": "Of laten we praten", + "sub": "Spoko Studio is een klein team van ontwikkelaars dat de dingen waar je al lang van droomt — maar die je nog niet kon bouwen — omzet in gelanceerde producten die in de productieomgeving blijven functioneren." }, "scrollCue": "Scrollen", "selectedWork": { @@ -19,5 +19,11 @@ "eyebrow": "Contact", "heading": "Heb je een idee dat je nog niet goed kunt verwoorden?", "sub": "Precies dán zijn wij nuttig. Vertel ons wat jij ziet — wij helpen de weg te vinden." + }, + "upstream": { + "eyebrow": "Open source", + "heading": "Wij zorgen ervoor dat de tools waarop uw stack draait, goed werken.", + "sub": "{prs} samengevoegde pull-verzoeken in {repos} open-sourceprojecten — Node.js, MongoDB, Redis, Mozilla en meer. Geen demo’s: echte bugs, gereproduceerd, verholpen en upstream samengevoegd.", + "cta": "Ontdek het werk in de aanloopfase" } } diff --git a/messages/pl/about.json b/messages/pl/about.json index 9d567a9..60929f1 100644 --- a/messages/pl/about.json +++ b/messages/pl/about.json @@ -20,9 +20,9 @@ }, "whatWeDo": { "eyebrow": "Jak jesteśmy zbudowani", - "heading": "Inżynier w centrum. Sieć specjalistów wokół.", - "p1": "Sercem Spoko Studio jest inżynier z czternastoletnim doświadczeniem, osobiście zaangażowany w każdy projekt, który dostarczamy. Przy większych zakresach współpracujemy ze sprawdzoną siecią specjalistów, z którymi budowaliśmy prawdziwe produkty przez lata.", - "p2": "Wybieramy prace, w których chcemy żyć przez wiele miesięcy. Startujemy w tygodnie, nie kwartały. I pozostajemy przy projektach przez kolejne lata — ta sama baza kodu, wciąż się rozwijająca. Projekty na tej stronie odpowiadają na pytanie «czym się zajmujecie?» lepiej niż jakakolwiek biografia." + "p2": "Wybieramy prace, w których chcemy żyć przez wiele miesięcy. Startujemy w tygodnie, nie kwartały. I pozostajemy przy projektach przez kolejne lata — ta sama baza kodu, wciąż się rozwijająca. Projekty na tej stronie odpowiadają na pytanie «czym się zajmujecie?» lepiej niż jakakolwiek biografia.", + "heading": "Inżynier w sercu. Zespół wokół niego.", + "p1": "Na czele Spoko Studio stoi Jarosław — główny inżynier z czternastoletnim doświadczeniem w całym stosie technologicznym, od administracji systemami i kontroli jakości po rozwój produktów i inżynierię. Osobiście angażuje się w każdy projekt, który wprowadzamy na rynek. Otacza go niewielki, zaufany zespół inżynierów i specjalistów, z którymi od lat tworzymy prawdziwe produkty." }, "process": { "eyebrow": "Jak pracujemy", diff --git a/messages/pl/common.json b/messages/pl/common.json index c432e5e..d8ef3ae 100644 --- a/messages/pl/common.json +++ b/messages/pl/common.json @@ -14,7 +14,8 @@ }, "primaryNav": "Główna", "openMenu": "Otwórz menu", - "closeMenu": "Zamknij menu" + "closeMenu": "Zamknij menu", + "process": "Proces" }, "footer": { "tagline": "Tworzone z troską, przez ludzi, dla ludzi.", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Wdrożone w", "velocityLiveLabel": "Działa od", "breadcrumbHome": "Strona główna", - "breadcrumbWork": "Projekty" + "breadcrumbWork": "Projekty", + "bookCall": "Umów się na 30-minutową rozmowę telefoniczną" } } diff --git a/messages/pl/home.json b/messages/pl/home.json index dae82bd..0c4d967 100644 --- a/messages/pl/home.json +++ b/messages/pl/home.json @@ -6,9 +6,9 @@ "hero": { "h1Line1": "Ty widzisz pomysł.", "h1Line2": "My widzimy drogę do niego.", - "sub": "Spoko Studio to jeden inżynier i rozszerzona sieć kontaktów, która zamienia rzeczy, o których marzyłeś — ale jeszcze nie mogłeś zbudować — w gotowe produkty działające na produkcji.", "ctaPrimary": "Zobacz nasze realizacje", - "ctaSecondary": "Albo porozmawiajmy" + "ctaSecondary": "Albo porozmawiajmy", + "sub": "Spoko Studio to niewielki zespół inżynierów, którzy przekształcają rzeczy, o których marzyłeś — ale których jeszcze nie udało ci się stworzyć — w gotowe produkty, które nieprzerwanie działają w środowisku produkcyjnym." }, "scrollCue": "Przewiń", "selectedWork": { @@ -19,5 +19,11 @@ "eyebrow": "Kontakt", "heading": "Masz pomysł, którego jeszcze nie potrafisz nazwać?", "sub": "To dokładnie ten moment, w którym jesteśmy przydatni. Powiedz nam, co widzisz — pomożemy znaleźć drogę." + }, + "upstream": { + "eyebrow": "Oprogramowanie typu open source", + "heading": "Zajmujemy się naprawą narzędzi, na których działa wasz stos technologiczny.", + "sub": "{prs} scalono pull requesty w ramach {repos} projektów open source — Node.js, MongoDB, Redis, Mozilla i innych. To nie są tylko prezentacje: prawdziwe błędy, odtworzone, naprawione i wkomponowane w główny kod.", + "cta": "Zapoznaj się z pracami przygotowawczymi" } } diff --git a/messages/pt/about.json b/messages/pt/about.json index 7d4d3a5..70691db 100644 --- a/messages/pt/about.json +++ b/messages/pt/about.json @@ -20,9 +20,9 @@ }, "whatWeDo": { "eyebrow": "Como somos", - "heading": "Um engenheiro no centro. Uma rede à volta.", - "p1": "No centro da Spoko Studio está um engenheiro com catorze anos de ofício, pessoalmente investido em cada projeto que entregamos. Para âmbitos mais alargados, colaboramos com uma rede de confiança de especialistas com quem já construímos produtos reais ao longo de anos.", - "p2": "Escolhemos trabalho em que queremos mergulhar durante meses. Lançamos em semanas, não em trimestres. E ficamos por perto nos anos que se seguem — a mesma base de código, sempre a evoluir. Os projetos neste site respondem a «o que fazem?» melhor do que qualquer biografia." + "p2": "Escolhemos trabalho em que queremos mergulhar durante meses. Lançamos em semanas, não em trimestres. E ficamos por perto nos anos que se seguem — a mesma base de código, sempre a evoluir. Os projetos neste site respondem a «o que fazem?» melhor do que qualquer biografia.", + "heading": "Um engenheiro no centro de tudo. Uma equipa à sua volta.", + "p1": "O Spoko Studio é liderado por Yaroslav — um engenheiro principal com catorze anos de experiência em todas as áreas, desde a administração de sistemas e controlo de qualidade até ao desenvolvimento de produtos e engenharia. Ele dedica-se pessoalmente a todos os projetos que lançamos. Ao seu lado, trabalha uma equipa pequena e de confiança, composta por engenheiros e especialistas com quem temos vindo a desenvolver produtos reais há anos." }, "process": { "eyebrow": "Como trabalhamos", diff --git a/messages/pt/common.json b/messages/pt/common.json index 46bee7a..2e44628 100644 --- a/messages/pt/common.json +++ b/messages/pt/common.json @@ -14,7 +14,8 @@ }, "primaryNav": "Principal", "openMenu": "Abrir menu", - "closeMenu": "Fechar menu" + "closeMenu": "Fechar menu", + "process": "Processo" }, "footer": { "tagline": "Feito com cuidado, por pessoas, para pessoas.", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Lançado em", "velocityLiveLabel": "Online há", "breadcrumbHome": "Início", - "breadcrumbWork": "Trabalho" + "breadcrumbWork": "Trabalho", + "bookCall": "Marque uma chamada de 30 minutos" } } diff --git a/messages/pt/home.json b/messages/pt/home.json index 27276fe..b8aa853 100644 --- a/messages/pt/home.json +++ b/messages/pt/home.json @@ -6,9 +6,9 @@ "hero": { "h1Line1": "Você vê a ideia.", "h1Line2": "Nós vemos o caminho até ela.", - "sub": "Spoko Studio é um engenheiro mais uma rede alargada que transforma aquilo com que você sonha — mas ainda não conseguiu construir — em produtos lançados que continuam a funcionar em produção.", "ctaPrimary": "Explore o nosso trabalho", - "ctaSecondary": "Ou vamos conversar" + "ctaSecondary": "Ou vamos conversar", + "sub": "A Spoko Studio é uma pequena equipa de engenheiros que transforma aquilo com que sempre sonhou — mas que ainda não conseguiu concretizar — em produtos lançados no mercado que continuam a funcionar em ambiente de produção." }, "scrollCue": "Rolar", "selectedWork": { @@ -19,5 +19,11 @@ "eyebrow": "Contacto", "heading": "Tem uma ideia que não consegue bem articular?", "sub": "É exatamente aí que somos úteis. Diga-nos o que vê — nós ajudamos a encontrar o caminho." + }, + "upstream": { + "eyebrow": "Código aberto", + "heading": "Nós reparamos as ferramentas nas quais a sua pilha de tecnologias funciona.", + "sub": "{prs} pull requests integrados em {repos} projetos de código aberto — Node.js, MongoDB, Redis, Mozilla e outros. Não são demonstrações: são erros reais, reproduzidos, corrigidos e integrados no código principal.", + "cta": "Explore o trabalho a montante" } } diff --git a/messages/uk/about.json b/messages/uk/about.json index 027e98f..b3d4af2 100644 --- a/messages/uk/about.json +++ b/messages/uk/about.json @@ -20,8 +20,8 @@ }, "whatWeDo": { "eyebrow": "Як ми влаштовані", - "heading": "У центрі — інженер. Поруч — мережа.", - "p1": "У серці Spoko Studio — інженер з чотирнадцятирічним досвідом, що особисто занурюється в кожен проєкт, який ми запускаємо. Для масштабніших задач — мережа довірених спеціалістів, з якими роками створювали реальні продукти.", + "heading": "У центрі — інженер. Поруч — команда.", + "p1": "Spoko Studio веде Ярослав — провідний інженер із чотирнадцятирічним досвідом наскрізь по стеку: від системного адміністрування та QA до продукту й інженерії. Він особисто занурюється в кожен проєкт, який ми запускаємо. Навколо нього — невелика довірена команда інженерів і спеціалістів, з якими ми роками створювали реальні продукти.", "p2": "Ми обираємо роботу, у якій хочемо прожити місяці. Запускаємо за тижні, а не за квартали. І залишаємося на роки після релізу — той самий кодбейс, що далі росте рік за роком. Проєкти на цьому сайті відповідають на питання «чим ви займаєтеся?» точніше за будь-яку біографію." }, "process": { diff --git a/messages/uk/common.json b/messages/uk/common.json index c4fedc7..951ea3d 100644 --- a/messages/uk/common.json +++ b/messages/uk/common.json @@ -2,6 +2,7 @@ "nav": { "work": "Роботи", "services": "Послуги", + "process": "Процес", "upstream": "Upstream", "about": "Про нас", "contact": "Контакти", @@ -45,6 +46,7 @@ "velocityLaunchedLabel": "Запущено за", "velocityLiveLabel": "У продакшені", "breadcrumbHome": "Головна", - "breadcrumbWork": "Роботи" + "breadcrumbWork": "Роботи", + "bookCall": "Записатись на 30-хв дзвінок" } } diff --git a/messages/uk/home.json b/messages/uk/home.json index 8dbc02f..b97e241 100644 --- a/messages/uk/home.json +++ b/messages/uk/home.json @@ -6,11 +6,17 @@ "hero": { "h1Line1": "Ви бачите ідею.", "h1Line2": "Ми бачимо шлях до неї.", - "sub": "Spoko Studio — інженер і розширена мережа спеціалістів, які перетворюють ваші мрії у запущені продукти, що далі стабільно працюють у продакшені.", + "sub": "Spoko Studio — невелика команда інженерів, які перетворюють ваші мрії у запущені продукти, що далі стабільно працюють у продакшені.", "ctaPrimary": "Подивитись роботи", "ctaSecondary": "Або поговоримо" }, "scrollCue": "Гортати", + "upstream": { + "eyebrow": "Open source", + "heading": "Ми лагодимо інструменти, на яких працює ваш стек.", + "sub": "{prs} змерджених pull request у {repos} open-source проєктах — Node.js, MongoDB, Redis, Mozilla та інші. Не демо: реальні баги, відтворені, виправлені та змерджені upstream.", + "cta": "Переглянути upstream-роботу" + }, "selectedWork": { "eyebrow": "Вибрані роботи", "heading": "Сім проєктів — запущені, живі."