From 6b4879abe8a22da38a6ecbfdd4e77c5db12d4dd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Dzivjak?= Date: Fri, 14 Aug 2026 13:56:39 +0200 Subject: [PATCH 1/3] fix: background color of code blocks --- ec.config.mjs | 2 +- src/components/Code/CodeBlock.astro | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ec.config.mjs b/ec.config.mjs index cffc1459..6b91cae9 100644 --- a/ec.config.mjs +++ b/ec.config.mjs @@ -11,7 +11,7 @@ export default defineEcConfig({ borderRadius: "0", borderWidth: "0", codeFontFamily: "var(--cui-font-stack-mono)", - codeBackground: "var(--cui-bg-subtle)", + codeBackground: "#fff", gutterBorderWidth: "0", frames: { editorTabBarBorderBottomColor: "var(--cui-border-subtle)", diff --git a/src/components/Code/CodeBlock.astro b/src/components/Code/CodeBlock.astro index d46c40da..6ef45220 100644 --- a/src/components/Code/CodeBlock.astro +++ b/src/components/Code/CodeBlock.astro @@ -72,7 +72,7 @@ const { align-self: start; border: var(--cui-border-width-kilo) solid var(--cui-border-subtle); border-radius: var(--cui-border-radius-byte); - background-color: var(--cui-bg-subtle); + background-color: #fff; } .header { @@ -82,7 +82,7 @@ const { padding: var(--cui-spacings-bit) var(--cui-spacings-byte) var(--cui-spacings-bit) var(--cui-spacings-kilo); border-bottom: var(--cui-border-width-kilo) solid var(--cui-border-subtle); - background: var(--cui-bg-subtle); + background: #fff; } .options { From 5b29f1373ea1bc22755c2aaac93fa3256bb8dd46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Dzivjak?= Date: Fri, 14 Aug 2026 13:58:59 +0200 Subject: [PATCH 2/3] chore: don't highlight current tag endpoint --- src/components/ApiDocs/EndpointList.tsx | 8 +------- src/components/ApiDocs/TagSection.astro | 6 +----- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/components/ApiDocs/EndpointList.tsx b/src/components/ApiDocs/EndpointList.tsx index 11bd83b8..0168d004 100644 --- a/src/components/ApiDocs/EndpointList.tsx +++ b/src/components/ApiDocs/EndpointList.tsx @@ -5,7 +5,6 @@ import styles from "./EndpointList.module.css"; interface Props { operations: OperationObject[]; - selectedOperationSlug?: string; tagSlug: string; } @@ -22,11 +21,7 @@ const EndpointDetails = ({ operation }: { operation: OperationObject }) => { ); }; -export default function EndpointList({ - operations, - selectedOperationSlug, - tagSlug, -}: Props) { +export default function EndpointList({ operations, tagSlug }: Props) { return ( , href: `/api/${tagSlug}/${operation.slug}/`, variant: "navigation", - selected: selectedOperationSlug === operation.slug, }))} /> ); diff --git a/src/components/ApiDocs/TagSection.astro b/src/components/ApiDocs/TagSection.astro index 00de07c1..c1b56988 100644 --- a/src/components/ApiDocs/TagSection.astro +++ b/src/components/ApiDocs/TagSection.astro @@ -84,11 +84,7 @@ const coreObjectSections = coreObjects.map((schema, index) => { { operations.length > 0 && ( - + ) } From 628e01fc5a1b9350370713d48570ff575e5cc983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Dzivjak?= Date: Fri, 14 Aug 2026 14:30:04 +0200 Subject: [PATCH 3/3] feat: new landing page --- astro.config.ts | 6 +- public/img/landing/sumup-sky-v01.webp | Bin 0 -> 15564 bytes src/components/Landing/Brands.astro | 114 +- src/components/Landing/DocsBrands.astro | 28 + src/components/Landing/LinkButton.astro | 69 ++ src/components/Landing/PaymentScenes.astro | 472 ++++++++ src/overrides/Hero.astro | 47 +- src/overrides/SocialIcons.astro | 14 +- src/pages/docs.astro | 303 ++++++ src/pages/index.astro | 1138 ++++++++++++++++---- 10 files changed, 1919 insertions(+), 272 deletions(-) create mode 100644 public/img/landing/sumup-sky-v01.webp create mode 100644 src/components/Landing/DocsBrands.astro create mode 100644 src/components/Landing/LinkButton.astro create mode 100644 src/components/Landing/PaymentScenes.astro create mode 100644 src/pages/docs.astro diff --git a/astro.config.ts b/astro.config.ts index 625e9d8e..55001042 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -232,6 +232,8 @@ export default defineConfig({ "/api/**", // Custom Astro page outside docs content collection. "/contact", + // Custom documentation hub outside docs content collection. + "/docs", // Custom help hub with dynamic sections rendered from Astro pages. "/help", "/help/**", @@ -261,8 +263,8 @@ export default defineConfig({ label: "Get Started", items: [ { - label: "Home", - link: "/", + label: "Overview", + link: "/docs/", }, ], }, diff --git a/public/img/landing/sumup-sky-v01.webp b/public/img/landing/sumup-sky-v01.webp new file mode 100644 index 0000000000000000000000000000000000000000..02bceb3887b81cf46b0b46797547fd6aaf03cea8 GIT binary patch literal 15564 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 a2(@ew148Nuf=wZbEa>+|Qs$zP0002s9BEhp literal 0 HcmV?d00001 diff --git a/src/components/Landing/Brands.astro b/src/components/Landing/Brands.astro index e06041e1..8c37e55e 100644 --- a/src/components/Landing/Brands.astro +++ b/src/components/Landing/Brands.astro @@ -1,28 +1,96 @@ --- -import LogoSlider from "@components/LogoSlider.astro"; - const brands = [ - { title: "Airpos", src: "/img/logos/airpos.svg" }, - { title: "Booking.com", src: "/img/logos/booking.com.svg" }, - { title: "Bookingkit", src: "/img/logos/bookingkit.svg" }, - { title: "DHL", src: "/img/logos/dhl.svg" }, - { title: "Decathlon", src: "/img/logos/decathlon.svg" }, - { title: "Dominos", src: "/img/logos/dominos.svg" }, - { title: "Flixbus", src: "/img/logos/flixbus.svg" }, - { title: "Lightspeed", src: "/img/logos/lightspeed.svg" }, - { title: "Loyverse", src: "/img/logos/loyverse.svg" }, - { title: "Taxicaller", src: "/img/logos/taxicaller.svg" }, - { title: "Transdev", src: "/img/logos/transdev.svg" }, - { title: "Treatwell", src: "/img/logos/treatwell.svg" }, - { title: "ready2order", src: "/img/logos/ready2order.svg" }, + { + name: "Booking.com", + src: "/img/logos/booking.com.svg", + width: 119, + height: 21, + }, + { + name: "Decathlon", + src: "/img/logos/decathlon.svg", + width: 1000, + height: 249, + }, + { name: "DHL", src: "/img/logos/dhl.svg", width: 100, height: 15 }, + { + name: "Domino's", + src: "/img/logos/dominos.svg", + width: 667, + height: 148, + }, + { + name: "FlixBus", + src: "/img/logos/flixbus.svg", + width: 596, + height: 106, + }, + { + name: "Treatwell", + src: "/img/logos/treatwell.svg", + width: 185, + height: 35, + }, ]; - -const splitIndex = Math.ceil(brands.length / 2 + 1); -const firstRow = brands.slice(0, splitIndex); -const secondRow = brands.slice(splitIndex); --- -
- - -
+
    + { + brands.map(({ name, src, width, height }) => ( +
  • + {name} +
  • + )) + } +
+ + diff --git a/src/components/Landing/DocsBrands.astro b/src/components/Landing/DocsBrands.astro new file mode 100644 index 00000000..e06041e1 --- /dev/null +++ b/src/components/Landing/DocsBrands.astro @@ -0,0 +1,28 @@ +--- +import LogoSlider from "@components/LogoSlider.astro"; + +const brands = [ + { title: "Airpos", src: "/img/logos/airpos.svg" }, + { title: "Booking.com", src: "/img/logos/booking.com.svg" }, + { title: "Bookingkit", src: "/img/logos/bookingkit.svg" }, + { title: "DHL", src: "/img/logos/dhl.svg" }, + { title: "Decathlon", src: "/img/logos/decathlon.svg" }, + { title: "Dominos", src: "/img/logos/dominos.svg" }, + { title: "Flixbus", src: "/img/logos/flixbus.svg" }, + { title: "Lightspeed", src: "/img/logos/lightspeed.svg" }, + { title: "Loyverse", src: "/img/logos/loyverse.svg" }, + { title: "Taxicaller", src: "/img/logos/taxicaller.svg" }, + { title: "Transdev", src: "/img/logos/transdev.svg" }, + { title: "Treatwell", src: "/img/logos/treatwell.svg" }, + { title: "ready2order", src: "/img/logos/ready2order.svg" }, +]; + +const splitIndex = Math.ceil(brands.length / 2 + 1); +const firstRow = brands.slice(0, splitIndex); +const secondRow = brands.slice(splitIndex); +--- + +
+ + +
diff --git a/src/components/Landing/LinkButton.astro b/src/components/Landing/LinkButton.astro new file mode 100644 index 00000000..46998bc7 --- /dev/null +++ b/src/components/Landing/LinkButton.astro @@ -0,0 +1,69 @@ +--- +import type { HTMLAttributes } from "astro/types"; + +interface Props extends HTMLAttributes<"a"> { + href: string; + variant?: "primary" | "secondary" | "minimal"; + icon?: string; +} + +const { + href, + variant = "primary", + icon, + class: className, + ...attributes +} = Astro.props; +const external = /^https?:\/\//.test(href); +--- + + + + {icon === "external" && } + + + diff --git a/src/components/Landing/PaymentScenes.astro b/src/components/Landing/PaymentScenes.astro new file mode 100644 index 00000000..bfbb6a0d --- /dev/null +++ b/src/components/Landing/PaymentScenes.astro @@ -0,0 +1,472 @@ +--- +import { CardIn, Code, Globe, Nfc } from "@sumup-oss/icons"; +--- + + + + diff --git a/src/overrides/Hero.astro b/src/overrides/Hero.astro index 4077434a..e73d414c 100644 --- a/src/overrides/Hero.astro +++ b/src/overrides/Hero.astro @@ -4,28 +4,35 @@ import { Display, Body } from "@sumup-oss/circuit-ui"; const { data: { title }, } = Astro.locals.starlightRoute.entry; + +const { custom } = Astro.locals.starlightRoute; +const hideForLandingPage = custom && Astro.url.pathname === "/"; --- -
- - {title} - - - Docs, guides, and resources to help you accept payments with SumUp. - -
+{ + !hideForLandingPage && ( +
+ + {title} + + + Docs, guides, and resources to help you accept payments with SumUp. + +
+ ) +} + + diff --git a/src/pages/index.astro b/src/pages/index.astro index b774a17e..89851321 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,303 +1,1005 @@ --- +import { getCollection } from "astro:content"; + +import Brands from "@components/Landing/Brands.astro"; +import PaymentScenes from "@components/Landing/PaymentScenes.astro"; +import LinkButton from "@components/Landing/LinkButton.astro"; import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; import type { StarlightPageProps } from "@astrojs/starlight/props"; -import Brands from "@components/Landing/Brands.astro"; -import { Headline, ListItem } from "@sumup-oss/circuit-ui"; import { - Globe, Apps, CardIn, - VirtualTerminal, - Code, + Code as CodeIcon, Customise, File, - InterestOnBalance, + Globe, + History, Key, - NoCosts, Play, SecurePayments, Sparkles, + VirtualTerminal, } from "@sumup-oss/icons"; +const latestUpdates = (await getCollection("changelog")) + .sort( + (a, b) => b.data.publishedDate.valueOf() - a.data.publishedDate.valueOf(), + ) + .slice(0, 3); + +const dateFormatter = new Intl.DateTimeFormat("en", { + day: "numeric", + month: "short", + year: "numeric", +}); + +const products = [ + { + variant: "online", + icon: Globe, + title: "Online payments", + description: + "Accept cards and local payment methods with hosted, embedded, or mobile checkout experiences.", + links: [ + { + icon: Customise, + label: "Compare checkouts", + href: "/online-payments/checkouts/", + }, + { + icon: Globe, + label: "Browse payment methods", + href: "/online-payments/payment-methods/", + }, + { + icon: SecurePayments, + label: "Test payment flows", + href: "/online-payments/testing/", + }, + ], + cta: { label: "Start online", href: "/online-payments/" }, + }, + { + variant: "terminal", + icon: CardIn, + title: "In-person payments", + description: + "Add card-present payments to mobile apps, kiosks, and point-of-sale systems with SumUp readers.", + links: [ + { + icon: CodeIcon, + label: "Explore mobile SDKs", + href: "/terminal-payments/sdks/", + }, + { + icon: VirtualTerminal, + label: "Use the Cloud API", + href: "/terminal-payments/cloud-api/", + }, + { + icon: Play, + label: "Run your first payment", + href: "/terminal-payments/quickstart/", + }, + ], + cta: { label: "Explore in-person", href: "/terminal-payments/" }, + }, +]; + +const quickstartSteps = [ + { + title: "Create a sandbox", + description: "Get a test merchant account in Developer Settings.", + label: "Open Developer Settings", + href: "https://me.sumup.com/settings/developer?tab=sandboxes", + }, + { + title: "Get credentials", + description: "Choose an API key or OAuth flow for your integration.", + label: "Set up authorization", + href: "/tools/authorization/", + }, + { + title: "Create a checkout", + description: "Send an API request and open the hosted payment page.", + label: "Follow the guide", + href: "/online-payments/checkouts/hosted-checkout/", + }, +]; + +const toolkitItems = [ + { + icon: File, + title: "API reference", + description: "Endpoints, schemas, responses, and errors", + href: "/api/", + }, + { + icon: Apps, + title: "Server SDKs", + description: "Official libraries for popular languages", + href: "/tools/sdks/", + }, + { + icon: Key, + title: "Authorization", + description: "API keys, OAuth, and affiliate keys", + href: "/tools/authorization/", + }, + { + icon: SecurePayments, + title: "Testing", + description: "Sandbox accounts, test cards, and 3DS", + href: "/online-payments/testing/", + }, + { + icon: Sparkles, + title: "Build with AI", + description: "Docs context and tools for coding agents", + href: "/tools/llms/", + }, + { + icon: History, + title: "Changelog", + description: "Recent platform and SDK updates", + href: "/changelog/", + }, +]; + +const productionLinks = [ + { + icon: SecurePayments, + title: "Test safely", + description: "Success, failure, and 3D Secure scenarios", + href: "/online-payments/testing/", + }, + { + icon: Key, + title: "Protect credentials", + description: "Keep secret keys on your server", + href: "/tools/authorization/api-keys/", + }, + { + icon: Apps, + title: "Handle updates", + description: "Confirm asynchronous payment states", + href: "/online-payments/webhooks/", + }, +]; + const props = { frontmatter: { title: "SumUp Developer Portal", description: - "Welcome to SumUp portal for developers. We’ve got everything you need to build your own payment acceptance solutions for your business.", + "APIs, SDKs, and prebuilt experiences for accepting payments online and in person with SumUp.", tableOfContents: false, hero: { - title: "SumUp developer platform", + title: "Build payments with SumUp", }, }, + hasSidebar: false, custom: true, } as StarlightPageProps; --- -
-
-
- Accept Online Payments -
-
- Accept In-Person Payments - -
-
- Build and Operate - + +
+
+
+

One platform, wherever customers pay

+

+ Start with a prebuilt experience or use the APIs and SDKs to shape + the flow around your product. +

+
+ +
+ { + products.map( + ({ variant, icon: Icon, title, description, links, cta }) => ( + + ), + ) + }
-
-
-
-

Our Anti-fraud Protection

-
-
-
-
-
-
-
-

Brands That Build With SumUp

- -
-
+
+ { + latestUpdates.map(({ id, data }) => ( + + )) + } +
+ + +
+ +
+ +
-