Skip to content

Commit 56f6955

Browse files
committed
init
0 parents  commit 56f6955

31 files changed

+8464
-0
lines changed

.eslintrc.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
module.exports = {
2+
parser: "@typescript-eslint/parser", // Specifies the ESLint parser
3+
extends: [
4+
"plugin:@typescript-eslint/recommended", // Uses the recommended rules from the @typescript-eslint/eslint-plugin
5+
"plugin:react/recommended",
6+
"plugin:react-hooks/recommended",
7+
"plugin:prettier/recommended",
8+
],
9+
parserOptions: {
10+
ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
11+
sourceType: "module", // Allows for the use of imports
12+
},
13+
rules: {
14+
// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
15+
"@typescript-eslint/explicit-function-return-type": "off",
16+
"@typescript-eslint/explicit-module-boundary-types": "off",
17+
"react/react-in-jsx-scope": "off",
18+
"react/prop-types": "off",
19+
"@typescript-eslint/no-explicit-any": "off",
20+
},
21+
// "overrides": [
22+
// {
23+
// "files": [],
24+
// "rules": {
25+
// "@typescript-eslint/no-unused-vars": "off"
26+
// }
27+
// }
28+
// ],
29+
settings: {
30+
react: {
31+
version: "detect",
32+
},
33+
},
34+
};

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.next
2+
node_modules
3+
.env

components/Navigation.tsx

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import React from "react";
2+
import { Navbar } from "nextra-theme-docs";
3+
4+
function Navigation(props) {
5+
return (
6+
<>
7+
<Navbar
8+
{...props}
9+
items={[
10+
{
11+
title: "Login",
12+
type: "page",
13+
href: "https://kuzco.xyz/login",
14+
},
15+
{
16+
title: "Register",
17+
type: "page",
18+
href: "https://kuzco.xyz/register",
19+
},
20+
]}
21+
/>
22+
</>
23+
);
24+
}
25+
26+
export default Navigation;

components/Social.tsx

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import React from "react";
2+
import { DiscordIcon, GitHubIcon } from "nextra/icons";
3+
import { useTheme } from "nextra-theme-docs";
4+
5+
function Github() {
6+
return (
7+
<a
8+
href="https://github.com/context-labs"
9+
className="hidden p-2 text-current sm:flex hover:opacity-75"
10+
title="Context GitHub"
11+
target="_blank"
12+
rel="noreferrer"
13+
>
14+
<GitHubIcon />
15+
</a>
16+
);
17+
}
18+
19+
function Discord() {
20+
return (
21+
<a
22+
href="https://discord.gg/kuzco"
23+
className="hidden p-2 text-current sm:flex hover:opacity-75"
24+
title="Kuzco Discord server"
25+
target="_blank"
26+
rel="noreferrer"
27+
>
28+
<DiscordIcon />
29+
</a>
30+
);
31+
}
32+
33+
function Twitter() {
34+
const { theme = "dark" } = useTheme();
35+
return (
36+
<a
37+
href="https://twitter.com/kuzco_xyz"
38+
className="hidden p-2 text-current sm:flex hover:opacity-75"
39+
title="Context Twitter"
40+
target="_blank"
41+
rel="noreferrer"
42+
>
43+
<svg
44+
width="24"
45+
height="24"
46+
viewBox="0 0 30 30"
47+
fill="none"
48+
xmlns="http://www.w3.org/2000/svg"
49+
>
50+
<path
51+
d="M11.7887 28C8.55374 28 5.53817 27.0591 3 25.4356C5.15499 25.5751 8.95807 25.2411 11.3236 22.9848C7.76508 22.8215 6.16026 20.0923 5.95094 18.926C6.25329 19.0426 7.6953 19.1826 8.50934 18.856C4.4159 17.8296 3.78793 14.2373 3.92748 13.141C4.695 13.6775 5.99745 13.8641 6.50913 13.8174C2.69479 11.0882 4.06703 6.98276 4.74151 6.09635C7.47882 9.88867 11.5812 12.0186 16.6564 12.137C16.5607 11.7174 16.5102 11.2804 16.5102 10.8316C16.5102 7.61092 19.1134 5 22.3247 5C24.0025 5 25.5144 5.71275 26.5757 6.85284C27.6969 6.59011 29.3843 5.97507 30.2092 5.4432C29.7934 6.93611 28.4989 8.18149 27.7159 8.64308C27.7224 8.65878 27.7095 8.62731 27.7159 8.64308C28.4037 8.53904 30.2648 8.18137 31 7.68256C30.6364 8.52125 29.264 9.91573 28.1377 10.6964C28.3473 19.9381 21.2765 28 11.7887 28Z"
52+
fill={theme === "dark" ? "white" : "black"}
53+
/>
54+
</svg>
55+
</a>
56+
);
57+
}
58+
59+
export { Github, Discord, Twitter };

components/features.js

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import {
2+
ArrowPathIcon,
3+
FingerPrintIcon,
4+
CloudArrowUpIcon,
5+
BoltIcon,
6+
CpuChipIcon,
7+
ArrowsPointingOutIcon,
8+
} from "@heroicons/react/24/outline";
9+
10+
const features = [
11+
{
12+
name: "Web APIs",
13+
icon: ArrowPathIcon,
14+
},
15+
{
16+
name: "Context isolation",
17+
icon: FingerPrintIcon,
18+
},
19+
{
20+
name: "Easy to extend",
21+
icon: CloudArrowUpIcon,
22+
},
23+
{
24+
name: "Lightweight",
25+
description: `Execute builds using every core at maximum parallelism without wasting idle CPUs.`,
26+
icon: BoltIcon,
27+
},
28+
{
29+
name: "Written in TypeScript",
30+
description: `Define the relationships between your tasks and then let Turborepo optimize what to build and when.`,
31+
icon: ArrowsPointingOutIcon,
32+
},
33+
{
34+
name: "Node.js 14 or higher",
35+
description: `Turborepo doesn't interfere with your runtime code or touch your sourcemaps. It does what it does and then gets out of your way.`,
36+
icon: CpuChipIcon,
37+
},
38+
];
39+
40+
function Features() {
41+
return (
42+
<>
43+
<div className="grid grid-cols-2 gap-6 my-12 sm:grid-cols-3 ">
44+
{features.map(({ icon: Icon, ...feature }, i) => (
45+
<div
46+
className="flex items-center space-x-4"
47+
key={feature.name.split(" ").join("-")}
48+
>
49+
<div>
50+
<Icon
51+
className="block w-8 h-8"
52+
style={{ height: 24, width: 24 }}
53+
aria-hidden="true"
54+
/>
55+
</div>
56+
<div>
57+
<div className="my-0 font-medium dark:text-white">
58+
{feature.name}
59+
</div>
60+
</div>
61+
</div>
62+
))}
63+
</div>
64+
</>
65+
);
66+
}
67+
68+
export default Features;

components/footer.tsx

+193
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
import { useRouter } from "next/router";
2+
import Link from "next/link";
3+
import { useState } from "react";
4+
5+
const Vercel = ({ height = 20 }) => (
6+
<svg height={height} viewBox="0 0 283 64" fill="none">
7+
<path
8+
fill="currentColor"
9+
d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z"
10+
/>
11+
</svg>
12+
);
13+
14+
function FooterLink({ href, children }) {
15+
const classes =
16+
"text-sm text-gray-500 no-underline betterbetterhover:hover:betterhover:hover:text-gray-700 betterbetterhover:hover:dark:betterhover:hover:text-white transition";
17+
if (href.startsWith("http")) {
18+
return (
19+
<a href={href} className={classes}>
20+
{children}
21+
</a>
22+
);
23+
}
24+
return (
25+
<Link href={href}>
26+
<a className={classes}>{children}</a>
27+
</Link>
28+
);
29+
}
30+
31+
function FooterHeader({ children }) {
32+
return <h3 className="text-sm text-gray-900 dark:text-white">{children}</h3>;
33+
}
34+
35+
const navigation = {
36+
general: [
37+
{ name: "Documentation", href: "/docs" },
38+
{ name: "API Reference", href: "/docs/reference/command-line-reference" },
39+
{ name: "Blog", href: "/blog" },
40+
{ name: "Releases", href: "https://github.com/vercel/turborepo/releases" },
41+
{ name: "FAQ", href: "/docs/faq" },
42+
],
43+
support: [
44+
{
45+
name: "GitHub",
46+
href: "https://github.com/vercel/turborepo",
47+
},
48+
],
49+
company: [
50+
{
51+
name: "Open Source Software",
52+
href: "https://vercel.com/oss?utm_source=turborepo.org&utm_medium=referral&utm_campaign=footer-ossLink",
53+
},
54+
{ name: "GitHub", href: "https://github.com/vercel" },
55+
{ name: "Twitter", href: "https://twitter.com/vercel" },
56+
],
57+
legal: [
58+
{ name: "Privacy Policy", href: "/privacy" },
59+
{ name: "Terms of Use", href: "/terms" },
60+
],
61+
};
62+
63+
export function Footer() {
64+
return (
65+
<footer className="" aria-labelledby="footer-heading">
66+
<h2 id="footer-heading" className="sr-only">
67+
Footer
68+
</h2>
69+
<div className="py-8 mx-auto max-w-7xl">
70+
<div className="xl:grid xl:grid-cols-3 xl:gap-8">
71+
<div className="grid grid-cols-2 gap-8 xl:col-span-2">
72+
<div className="md:grid md:grid-cols-2 md:gap-8">
73+
<div>
74+
<FooterHeader>Solutions</FooterHeader>
75+
<ul role="list" className="mt-4 space-y-1.5 list-none ml-0">
76+
{navigation.general.map((item) => (
77+
<li key={item.name}>
78+
<FooterLink href={item.href}>{item.name}</FooterLink>
79+
</li>
80+
))}
81+
</ul>
82+
</div>
83+
<div className="mt-12 md:mt-0">
84+
<FooterHeader>Support</FooterHeader>
85+
<ul role="list" className="mt-4 space-y-1.5 list-none ml-0">
86+
{navigation.support.map((item) => (
87+
<li key={item.name}>
88+
<FooterLink href={item.href}>{item.name}</FooterLink>
89+
</li>
90+
))}
91+
</ul>
92+
</div>
93+
</div>
94+
<div className="md:grid md:grid-cols-2 md:gap-8">
95+
<div>
96+
<FooterHeader>Company</FooterHeader>
97+
<ul role="list" className="mt-4 space-y-1.5 list-none ml-0">
98+
{navigation.company.map((item) => (
99+
<li key={item.name}>
100+
<FooterLink href={item.href}>{item.name}</FooterLink>
101+
</li>
102+
))}
103+
</ul>
104+
</div>
105+
<div className="mt-12 md:mt-0">
106+
<FooterHeader>Legal</FooterHeader>
107+
<ul role="list" className="mt-4 space-y-1.5 list-none ml-0">
108+
{navigation.legal.map((item) => (
109+
<li key={item.name}>
110+
<FooterLink href={item.href}>{item.name}</FooterLink>
111+
</li>
112+
))}
113+
</ul>
114+
</div>
115+
</div>
116+
</div>
117+
<div className="">
118+
<FooterHeader>Subscribe to our newsletter</FooterHeader>
119+
<p className="mt-4 text-sm text-gray-600 dark:text-gray-500">
120+
Join the Turborepo newsletter and stay updated on new releases and
121+
features, guides, and case studies.
122+
</p>
123+
<SubmitForm />
124+
</div>
125+
</div>
126+
127+
<div className="pt-8 mt-8 md:flex md:items-center md:justify-between">
128+
<div>
129+
<a
130+
className="text-current"
131+
target="_blank"
132+
rel="noopener noreferrer"
133+
href="https://vercel.com?utm_source=turborepo.org&utm_medium=referral&utm_campaign=footer-logoLink"
134+
>
135+
<Vercel />
136+
</a>
137+
<p className="mt-4 text-xs text-gray-500 ">
138+
&copy; {new Date().getFullYear()} Vercel, Inc. All rights
139+
reserved.
140+
</p>
141+
</div>
142+
</div>
143+
</div>
144+
</footer>
145+
);
146+
}
147+
148+
function SubmitForm() {
149+
const [email, setEmail] = useState("");
150+
const router = useRouter();
151+
return (
152+
<form
153+
className="mt-4 sm:flex sm:max-w-md"
154+
onSubmit={(e) => {
155+
fetch("/api/signup", {
156+
method: "POST",
157+
headers: {
158+
"Content-Type": "application/json",
159+
},
160+
body: JSON.stringify({ email }),
161+
})
162+
.then((res) => res.json())
163+
.then((res) => {
164+
return router.push("/confirm");
165+
});
166+
e.preventDefault();
167+
}}
168+
>
169+
<label htmlFor="email-address" className="sr-only">
170+
Email address
171+
</label>
172+
<input
173+
type="email"
174+
name="email-address"
175+
id="email-address"
176+
autoComplete="email"
177+
required
178+
value={email}
179+
onChange={(e) => setEmail(e.target.value)}
180+
className="w-full min-w-0 px-4 py-2 text-base text-gray-900 placeholder-gray-500 bg-white border border-transparent rounded-md appearance-none dark:text-white sm:text-sm dark:border-gray-700 dark:bg-transparent focus:outline-none focus:ring-2 focus:ring-gray-800 dark:focus:border-white focus:placeholder-gray-400"
181+
placeholder="[email protected]"
182+
/>
183+
<div className="mt-3 rounded-md sm:mt-0 sm:ml-3 sm:flex-shrink-0">
184+
<button
185+
type="submit"
186+
className="flex items-center justify-center w-full px-4 py-2 text-base font-medium text-white bg-black dark:bg-white dark:text-black border border-transparent rounded-md sm:text-sm betterhover:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-800 dark:focus:ring-white dark:betterhover:hover:bg-gray-300"
187+
>
188+
Subscribe
189+
</button>
190+
</div>
191+
</form>
192+
);
193+
}

0 commit comments

Comments
 (0)