feat: Add support for MDX (#104)

This is an attempt to create our docs and blogs website
This commit is contained in:
Wanjohi
2024-08-31 21:37:45 +03:00
committed by GitHub
parent a90fe4ba7a
commit 22d43411b1
72 changed files with 1103 additions and 542 deletions

View File

@@ -1,69 +0,0 @@
import { component$ } from "@builder.io/qwik";
import { useDocumentHead, useLocation } from "@builder.io/qwik-city";
/**
* The RouterHead component is placed inside of the document `<head>` element.
*/
export const RouterHead = component$(() => {
const head = useDocumentHead();
const loc = useLocation();
const domain = loc.url.origin;
return (
<>
<title>{loc.url.pathname === "/" ? "Nestri Your games. Your rules." : `${loc.url.pathname.split("/")[1].charAt(0).toUpperCase() + loc.url.pathname.split("/")[1].slice(1)} Nestri`}</title>
<link rel="canonical" href={loc.url.href} />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{/**For SEO optimisation purposes refrain from SVG favicons and use PNG instead */}
{/* <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> */}
{/* <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<link rel="manifest" href="/manifest.json" /> */}
<link rel="apple-touch-icon" sizes="180x180" href="/seo/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/seo/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/seo/favicon-16x16.png" />
<link rel="manifest" href="/manifest.json" />
{/**@ts-ignore */}
<link rel="mask-icon" href="/seo/safari-pinned-tab.svg" color="#ffede5" />
<link rel="shortcut icon" href="/seo/favicon.ico" />
<meta name="msapplication-TileColor" content="#ffede5" />
<meta name="msapplication-config" content="/seo/browserconfig.xml" />
<meta property="og:url" content={domain} />
<meta property="twitter:url" content={domain} />
<meta property="twitter:domain" content={domain.replace("https://", "")} />
<meta property="og:type" content="website" />
<meta property="og:image" content={`${domain}/seo/banner.png`} />
<meta property="twitter:image" content={`${domain}/seo/banner.png`} />
{head.meta.map((m) => (
<meta key={m.key} {...m} />
))}
{head.links.map((l) => (
<link key={l.key} {...l} />
))}
{head.styles.map((s) => (
<style
key={s.key}
{...s.props}
{...(s.props?.dangerouslySetInnerHTML
? {}
: { dangerouslySetInnerHTML: s.style })}
/>
))}
{head.scripts.map((s) => (
<script
key={s.key}
{...s.props}
{...(s.props?.dangerouslySetInnerHTML
? {}
: { dangerouslySetInnerHTML: s.script })}
/>
))}
</>
);
});

View File

@@ -4,7 +4,7 @@ import {
RouterOutlet,
ServiceWorkerRegister,
} from "@builder.io/qwik-city";
import { RouterHead } from "@/components/router-head";
import { RouterHead } from "@nestri/ui";
import { isDev } from "@builder.io/qwik/build";
import "@nestri/ui/globals.css";
@@ -34,7 +34,7 @@ export default component$(() => {
<RouterHead />
</head>
<body
class="bg-gray-50 text-primary-950 dark:bg-gray-950 dark:text-primary-50 font-body flex min-h-[100dvh] flex-col overflow-x-hidden antialiased"
class="bg-gray-50 text-gray-950 dark:bg-gray-950 dark:text-gray-50 font-body flex min-h-[100dvh] flex-col overflow-x-hidden antialiased"
lang="en">
<RouterOutlet />
{/* {!isDev && <ServiceWorkerRegister />} */}

View File

@@ -0,0 +1,58 @@
import { component$ } from "@builder.io/qwik"
import { NavBar } from "@nestri/ui"
import { TitleSection } from "@nestri/ui/react"
export default component$(() => {
return (
<>
<NavBar />
<TitleSection client:load title="Blog" description="All the latest news from Nestri and the community." />
<div class="w-full flex flex-col py-8">
<ul class="w-full list-none max-w-xl mx-auto flex flex-col">
<li>
<a href="/blog/nestri-1-0-0-release" class="w-full flex pt-6 pb-[4.5rem] border-y-2 border-gray-200 dark:border-gray-800 hover:bg-neutral-200 transition-all duration-200 rounded-lg dark:hover:bg-neutral-800 px-2 gap-8">
<div class="flex-1 flex flex-row gap-3.5 justify-between">
<div class="flex flex-col gap-3.5">
<h3 class="text-3xl font-title font-bold mb-2">Nestri 1.0.0 Release</h3>
<p class="text-gray-500 dark:text-gray-400 text-base">
The latest release of Nestri includes a new user interface, improved performance, and a host of new features.
</p>
</div>
<span class="text-base text-neutral-400 text-nowrap">Aug 20, 2024</span>
</div>
</a>
</li>
{/* <li>
<a href="/blog/nestri-1-0-0-release" class="w-full flex pt-6 pb-[4.5rem] border-y-2 border-gray-200 dark:border-gray-800 hover:bg-neutral-200 transition-all duration-200 rounded-lg dark:hover:bg-neutral-800 px-2 gap-8">
<div class="flex-1 flex flex-row gap-3.5 justify-between">
<div class="flex flex-col gap-3.5">
<h3 class="text-3xl font-title font-bold mb-2">Nestri 1.0.0 Release</h3>
<p class="text-gray-500 dark:text-gray-400 text-base">
The latest release of Nestri includes a new user interface, improved performance, and a host of new features.
</p>
</div>
<span class="text-base text-neutral-400 text-nowrap">Aug 20, 2024</span>
</div>
</a>
</li><li>
<a href="/blog/nestri-1-0-0-release" class="w-full flex pt-6 pb-[4.5rem] border-y-2 border-gray-200 dark:border-gray-800 hover:bg-neutral-200 transition-all duration-200 rounded-lg dark:hover:bg-neutral-800 px-2 gap-8">
<div class="flex-1 flex flex-row gap-3.5 justify-between">
<div class="flex flex-col gap-3.5">
<h3 class="text-3xl font-title font-bold mb-2">Nestri 1.0.0 Release</h3>
<p class="text-gray-500 dark:text-gray-400 text-base">
The latest release of Nestri includes a new user interface, improved performance, and a host of new features.
</p>
</div>
<span class="text-base text-neutral-400 text-nowrap">Aug 20, 2024</span>
</div>
</a>
</li> */}
</ul>
</div>
</>
)
})

View File

@@ -18,7 +18,7 @@ export default component$(() => {
as="div"
>
<div class="px-2" >
<section class="flex flex-col gap-4 overflow-hidden mx-auto w-full text-left max-w-xl pt-20 pb-4">
<section class="flex flex-col gap-4 overflow-hidden mx-auto w-full text-left max-w-xl pb-4">
<div class="w-full justify-between flex">
<h2 class="relative pl-8 font-medium font-title text-base before:absolute before:left-0 before:top-1 before:w-4 before:h-4 before:bg-primary-500 before:rounded-full after:absolute after:left-0.5 after:top-1.5 after:w-3 after:h-3 after:bg-gray-50 after:dark:bg-gray-950 after:rounded-full">
v0.0.3
@@ -27,7 +27,7 @@ export default component$(() => {
</div>
<div class="pt-2 pb-4 pr-2 pl-4 md:pl-8 h-max gap-4 flex flex-col relative before:absolute before:bottom-2 before:top-0 before:left-[7px] before:w-0.5 before:bg-gradient-to-b before:rounded-[2px] before:from-primary-500 before:to-transparent" >
<div class="flex flex-row flex-wrap gap-2.5">
<div class="aspect-auto h-max rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 dark:text-primary-50/70 text-primary-950/70">
<div class="aspect-auto h-max rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 text-neutral-900/70 dark:text-neutral-100/70">
<div class="text-base backdrop-blur-sm font-title font-medium text-white z-[2] w-full h-full text-center p-4 justify-center items-center flex flex-col">
<p class="text-2xl">Fresh new look, Intel & AMD GPU support and we finally launched 🥳</p>
</div>
@@ -35,7 +35,7 @@ export default component$(() => {
<img draggable={false} src="/changelog/v0.0.3/header.avif" alt="Nestri Logo" height={328} width={328} class="w-full h-full object-cover" />
</div>
</div>
<div class="aspect-square h-max rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 dark:text-primary-50/70 text-primary-950/70">
<div class="aspect-square h-max rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 text-neutral-900/70 dark:text-neutral-100/70">
<div class="text-lg font-title font-medium text-white z-[2] w-full h-full text-center p-4 justify-end flex flex-col">
<p class="m-4 backdrop-blur-sm" >Fresh new logo and branding 💅🏾</p>
</div>
@@ -43,22 +43,22 @@ export default component$(() => {
<img draggable={false} src="/changelog/v0.0.3/new-website-design.avif" alt="Nestri Logo" height={328} width={328} class="w-full h-full object-cover" />
</div>
</div>
<div class="h-max aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:pointer-events-none after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 dark:text-primary-50/70 text-primary-950/70">
<div class="h-max aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:pointer-events-none after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 text-neutral-900/70 dark:text-neutral-100/70">
<div class="justify-center items-center flex w-full">
<p class="text-xl font-title text-center font-medium">Updated our <Link class="underline" href="/terms">Terms of Service</Link> <br class="hidden md:block" /> and our <Link class="underline" href="/privacy">Privacy Policy</Link></p>
</div>
</div>
<div class="h-max md:aspect-square aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative sm:basis-[calc(50%-5px)] basis-full after:absolute after:pointer-events-none after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 dark:text-primary-50/70 text-primary-950/70">
<div class="h-max md:aspect-square aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative sm:basis-[calc(50%-5px)] basis-full after:absolute after:pointer-events-none after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 text-neutral-900/70 dark:text-neutral-100/70">
<div class="justify-center items-center flex w-full">
<p class="text-xl font-title text-center font-medium">Added support for Intel & AMD GPUs. Courtesy of{" "}<Link class="underline" href="https://github.com/DatCaptainHorse">@DatHorse</Link></p>
</div>
</div>
<div class="h-max aspect-square rounded-2xl overflow-hidden shadow-sm flex relative sm:basis-[calc(50%-5px)] basis-full after:absolute after:pointer-events-none after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 dark:text-primary-50/70 text-primary-950/70">
<div class="h-max aspect-square rounded-2xl overflow-hidden shadow-sm flex relative sm:basis-[calc(50%-5px)] basis-full after:absolute after:pointer-events-none after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 text-neutral-900/70 dark:text-neutral-100/70">
<div class="absolute inset-0 z-0">
<img draggable={false} src="/changelog/v0.0.3/gameplay.avifs" alt="Nestri Logo" height={328} width={328} class="w-full h-full object-cover" />
</div>
</div>
<div class="h-max aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 dark:text-primary-50/70 text-primary-950/70">
<div class="h-max aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 text-neutral-900/70 dark:text-neutral-100/70">
<div class="justify-center items-center flex w-full">
<p class="text-lg font-title text-center font-medium">+ Lots of quality of life improvements! 🤞🏽</p>
</div>
@@ -75,7 +75,7 @@ export default component$(() => {
</div>
<div class="pt-2 pb-4 pr-2 pl-4 md:pl-8 h-max relative before:absolute before:bottom-2 before:top-0 before:left-[7px] before:w-0.5 before:bg-gradient-to-b before:rounded-[2px] before:from-primary-500 before:to-transparent" >
<div class="flex flex-row flex-wrap gap-2.5">
<div class="h-max justify-center aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 dark:text-primary-50/70 text-primary-950/70">
<div class="h-max justify-center aspect-auto rounded-2xl overflow-hidden shadow-sm flex relative basis-full after:absolute after:inset-0 after:z-[3] bg-gray-200/70 select-none border-gray-300/70 dark:border-gray-700/70 p-5 border dark:bg-gray-800/70 text-neutral-900/70 dark:text-neutral-100/70">
<p class="text-lg font-title text-center font-medium">Nestri has been long overdue for a changelog. <br class="hidden md:block" /> Welcome to our changelog!</p>
</div>
</div>

View File

@@ -153,7 +153,7 @@ export default component$(() => {
>
<div class="flex flex-col items-center justify-center text-left px-4 w-full mx-auto gap-4 sm:max-w-[560px] py-8">
<h2 class="text-5xl font-bold font-title w-full">Why Us?</h2>
<p class="text-gray-500 text-2xl">From streaming quality to social integration, we nail the details.</p>
<p class="text-neutral-900/70 dark:text-neutral-100/70 text-2xl">From streaming quality to social integration, we nail the details.</p>
</div>
</MotionComponent>
<div class="flex items-center flex-col px-5 gap-5 justify-between w-full mx-auto max-w-xl">
@@ -169,7 +169,7 @@ export default component$(() => {
class="w-full"
as="div"
>
<div class="w-full flex gap-4 group">
<div class="w-full flex gap-4 group ">
<div class="size-9 [&>svg]:size-9 group-hover:scale-110 transition-all duration-200">
<feature.icon />
</div>
@@ -177,7 +177,7 @@ export default component$(() => {
<h2 class="text-xl font-bold font-title">
{feature.title}
</h2>
<p class="text-gray-500">
<p class="text-neutral-900/70 dark:text-neutral-100/70">
{feature.description}
</p>
</div>
@@ -199,7 +199,7 @@ export default component$(() => {
>
<div class="flex flex-col items-center justify-center text-left w-full mx-auto px-4 gap-4 sm:max-w-[560px] py-8">
<h2 class="text-5xl font-bold font-title w-full">How it works</h2>
<p class="text-gray-500 text-2xl w-full">From click play in under three minutes</p>
<p class="text-neutral-900/70 dark:text-neutral-100/70 text-2xl w-full">From click play in under three minutes</p>
</div>
</MotionComponent>
<MotionComponent
@@ -218,7 +218,7 @@ export default component$(() => {
1
</p>
</div>
<div class="z-[1] group-hover:ring-primary-500 gap-4 flex items-center justify-center flex-col transition-all ring-[3px] ring-gray-300 dark:ring-gray-700 duration-200 h-[260px] aspect-square bg-gray-100 dark:bg-gray-900 rounded-2xl overflow-hidden">
<div class="z-[1] group-hover:ring-primary-500 gap-4 flex items-center justify-center flex-col transition-all ring-[3px] ring-gray-200 dark:ring-gray-800 duration-200 h-[260px] aspect-square bg-gray-100 dark:bg-gray-900 rounded-2xl overflow-hidden">
<div class="flex items-center justify-center" >
<div class="z-[4] flex relative items-center justify-center size-[66px] transition-all duration-200 rounded-full bg-gray-200 dark:bg-gray-800 text-gray-500 dark:group-hover:bg-primary-800 group-hover:bg-primary-200 shadow-lg shadow-gray-300 dark:shadow-gray-700" >
<svg xmlns="http://www.w3.org/2000/svg" width="32" class="size-10 flex-shrink-0 group-hover:hidden" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><path d="M6.286 19C3.919 19 2 17.104 2 14.765s1.919-4.236 4.286-4.236q.427.001.83.08m7.265-2.582a5.8 5.8 0 0 1 1.905-.321c.654 0 1.283.109 1.87.309m-11.04 2.594a5.6 5.6 0 0 1-.354-1.962C6.762 5.528 9.32 3 12.476 3c2.94 0 5.361 2.194 5.68 5.015m-11.04 2.594a4.3 4.3 0 0 1 1.55.634m9.49-3.228C20.392 8.78 22 10.881 22 13.353c0 2.707-1.927 4.97-4.5 5.52" opacity=".5" /><path stroke-linejoin="round" d="M12 22v-6m0 6l2-2m-2 2l-2-2" /></g></svg>
@@ -245,7 +245,7 @@ export default component$(() => {
</div>
</div>
<div class="flex flex-col gap-2 w-full items-center justify-center">
<p class="text-gray-500 max-w-[80%] text-center mx-auto text-2xl font-title">
<p class="text-neutral-900/70 dark:text-neutral-100/70 max-w-[80%] text-center mx-auto text-2xl font-title">
<strong>Add</strong>&nbsp;your game from Steam
</p>
</div>
@@ -257,10 +257,10 @@ export default component$(() => {
2
</p>
</div>
<div class="z-[1] group-hover:ring-primary-500 gap-4 flex items-center justify-center flex-col transition-all ring-[3px] ring-gray-300 dark:ring-gray-700 duration-200 h-[260px] aspect-square bg-gray-100 dark:bg-gray-900 rounded-2xl overflow-hidden">
<div class="z-[1] group-hover:ring-primary-500 gap-4 flex items-center justify-center flex-col transition-all ring-[3px] ring-gray-200 dark:ring-gray-800 duration-200 h-[260px] aspect-square bg-gray-100 dark:bg-gray-900 rounded-2xl overflow-hidden">
<div class="flex flex-col gap-2 w-full items-center justify-center">
<p class="text-gray-500 max-w-[80%] text-center mx-auto text-2xl font-title">
<strong>Create</strong>&nbsp;or join a Nestri Party 🎈
<p class="text-neutral-900/70 dark:text-neutral-100/70 max-w-[80%] text-center mx-auto text-2xl font-title">
<strong>Create</strong>&nbsp;or join a Nestri Party
</p>
</div>
<div class="w-full [mask-image:linear-gradient(0deg,transparent,#000_30px)] justify-center items-center p-0.5 py-1 pb-0 flex flex-col-reverse">
@@ -313,7 +313,7 @@ export default component$(() => {
3
</p>
</div>
<div class="z-[1] relative group-hover:ring-primary-500 gap-4 flex items-center justify-center flex-col transition-all ring-[3px] ring-gray-300 dark:ring-gray-700 duration-200 h-[260px] aspect-square bg-gray-100 dark:bg-gray-900 rounded-2xl overflow-hidden">
<div class="z-[1] relative group-hover:ring-primary-500 gap-4 flex items-center justify-center flex-col transition-all ring-[3px] ring-gray-200 dark:ring-gray-800 duration-200 h-[260px] aspect-square bg-gray-100 dark:bg-gray-900 rounded-2xl overflow-hidden">
<div class="absolute top-0 left-0 bottom-0 right-0 w-full h-full z-[3]">
<Cursor client:load class="absolute left-4 top-4" text="Wanjohi" />
<Cursor client:load color="#3a9a00" flip class="absolute right-2 top-8" text="Jd" />
@@ -321,7 +321,7 @@ export default component$(() => {
<Cursor client:load color="#FF4F01" flip class="hidden transition-all duration-200 absolute top-20 right-6 group-hover:flex" text="You" />
</div>
<div class="flex z-[2] flex-col gap-2 w-full items-center justify-center">
<p class="text-gray-500 max-w-[80%] text-center mx-auto text-2xl font-title">
<p class="text-neutral-900/70 dark:text-neutral-100/70 max-w-[80%] text-center mx-auto text-2xl font-title">
<strong>Play</strong>&nbsp;your game with friends
</p>
</div>

View File

@@ -18,7 +18,7 @@ export default component$(() => {
as="div"
>
<div class="px-2" >
<section class="flex flex-col gap-4 justify-center items-center mx-auto w-full text-left max-w-xl pt-20 pb-4">
<section class="flex flex-col gap-4 justify-center items-center mx-auto w-full text-left max-w-xl pb-4">
<div class="flex flex-col gap-4 justify-center items-center">
<div class="flex sm:flex-row flex-col w-[90%] sm:w-full h-min p-1.5 overflow-hidden bg-gray-200/70 ring-2 ring-gray-300 dark:ring-gray-700 dark:bg-gray-800/70 rounded-xl gap-4">
<div class="gap-3 w-full p-6 flex flex-col rounded-lg bg-white dark:bg-black">
@@ -30,7 +30,7 @@ export default component$(() => {
<p class="text-base font-medium">Free</p>
</div>
<div class="break-words [word-break:break-word] [text-wrap:balance] [word-wrap:break-word] w-full relative whitespace-pre-wrap">
<p class="text-base text-primary-950/70 dark:text-primary-50/70">
<p class="text-base text-gray-950/70 dark:text-gray-50/70">
Perfect for casual gamers and those new to Nestri. Dive into cloud gaming without spending a dime.
</p>
</div>
@@ -55,7 +55,7 @@ export default component$(() => {
<hr class="h-[2px] bg-gray-200 dark:bg-gray-800" />
<div class="w-full relative sm:text-sm text-base gap-3 flex flex-col">
<div class="flex item-center flex-col gap-2 w-full">
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24"><path fill="currentColor" d="M8.21 17.32L7 16.8a2.13 2.13 0 1 0 1.17-2.93l1.28.53a1.58 1.58 0 0 1-1.22 2.92z" /><path fill="currentColor" d="M12 2a10 10 0 0 0-10 9.34l5.38 2.21a2.31 2.31 0 0 1 .47-.24A2.62 2.62 0 0 1 9 13.1l2.44-3.56a3.8 3.8 0 1 1 3.8 3.8h-.08l-3.51 2.5a2.77 2.77 0 0 1-5.47.68l-3.77-1.6A10 10 0 1 0 12 2" /><path fill="currentColor" d="M17.79 9.5a2.53 2.53 0 1 0-2.53 2.5a2.54 2.54 0 0 0 2.53-2.5m-4.42 0a1.9 1.9 0 1 1 1.9 1.91a1.9 1.9 0 0 1-1.9-1.92z" /></svg>
</div>
@@ -63,7 +63,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24">
<g fill="none" stroke="currentColor" stroke-width="1.5"><path d="M7 10c0-1.414 0-2.121.44-2.56C7.878 7 8.585 7 10 7h4c1.414 0 2.121 0 2.56.44c.44.439.44 1.146.44 2.56v4c0 1.414 0 2.121-.44 2.56c-.439.44-1.146.44-2.56.44h-4c-1.414 0-2.121 0-2.56-.44C7 16.122 7 15.415 7 14z" opacity=".5" />
@@ -77,7 +77,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2S2 6.477 2 12s4.477 10 10 10" opacity=".5" /><path fill="currentColor" fill-rule="evenodd" d="M12 7.25a.75.75 0 0 1 .75.75v3.69l2.28 2.28a.75.75 0 1 1-1.06 1.06l-2.5-2.5a.75.75 0 0 1-.22-.53V8a.75.75 0 0 1 .75-.75" clip-rule="evenodd" /></svg>
</div>
@@ -85,7 +85,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="6" r="4" /><path stroke-linecap="round" d="M18 9c1.657 0 3-1.12 3-2.5S19.657 4 18 4M6 9C4.343 9 3 7.88 3 6.5S4.343 4 6 4" opacity=".5" /><ellipse cx="12" cy="17" rx="6" ry="4" /><path stroke-linecap="round" d="M20 19c1.754-.385 3-1.359 3-2.5s-1.246-2.115-3-2.5M4 19c-1.754-.385-3-1.359-3-2.5s1.246-2.115 3-2.5" opacity=".5" /></g></svg>
</div>
@@ -93,7 +93,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -103,7 +103,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -113,7 +113,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -123,7 +123,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -133,7 +133,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -143,7 +143,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -153,7 +153,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -174,7 +174,7 @@ export default component$(() => {
<h2 class="text-base font-medium">TBD</h2>
</div>
<div class="break-words [word-break:break-word] [text-wrap:balance] [word-wrap:break-word] w-full relative whitespace-pre-wrap">
<p class="text-base text-primary-950/70 dark:text-primary-50/70">
<p class="text-base text-gray-950/70 dark:text-gray-50/70">
Ideal for dedicated gamers who crave more power, flexibility, and social gaming experiences.
</p>
</div>
@@ -198,7 +198,7 @@ export default component$(() => {
<hr class="h-[2px] bg-gray-300 dark:bg-gray-700" />
<div class="w-full sm:text-sm text-base relative gap-3 flex flex-col">
<div class="flex item-center flex-col gap-2 w-full">
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24"><path fill="currentColor" d="M8.21 17.32L7 16.8a2.13 2.13 0 1 0 1.17-2.93l1.28.53a1.58 1.58 0 0 1-1.22 2.92z" /><path fill="currentColor" d="M12 2a10 10 0 0 0-10 9.34l5.38 2.21a2.31 2.31 0 0 1 .47-.24A2.62 2.62 0 0 1 9 13.1l2.44-3.56a3.8 3.8 0 1 1 3.8 3.8h-.08l-3.51 2.5a2.77 2.77 0 0 1-5.47.68l-3.77-1.6A10 10 0 1 0 12 2" /><path fill="currentColor" d="M17.79 9.5a2.53 2.53 0 1 0-2.53 2.5a2.54 2.54 0 0 0 2.53-2.5m-4.42 0a1.9 1.9 0 1 1 1.9 1.91a1.9 1.9 0 0 1-1.9-1.92z" /></svg>
</div>
@@ -209,7 +209,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24">
<g fill="none" stroke="currentColor" stroke-width="1.5"><path d="M7 10c0-1.414 0-2.121.44-2.56C7.878 7 8.585 7 10 7h4c1.414 0 2.121 0 2.56.44c.44.439.44 1.146.44 2.56v4c0 1.414 0 2.121-.44 2.56c-.439.44-1.146.44-2.56.44h-4c-1.414 0-2.121 0-2.56-.44C7 16.122 7 15.415 7 14z" opacity=".5" />
@@ -223,7 +223,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2S2 6.477 2 12s4.477 10 10 10" opacity=".5" /><path fill="currentColor" fill-rule="evenodd" d="M12 7.25a.75.75 0 0 1 .75.75v3.69l2.28 2.28a.75.75 0 1 1-1.06 1.06l-2.5-2.5a.75.75 0 0 1-.22-.53V8a.75.75 0 0 1 .75-.75" clip-rule="evenodd" /></svg>
</div>
@@ -231,7 +231,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" class="w-full h-full" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="6" r="4" /><path stroke-linecap="round" d="M18 9c1.657 0 3-1.12 3-2.5S19.657 4 18 4M6 9C4.343 9 3 7.88 3 6.5S4.343 4 6 4" opacity=".5" /><ellipse cx="12" cy="17" rx="6" ry="4" /><path stroke-linecap="round" d="M20 19c1.754-.385 3-1.359 3-2.5s-1.246-2.115-3-2.5M4 19c-1.754-.385-3-1.359-3-2.5s1.246-2.115 3-2.5" opacity=".5" /></g></svg>
</div>
@@ -239,7 +239,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -249,7 +249,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -259,7 +259,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -269,7 +269,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -279,7 +279,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -289,7 +289,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -299,7 +299,7 @@ export default component$(() => {
</div>
</div>
<div class="gap-2.5 flex relative items-center w-full" >
<div class="gap-1.5 flex w-full items-center text-neutral-800/70 dark:text-neutral-200/70" >
<div class="gap-1.5 flex w-full items-center text-neutral-900/70 dark:text-neutral-100/70" >
<div class="size-5 relative">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-full h-full">
<path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
@@ -318,7 +318,7 @@ export default component$(() => {
<div class="rounded-full size-4 overflow-hidden bg-gradient-to-tr from-[#a0f906] to-[#e60d0d]" />
<p class="text-base font-medium">Enterprise</p>
</div>
<p class="text-neutral-800/70 dark:text-neutral-200/70 text-base" >
<p class="text-neutral-900/70 dark:text-neutral-100/70 text-base" >
Looking for a custom cloud gaming platform? Use Nestri as your own on our servers or yours. Flexible licensing and white-glove onboarding included.
</p>
<Link class="underline underline-offset-1 font-medium font-title hover:opacity-70" href="mailto:enterprise@nestri.io">

View File

@@ -1,7 +1,22 @@
{
"extends": "@nestri/typescript-config/base.json",
"compilerOptions": {
"allowJs": true,
"target": "ES2017",
"module": "ES2022",
"lib": ["es2022", "DOM", "WebWorker", "DOM.Iterable"],
"jsx": "react-jsx",
"jsxImportSource": "@builder.io/qwik",
"strict": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"moduleResolution": "Bundler",
"esModuleInterop": true,
"skipLibCheck": true,
"incremental": true,
"isolatedModules": true,
"outDir": "tmp",
"noEmit": true,
"paths": {
"@/*": [
"./src/*"