-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathindex.tsx
More file actions
87 lines (83 loc) · 2.25 KB
/
index.tsx
File metadata and controls
87 lines (83 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import Heading from "@theme/Heading";
import clsx from "clsx";
import type { ReactNode } from "react";
import CodeIcon from "./icons/code.svg";
import LayersIcon from "./icons/layers.svg";
import PuzzleIcon from "./icons/puzzle.svg";
import SparklesIcon from "./icons/sparkles.svg";
import styles from "./styles.module.css";
type FeatureItem = {
title: string;
Icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;
description: ReactNode;
};
const FeatureList: FeatureItem[] = [
{
title: "Full-Stack SDK",
Icon: LayersIcon,
description: (
<>
Backend with Express, Vite, and plugins. Frontend with React hooks,
charts, and UI components. Everything you need out-of-the-box.
</>
),
},
{
title: "Extensible Plugins",
Icon: PuzzleIcon,
description: (
<>
Plugin system with lifecycle phases, built-in plugins for common tasks,
and full support for custom plugins. Extend at any level.
</>
),
},
{
title: "Type-Safe SQL Queries",
Icon: CodeIcon,
description: (
<>
Write Databricks SQL queries and get TypeScript types automatically.
Full parameter type safety across your entire stack.
</>
),
},
{
title: "Built for Humans & AI",
Icon: SparklesIcon,
description: (
<>
Designed for both developers and AI agents. Every API is discoverable,
self-documenting, and inferable by humans and LLMs alike.
</>
),
},
];
function Feature({ title, Icon, description }: FeatureItem) {
return (
<div className={clsx("col col--6")}>
<div className={styles.featureCard}>
<div className={styles.featureIcon}>
<Icon />
</div>
<Heading as="h3" className={styles.featureTitle}>
{title}
</Heading>
<p className={styles.featureDescription}>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures(): ReactNode {
return (
<section className={styles.features}>
<div className="container">
<div className={clsx("row", styles.featuresContainer)}>
{FeatureList.map((props) => (
<Feature key={props.title} {...props} />
))}
</div>
</div>
</section>
);
}