diff --git a/src/app/conf/_design-system/section-label.tsx b/src/app/conf/_design-system/section-label.tsx new file mode 100644 index 0000000000..7ed64e7e8d --- /dev/null +++ b/src/app/conf/_design-system/section-label.tsx @@ -0,0 +1,25 @@ +import { clsx } from "clsx" +import { ChevronRight } from "./pixelarticons/chevron-right" + +export function SectionLabel({ + children, + className, + ...rest +}: { + children: React.ReactNode + className?: string + rest?: React.HTMLAttributes +}) { + return ( + + + {children} + + ) +} diff --git a/src/components/index-page/how-it-works.tsx b/src/components/index-page/how-it-works.tsx index c882b76c1f..4bcc3aeb18 100644 --- a/src/components/index-page/how-it-works.tsx +++ b/src/components/index-page/how-it-works.tsx @@ -1,5 +1,5 @@ -import { ChevronRight } from "@/app/conf/_design-system/pixelarticons/chevron-right" import { Button } from "@/app/conf/_design-system/button" +import { SectionLabel } from "@/app/conf/_design-system/section-label" import { CodeA, CodeB, CodeC } from "../code-blocks" @@ -8,10 +8,7 @@ const TRY_IT_OUT_URL = "https://graphql.org/swapi-graphql" export function HowItWorks() { return (
- - - How it works - + How it works

A GraphQL Query

    } /> @@ -35,7 +32,7 @@ function ListItem({ }) { return (
  1. -
    +
    {text}
    diff --git a/src/components/index-page/index.tsx b/src/components/index-page/index.tsx index 173c09cfea..f3c4138a1b 100644 --- a/src/components/index-page/index.tsx +++ b/src/components/index-page/index.tsx @@ -8,6 +8,7 @@ import { WithoutVersion } from "./without-version" import { BringYourOwnCode } from "./bring-your-own-code" import { WhoIsUsing } from "./who-is-using" import { HowItWorks } from "./how-it-works" +import { ProvenSolution } from "./proven-solution" export function IndexPage() { return ( @@ -15,6 +16,7 @@ export function IndexPage() { +

    A query language for your API

    diff --git a/src/components/index-page/proven-solution/blur-bean.webp b/src/components/index-page/proven-solution/blur-bean.webp new file mode 100644 index 0000000000..8ee3171865 Binary files /dev/null and b/src/components/index-page/proven-solution/blur-bean.webp differ diff --git a/src/components/index-page/proven-solution/index.tsx b/src/components/index-page/proven-solution/index.tsx new file mode 100644 index 0000000000..a5aebbbba5 --- /dev/null +++ b/src/components/index-page/proven-solution/index.tsx @@ -0,0 +1,127 @@ +import { ImageLoaded } from "@/app/conf/2025/components/image-loaded" +import { Button } from "@/app/conf/_design-system/button" +import { SectionLabel } from "@/app/conf/_design-system/section-label" +import CheckIcon from "@/app/conf/_design-system/pixelarticons/check.svg?svgr" + +import blurBean from "./blur-bean.webp" +import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration" + +export function ProvenSolution() { + return ( +

    + +
    +
    + + Business perspective + +

    + A proven solution for startups and enterprises +

    +
    + + The best user{" "} +
    + experience + + } + description="Deliver high-performing user experiences at scale. The world’s leading apps use GraphQL to create faster, more responsive digital experiences." + bullets={[ + "Faster data retrieval and load times", + "Improved bandwith efficiency", + ]} + /> + + Stability &{" "} +
    + Security + + } + description="Protect your APIs while maintaining full visibility into data consumption. GraphQL allows you to monitor, secure, and optimize API usage while ensuring compliance." + bullets={[ + "Stronger access control", + "Improved business intelligence & cost analysis", + ]} + /> + + Efficient distributed{" "} +
    + development + + } + description="Let your teams ship faster with GraphQL’s flexible, decoupled architecture. GraphQL allows frontend and backend teams to work independently and efficiently." + bullets={[ + "More rapid iterations", + "Improved cross-team collaboration", + ]} + /> +
    + +
    +
    +
    + ) +} + +function ProvenSolutionCard({ + title, + description, + bullets, +}: { + title: React.ReactNode + description: React.ReactNode + bullets: string[] +}) { + return ( +
    +

    + {title} +

    +

    {description}

    +
      + {bullets.map(bullet => ( +
    • + + {bullet} +
    • + ))} +
    +
    + ) +} + +function Stripes() { + // todo: rotate to top right corner on mobile + return ( + + {/* todo: ensure colors in dark mode are correct */} + + + ) +} diff --git a/src/components/navbar/navbar.tsx b/src/components/navbar/navbar.tsx index f971328547..85ef6f4109 100644 --- a/src/components/navbar/navbar.tsx +++ b/src/components/navbar/navbar.tsx @@ -228,9 +228,7 @@ function BackdropBlur() { return ( <>
    Spec, + title: "Spec", href: "https://spec.graphql.org", newWindow: true, }, @@ -81,10 +81,10 @@ export default { conf: { type: "page", title: ( - + GraphQLConf 2025 - + ), route: "/conf/2025", }, @@ -93,3 +93,11 @@ export default { title: "GraphQL.JS Tutorial", }, } + +function Emphasis({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ) +}