Skip to content

Commit

Permalink
Merge pull request #71 from kloudlite/features/design
Browse files Browse the repository at this point in the history
Updated website
  • Loading branch information
karthik1729 authored Jan 25, 2024
2 parents 773bc96 + 5d336d9 commit f7eae3d
Show file tree
Hide file tree
Showing 38 changed files with 2,752 additions and 1,635 deletions.
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';

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';
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

0 comments on commit f7eae3d

Please sign in to comment.