First Commit. Duplicate bunext-sqlite preset

This commit is contained in:
2026-10-18 16:47:11 +01:00
commit 81e4a8aecc
718 changed files with 41695 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
import Section from "@moduletrace/twui/layout/Section";
import Container from "@moduletrace/twui/layout/Container";
import Stack from "@moduletrace/twui/layout/Stack";
import Row from "@moduletrace/twui/layout/Row";
import H2 from "@moduletrace/twui/layout/H2";
import Span from "@moduletrace/twui/layout/Span";
import Button from "@moduletrace/twui/layout/Button";
import { ArrowRight } from "lucide-react";
import { useAuthStatus } from "@/src/hooks/use-auth-status";
export default function CTASection() {
const { is_logged_in } = useAuthStatus();
if (is_logged_in) {
return null;
}
return (
<Section className="pt-0!">
<Container>
<Row className="w-full items-end justify-between gap-10! rounded-default-xl bg-dark dark:bg-white/5 dark:ring-1 dark:ring-white/10 px-8 py-14 xl:px-16 xl:py-20">
<Stack className="gap-5! max-w-2xl">
<Span className="htag text-white/50!">Begin</Span>
<H2 className="text-white">
Start with a foundation that already feels{" "}
<Span className="text-white/40">
finished.
</Span>
</H2>
</Stack>
<Button
title="Get started"
color="white"
size="large"
href="/auth/signup"
afterIcon={<ArrowRight size={16} />}
>
Get started
</Button>
</Row>
</Container>
</Section>
);
}
+32
View File
@@ -0,0 +1,32 @@
import Section from "@moduletrace/twui/layout/Section";
import Container from "@moduletrace/twui/layout/Container";
import Stack from "@moduletrace/twui/layout/Stack";
import Row from "@moduletrace/twui/layout/Row";
import H2 from "@moduletrace/twui/layout/H2";
import Span from "@moduletrace/twui/layout/Span";
import { FeaturesArray } from "../(data)/features-data";
import FeatureGrid from "@/src/components/general/feature-grid";
export default function FeaturesSection() {
return (
<Section id="features">
<Container>
<Row className="w-full items-end justify-between gap-8! mb-14">
<Stack className="gap-6! max-w-2xl">
<Span className="htag">What's inside</Span>
<H2>
Everything considered, nothing superfluous.
</H2>
</Stack>
<Span className="text-slate-500 dark:text-slate-400 leading-relaxed max-w-sm">
Runtime, database, routing, auth and interface work
together from the first commit, so the decisions left
are the ones that matter to your product.
</Span>
</Row>
<FeatureGrid items={FeaturesArray} />
</Container>
</Section>
);
}
+68
View File
@@ -0,0 +1,68 @@
import Section from "@moduletrace/twui/layout/Section";
import Container from "@moduletrace/twui/layout/Container";
import Stack from "@moduletrace/twui/layout/Stack";
import Row from "@moduletrace/twui/layout/Row";
import Span from "@moduletrace/twui/layout/Span";
import H1 from "@moduletrace/twui/layout/H1";
import Button from "@moduletrace/twui/layout/Button";
import { ArrowRight } from "lucide-react";
import { useAuthStatus } from "@/src/hooks/use-auth-status";
import { HeroSpecs } from "../(data)/hero-specs";
import HeroSpecItem from "../(partials)/hero-spec-item";
export default function Hero() {
const { is_logged_in } = useAuthStatus();
return (
<Section className="pt-20! pb-16! xl:pt-32! xl:pb-20! border-b border-slate-200/60 dark:border-white/10">
<Container>
<Stack className="w-full items-start gap-10!">
<Span className="htag">Bunext + SQLite preset</Span>
<H1 className="max-w-5xl">
Full-stack software, built in Bun.{" "}
<Span className="text-slate-400">
Shipped with intent.
</Span>
</H1>
<Row className="w-full items-end justify-between gap-10!">
<Span className="text-lg text-slate-600 dark:text-slate-400 leading-relaxed max-w-xl">
Routing, a schema-driven database, authentication
and a considered design system, assembled into one
starting point you can make your own.
</Span>
<Row className="flex-wrap items-center gap-3!">
{!is_logged_in ? (
<Button
title="Get started"
href="/auth/signup"
size="large"
afterIcon={<ArrowRight size={16} />}
>
Get started
</Button>
) : null}
<Button
title="Learn more"
variant="outlined"
color="gray"
size="large"
href="/about"
>
Learn more
</Button>
</Row>
</Row>
<div className="grid w-full grid-cols-2 lg:grid-cols-4 gap-x-6 mt-8">
{HeroSpecs.map((spec, index) => (
<HeroSpecItem
key={spec.label}
{...spec}
index={index}
/>
))}
</div>
</Stack>
</Container>
</Section>
);
}