Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated website #71

Merged
merged 2 commits into from
Jan 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/apps/devdoc/app/components/container.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const Container = ({
className?: string;
}) => {
return (
<div className={cn('w-full max-w-[1440px] flex-1 m-auto flex', className)}>
<div className={cn('w-full flex-1 m-auto flex max-w-[1440px]', className)}>
{children}
</div>
);
Expand Down
4 changes: 2 additions & 2 deletions src/apps/devdoc/app/components/footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ const Footer = ({ config }: { config: IConfig }) => {
'menu' in config.footer
)
return (
<footer className="px-2xl py-6xl md:px-7xl md:py-8xl xl:px-9xl xl:py-8xl 2xl:px-11xl 2xl:py-10xl 3xl:px-14xl 3xl:py-10xl bg-surface-basic-default">
<div className="px-4xl flex flex-row flex-wrap justify-between gap-y-6xl lg:gap-x-2xl max-w-[1440px] m-auto">
<footer className="py-6xl md:py-8xl xl:py-8xl 2xl:py-10xl 3xl:py-10xl bg-surface-basic-default">
<div className="px-3xl md:!px-5xl lg:!px-8xl xl:!px-11xl 2xl:!px-12xl xl:max-w-[1024px] 2xl:max-w-[1120px] box-content flex flex-row flex-wrap justify-between gap-y-6xl lg:gap-x-2xl max-w-[1440px] m-auto">
{config.footer.brand && config.footer.brand}
{config.footer.menu.map((item) => (
<FooterMenu key={item.title} {...item} />
Expand Down
9 changes: 5 additions & 4 deletions src/apps/devdoc/app/components/graph.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export const Graph = ({
<div
className={cn(
'graph',
'before:hidden xl:before:!flex',
{
'before:bg-[100%_5%,100%_5%,5%_100%,5%_100%]': blurSize === 'xs',
'before:bg-[100%_7%,100%_7%,7%_100%,7%_100%]': blurSize === 'sm',
Expand Down Expand Up @@ -74,16 +75,16 @@ export const GraphItem = ({
return (
<div className={cn('relative', className)}>
<div className="absolute pointer-events-none inset-0 z-10">
<div className="h-[calc(100%+40px)] md:h-[calc(100%+64px)] absolute -left-xs -top-[20px] md:-top-[32px]">
<div className="h-[calc(100%+40px)] lg:h-[calc(100%+64px)] absolute -left-xs -top-[20px] lg:-top-[32px]">
{lineVertical()}
</div>
<div className="h-[calc(100%+40px)] md:h-[calc(100%+64px)] absolute -right-xs -top-[20px] md:-top-[32px]">
<div className="h-[calc(100%+40px)] lg:h-[calc(100%+64px)] absolute -right-xs -top-[20px] lg:-top-[32px]">
{lineVertical()}
</div>
<div className="w-[calc(100%+40px)] md:w-[calc(100%+64px)] absolute -top-xs -left-[20px] md:-left-[32px]">
<div className="w-[calc(100%+40px)] lg:w-[calc(100%+64px)] absolute -top-xs -left-[20px] lg:-left-[32px]">
{lineHorizontal()}
</div>
<div className="w-[calc(100%+40px)] md:w-[calc(100%+64px)] absolute -bottom-xs -left-[20px] md:-left-[32px]">
<div className="w-[calc(100%+40px)] lg:w-[calc(100%+64px)] absolute -bottom-xs -left-[20px] lg:-left-[32px]">
{lineHorizontal()}
</div>
</div>
Expand Down
34 changes: 30 additions & 4 deletions src/apps/devdoc/app/components/header-secondary.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,31 @@
import { ReactNode } from 'react';
import { PageItem } from 'nextra/normalize-pages';
import Link from 'next/link';
import { HeaderLink } from './frequents';
import useConfig from '../utils/use-config';
import { cn } from '../utils/commons';
import MenuToggle from './menu-button';
import useMenu from '../utils/use-menu';

export const MobileMenu = ({
items = [],
}: {
items?: { title: string; to: string }[];
}) => {
return (
<div className={cn('flex flex-col')}>
{items.map((item) => (
<Link
href={item.to}
key={item.to}
className="px-2xl py-lg text-text-soft bodyMd"
>
{item.title}
</Link>
))}
</div>
);
};
const HeaderSecondary = ({
items,
extra,
Expand All @@ -13,12 +36,12 @@ const HeaderSecondary = ({
activePath?: PageItem[];
}) => {
const { config } = useConfig();

const { state, setState } = useMenu();
return (
<div className="flex flex-row sticky top-0 left-0 right-0 p-2 bg-surface-basic-default border-b border-border-default min-h-[76px] z-50">
<nav className="w-full md:max-w-[1440px] flex-1 m-auto flex flex-row items-center gap-6xl px-12xl">
<nav className="px-3xl md:!px-5xl lg:!px-8xl xl:!px-11xl 2xl:!px-12xl xl:max-w-[1024px] 2xl:max-w-[1120px] box-content flex flex-row items-center gap-6xl lg:m-auto w-full">
{config.logo}
<ul className="hidden md:flex flex-1 flex-row items-center justify-end gap-4xl list-none">
<ul className="hidden lg:!flex flex-1 flex-row items-center justify-center gap-4xl list-none">
{items?.map((ni) => (
<li key={ni.to} className="list-none">
<HeaderLink
Expand All @@ -30,7 +53,10 @@ const HeaderSecondary = ({
</li>
))}
</ul>
{extra}
<div className="hidden lg:!flex">{extra}</div>
<div className="flex-1 flex lg:!hidden items-center justify-end">
<MenuToggle onClick={() => setState(!state)} toggle={state} />
</div>
</nav>
</div>
);
Expand Down
68 changes: 68 additions & 0 deletions src/apps/devdoc/app/components/page/contact-us.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import Container from '~/app/components/container';
import { Button } from 'kl-design-system/atoms/button';
import { TextInput, TextArea } from 'kl-design-system/atoms/input';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (llm): Ensure that form elements like 'TextInput' and 'TextArea' have proper validation and error handling to provide a good user experience.


const ContactRoot = () => {
return (
<Container className="relative flex flex-col items-center">
<div className="px-3xl md:!px-5xl lg:!px-8xl xl:!px-11xl 2xl:px-12xl pt-6xl md:!pt-8xl xl:!pt-10xl flex flex-col gap-3xl text-center">
<h1 className="heading4xl-marketing md:!heading5xl-marketing lg:!heading6xl-marketing text-text-default">
Contact us
</h1>
<p className="bodyLg-medium md:!bodyXl-medium text-text-soft">
Get in touch and let us know how we can help.
</p>
</div>
<div className="px-3xl md:!px-5xl lg:!px-8xl xl:!px-11xl 2xl:px-12xl py-6xl md:!py-8xl xl:!py-10xl gap-5xl md:!gap-8xl xl:!gap-10xl flex flex-col lg:!flex-row w-full">
<div className="flex flex-col gap-5xl flex-1 md:px-8xl lg:!px-0">
<div className="flex flex-col gap-3xl">
<TextInput label="Full name" size="lg" />
<div className="flex flex-col md:!flex-row gap-3xl">
<div className="basis-full">
<TextInput label="Company name" size="lg" />
</div>
<div className="basis-full">
<TextInput label="Email" size="lg" />
</div>
</div>
<div className="flex flex-col md:!flex-row gap-3xl">
<div className="basis-full">
<TextInput label="Country" size="lg" />
</div>
<div className="basis-full">
<TextInput label="Mobile" size="lg" />
</div>
</div>
<TextArea label="Message" />
</div>
<div className="w-full md:!w-fit">
<Button content="Request demo" size="lg" block />
</div>
</div>
<div className="h-xs lg:!h-auto lg:!w-xs bg-border-default" />
<div className="flex-1 flex flex-col md:!flex-row lg:!flex-col gap-7xl md:!gap-10xl justify-center md:!justify-between lg:!justify-center lg:!max-w-[300px]">
<div className="flex flex-col gap-2xl">
<div className="flex flex-col gap-lg">
<span className="headingLg text-text-default">Sales</span>
<span className="bodyLg text-text-soft">
We’d love to talk about how we can work together.
</span>
</div>
<Button variant="plain" content="[email protected]" />
</div>
<div className="flex flex-col gap-2xl">
<div className="flex flex-col gap-lg">
<span className="headingLg text-text-default">Support</span>
<span className="bodyLg text-text-soft">
We’re here to help with any questions you may have.
</span>
</div>
<Button variant="plain" content="[email protected]" />
</div>
</div>
</div>
</Container>
);
};

export default ContactRoot;
212 changes: 212 additions & 0 deletions src/apps/devdoc/app/components/page/devops.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
import Chips from 'kl-design-system/atoms/chips';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question (llm): Verify that the new components such as 'Chips' from 'kl-design-system' are consistent with the design system and branding guidelines of the application.

import Container from '~/app/components/container';
import HorizontalTopTabDevops from '~/app/components/website/horizontal-top-tab-devops';
import Discover from '~/app/components/website/discover-component';
import ReadyToOps from '~/app/components/website/ready-to-ops';
import GetStarted from '~/app/components/website/get-started';
import SuccessStories from '~/app/components/website/success-stories';
import { successStories } from '~/app/utils/dummy-data';
import consts from '~/app/utils/const';
import { useState } from 'react';
import { Button } from 'kl-design-system/atoms/button';
import EmbeddedData from '../../../images/embedded-data.svg';
import TroubleFree from '../../../images/trouble-free.svg';
import SeamlessDev from '../../../images/seamless-dev.svg';
import FasterDev from '../../../images/faster-dev.svg';
import ConfigDevops from '../../../images/devops/config-devops.svg';
import CreateDevops from '../../../images/devops/create-project-devops.svg';
import DeployDevops from '../../../images/devops/deploy-devops.svg';
import SetupDevops from '../../../images/devops/setup-devops.svg';
import Cover from '../../../images/devops/cover-devops.svg';
import SectionWrapper from '../website/section-wrapper';

export const AdvantageSection = () => {
const [selectedTab, setSelectedTab] = useState(
consts.devops.advantages[0].id
);

const getTab = () => {
switch (selectedTab) {
case 'trouble-free':
return (
<img
alt="trouble-fre"
src={TroubleFree.src}
className="h-full w-full object-cover"
/>
);
case 'embedded-data':
return (
<img
alt="embedded-data"
src={EmbeddedData.src}
className="h-full w-full object-cover"
/>
);
case 'seamless-env':
return (
<img
alt="seamless-env"
src={SeamlessDev.src}
className="h-full w-full object-cover"
/>
);
case 'faster-dev':
default:
return (
<img
alt="faster-dev"
src={FasterDev.src}
className="h-full w-full object-cover"
/>
);
}
};

return (
<HorizontalTopTabDevops
tabContainerClassName="grid grid-cols-4 xl:!grid-cols-[256px_224px_224px_224px] 2xl:!grid-cols-4 gap-3xl lg:!gap-5xl md:!pt-8xl lg:!pt-10xl px-10xl"
tabs={consts.devops.advantages}
onTabChange={(item) => setSelectedTab(item.id)}
activeTab={selectedTab}
tab={getTab()}
/>
);
};

export const DiscoverSection = () => {
return (
<div className="flex flex-col 2xl:pt-10xl">
<Discover
className="grid grid-cols-1 md:!grid-cols-2 lg:!grid-cols-3 2xl:!grid-cols-4 gap-3xl lg:!gap-5xl "
title={
<>
Discover <span className="text-text-primary">DevOps</span>
</>
}
desc="Simplify software development and testing with automated environments, tools, and configurations"
features={consts.devops.features}
/>
</div>
);
};

export const GetStartedSection = () => {
const [selectedTab, setSelectedTab] = useState(
consts.devops.getstarted[0].id
);
const getTab = () => {
switch (selectedTab) {
case 'config':
return (
<div className="relative h-full overflow-hidden flex items-center justify-center lg:!items-start lg:!justify-start">
<img alt="config" src={ConfigDevops.src} />
</div>
);
case 'deploy':
return (
<div className="relative h-full overflow-hidden flex items-center justify-center lg:!items-start lg:!justify-start">
<img alt="deploy" src={DeployDevops.src} />
</div>
);
case 'setup':
return (
<div className="relative h-full p-xl lg:!p-0 overflow-hidden flex items-center justify-center lg:!items-start lg:!justify-start">
<img alt="setup" src={SetupDevops.src} />
</div>
);
case 'create':
default:
return (
<div className="h-full flex items-center justify-center flex items-center lg:!items-start">
<img alt="create" src={CreateDevops.src} />
</div>
);
}
};

return (
<GetStarted
title="In 4 simple steps"
tabs={consts.devops.getstarted}
onTabChange={(item) => setSelectedTab(item.id || '')}
tab={getTab()}
activeTab={selectedTab}
/>
);
};

export const SuccessStorySection = () => {
return (
<div className="flex flex-col py-6xl md:!py-8xl 2xl:!pt-10xl">
{/** @ts-ignore * */}
<SuccessStories tabs={successStories} />
</div>
);
};

const ReadyTo = () => {
return <ReadyToOps />;
};

const DevopsPage = () => {
return (
<div>
<Container className="relative flex justify-center lg:justify-start">
<div className="flex flex-col px-3xl md:!px-5xl lg:!px-8xl xl:!px-11xl 2xl:!px-12xl z-10">
<div className="md:absolute inset-0 distribution-cover-graph z-0" />
<div className="flex flex-col lg:!flex-row items-center lg:!items-start lg:!gap-10xl lg:!py-10xl 2xl:!py-10xl z-10 text-center lg:!text-left xl:max-w-[1024px] 2xl:max-w-[1120px] box-content">
<div className="flex flex-col gap-6xl md:!max-w-[630px] py-6xl md:!py-8xl lg:!py-0">
<div className="flex flex-col items-center lg:!items-start gap-3xl">
<Chips.Chip item="infraops" label="DevOps" />
<h1 className="heading4xl-marketing md:!heading5xl-marketing lg:!heading6xl-marketing text-text-default">
<span className="text-text-primary">NoOps</span> in any stage
of development
</h1>
<p className="bodyLg-medium md:!bodyXl-medium text-text-soft">
Dev-Prod parity for developers, by developers: DevOps
automation that redefines productivity
</p>
</div>
<div className="flex md:!flex-row flex-col gap-4xl md:!items-center justify-center lg:!justify-start">
<div>
<Button
block
size="lg"
content="Start your free trial"
variant="primary"
/>
</div>
<div>
<Button
block
size="lg"
content="Schedule a demo"
variant="basic"
/>
</div>
</div>
</div>
<div className="z-10 pb-6xl">
<img
src={Cover.src}
className="lg:scale-[1.3] md:min-w-[394px] lg:pt-5xl"
/>
</div>
</div>
</div>
</Container>
<Container className="flex flex-col">
<SectionWrapper>
<AdvantageSection />
<DiscoverSection />
<GetStartedSection />
<SuccessStorySection />
</SectionWrapper>
<ReadyTo />
</Container>
</div>
);
};

export default DevopsPage;
Loading
Loading