Skip to content

Commit 4cd34e4

Browse files
ofriwclaude
andcommitted
Add website UI components and styling
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 84eec90 commit 4cd34e4

File tree

6 files changed

+186
-0
lines changed

6 files changed

+186
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import type { ReactNode } from 'react';
2+
import clsx from 'clsx';
3+
import Heading from '@theme/Heading';
4+
import styles from './styles.module.css';
5+
6+
type FeatureItem = {
7+
title: string;
8+
Svg: React.ComponentType<React.ComponentProps<'svg'>>;
9+
description: ReactNode;
10+
};
11+
12+
const FeatureList: FeatureItem[] = [
13+
{
14+
title: 'Senior Developer Focused',
15+
Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
16+
description: (
17+
<>
18+
Skip the basics and dive deep into advanced AI coding patterns. Designed
19+
for experienced developers who want to master AI-assisted development.
20+
</>
21+
),
22+
},
23+
{
24+
title: 'Production-Ready Architecture',
25+
Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
26+
description: (
27+
<>
28+
Learn design patterns, system integration, and real-world challenges.
29+
Build maintainable, scalable solutions with AI assistance.
30+
</>
31+
),
32+
},
33+
{
34+
title: 'Comprehensive & Deep',
35+
Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
36+
description: (
37+
<>
38+
From fundamentals to advanced topics with thorough coverage. Master
39+
prompting, workflows, architecture, security, and performance
40+
optimization.
41+
</>
42+
),
43+
},
44+
];
45+
46+
function Feature({ title, Svg, description }: FeatureItem) {
47+
return (
48+
<div className={clsx('col col--4')}>
49+
<div className="text--center">
50+
<Svg className={styles.featureSvg} role="img" />
51+
</div>
52+
<div className="text--center padding-horiz--md">
53+
<Heading as="h3">{title}</Heading>
54+
<p>{description}</p>
55+
</div>
56+
</div>
57+
);
58+
}
59+
60+
export default function HomepageFeatures(): ReactNode {
61+
return (
62+
<section className={styles.features}>
63+
<div className="container">
64+
<div className="row">
65+
{FeatureList.map((props, idx) => (
66+
<Feature key={idx} {...props} />
67+
))}
68+
</div>
69+
</div>
70+
</section>
71+
);
72+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.features {
2+
display: flex;
3+
align-items: center;
4+
padding: 2rem 0;
5+
width: 100%;
6+
}
7+
8+
.featureSvg {
9+
height: 200px;
10+
width: 200px;
11+
}

website/src/css/custom.css

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Any CSS included here will be global. The classic template
3+
* bundles Infima by default. Infima is a CSS framework designed to
4+
* work well for content-centric websites.
5+
*/
6+
7+
/* You can override the default Infima variables here. */
8+
:root {
9+
--ifm-color-primary: #2e8555;
10+
--ifm-color-primary-dark: #29784c;
11+
--ifm-color-primary-darker: #277148;
12+
--ifm-color-primary-darkest: #205d3b;
13+
--ifm-color-primary-light: #33925d;
14+
--ifm-color-primary-lighter: #359962;
15+
--ifm-color-primary-lightest: #3cad6e;
16+
--ifm-code-font-size: 95%;
17+
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
18+
}
19+
20+
/* For readability concerns, you should choose a lighter palette in dark mode. */
21+
[data-theme='dark'] {
22+
--ifm-color-primary: #25c2a0;
23+
--ifm-color-primary-dark: #21af90;
24+
--ifm-color-primary-darker: #1fa588;
25+
--ifm-color-primary-darkest: #1a8870;
26+
--ifm-color-primary-light: #29d5b0;
27+
--ifm-color-primary-lighter: #32d8b4;
28+
--ifm-color-primary-lightest: #4fddbf;
29+
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
30+
}

website/src/pages/index.module.css

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* CSS files with the .module.css suffix will be treated as CSS modules
3+
* and scoped locally.
4+
*/
5+
6+
.heroBanner {
7+
padding: 4rem 0;
8+
text-align: center;
9+
position: relative;
10+
overflow: hidden;
11+
}
12+
13+
@media screen and (max-width: 996px) {
14+
.heroBanner {
15+
padding: 2rem;
16+
}
17+
}
18+
19+
.buttons {
20+
display: flex;
21+
align-items: center;
22+
justify-content: center;
23+
}

website/src/pages/index.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import type { ReactNode } from 'react';
2+
import clsx from 'clsx';
3+
import Link from '@docusaurus/Link';
4+
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
5+
import Layout from '@theme/Layout';
6+
import HomepageFeatures from '@site/src/components/HomepageFeatures';
7+
import Heading from '@theme/Heading';
8+
9+
import styles from './index.module.css';
10+
11+
function HomepageHeader() {
12+
const { siteConfig } = useDocusaurusContext();
13+
return (
14+
<header className={clsx('hero hero--primary', styles.heroBanner)}>
15+
<div className="container">
16+
<Heading as="h1" className="hero__title">
17+
{siteConfig.title}
18+
</Heading>
19+
<p className="hero__subtitle">{siteConfig.tagline}</p>
20+
<div className={styles.buttons}>
21+
<Link className="button button--secondary button--lg" to="/docs">
22+
Start Learning
23+
</Link>
24+
</div>
25+
</div>
26+
</header>
27+
);
28+
}
29+
30+
export default function Home(): ReactNode {
31+
const { siteConfig } = useDocusaurusContext();
32+
return (
33+
<Layout
34+
title={`Hello from ${siteConfig.title}`}
35+
description="Description will go into a meta tag in <head />"
36+
>
37+
<HomepageHeader />
38+
<main>
39+
<HomepageFeatures />
40+
</main>
41+
</Layout>
42+
);
43+
}

website/src/pages/markdown-page.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: Markdown page example
3+
---
4+
5+
# Markdown page example
6+
7+
You don't need React to write simple standalone pages.

0 commit comments

Comments
 (0)