Skip to content

Commit 437473b

Browse files
committed
feat: improve cards, sections
1 parent 5780468 commit 437473b

39 files changed

Lines changed: 13356 additions & 13432 deletions

package-lock.json

Lines changed: 12458 additions & 12301 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 74 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,77 @@
11
{
2-
"name": "landing-page",
3-
"version": "0.1.0",
4-
"private": true,
5-
"type": "module",
6-
"scripts": {
7-
"dev": "next dev",
8-
"build": "next build",
9-
"postbuild": "next-sitemap --config next-sitemap.config.cjs && node scripts/prepare-standalone.mjs",
10-
"start": "next start",
11-
"standalone": "node .next/standalone/server.js",
12-
"migrate": "payload migrate",
13-
"migrate:create": "payload migrate:create",
14-
"migrate:status": "payload migrate:status",
15-
"generate:importmap": "payload generate:importmap",
16-
"lint": "npm run typecheck",
17-
"typecheck": "tsc --noEmit",
18-
"knip": "node --import tsx ./node_modules/knip/bin/knip.js",
19-
"generate": "payload generate:types"
20-
},
21-
"dependencies": {
22-
"@base-ui/react": "^1.5.0",
23-
"@c15t/nextjs": "^2.1.0",
24-
"@c15t/scripts": "^2.1.0",
25-
"@code0-tech/pictor": "^0.10.3",
26-
"@icons-pack/react-simple-icons": "^13.13.0",
27-
"@payloadcms/db-postgres": "3.85.1",
28-
"@payloadcms/email-nodemailer": "3.85.1",
29-
"@payloadcms/next": "3.85.1",
30-
"@payloadcms/plugin-import-export": "3.85.1",
31-
"@payloadcms/plugin-seo": "3.85.1",
32-
"@payloadcms/richtext-lexical": "3.85.1",
33-
"@tabler/icons-react": "3.41.1",
34-
"class-variance-authority": "^0.7.1",
35-
"clsx": "^2.1.1",
36-
"graphql": "^16.14.2",
37-
"knip": "^6.16.1",
38-
"motion": "^12.40.0",
39-
"next": "^16.2.7",
40-
"next-sitemap": "^4.2.3",
41-
"ogl": "^1.0.11",
42-
"payload": "3.85.1",
43-
"react": "^19.2.7",
44-
"react-dom": "^19.2.7",
45-
"sass": "^1.100.0",
46-
"sharp": "^0.34.5",
47-
"tailwind-merge": "^3.6.0",
48-
"tw-animate-css": "^1.4.0",
49-
"web-haptics": "^0.0.6"
50-
},
51-
"devDependencies": {
52-
"@tailwindcss/postcss": "^4.3.0",
53-
"@types/node": "^25.9.2",
54-
"@types/react": "^19.2.17",
55-
"@types/react-dom": "^19.2.3",
56-
"postcss": "^8.5.15",
57-
"prettier": "^3.8.4",
58-
"tailwindcss": "^4.3.0",
59-
"tsx": "^4.22.4",
60-
"typescript": "^6.0.3"
61-
},
62-
"overrides": {
63-
"postcss": "$postcss",
64-
"uuid": "14.0.0",
65-
"nodemailer": "8.0.10",
66-
"lodash": "4.18.1",
67-
"file-type": "22.0.0",
68-
"undici": "8.4.1",
69-
"dompurify": "3.4.8",
70-
"yaml": "2.9.0",
71-
"@esbuild-kit/core-utils": {
72-
"esbuild": "0.28.0"
2+
"name": "landing-page",
3+
"version": "0.1.0",
4+
"private": true,
5+
"type": "module",
6+
"scripts": {
7+
"dev": "next dev",
8+
"build": "next build",
9+
"postbuild": "next-sitemap --config next-sitemap.config.cjs && node scripts/prepare-standalone.mjs",
10+
"start": "next start",
11+
"standalone": "node .next/standalone/server.js",
12+
"migrate": "payload migrate",
13+
"migrate:create": "payload migrate:create",
14+
"migrate:status": "payload migrate:status",
15+
"generate:importmap": "payload generate:importmap",
16+
"lint": "npm run typecheck",
17+
"typecheck": "tsc --noEmit",
18+
"knip": "node --import tsx ./node_modules/knip/bin/knip.js",
19+
"generate": "payload generate:types"
20+
},
21+
"dependencies": {
22+
"@base-ui/react": "^1.5.0",
23+
"@c15t/nextjs": "^2.1.0",
24+
"@c15t/scripts": "^2.1.0",
25+
"@code0-tech/pictor": "^0.10.3",
26+
"@icons-pack/react-simple-icons": "^13.13.0",
27+
"@mvriu5/payload-ai": "^1.2.0",
28+
"@openrouter/ai-sdk-provider": "^2.9.1",
29+
"@payloadcms/db-postgres": "3.85.1",
30+
"@payloadcms/email-nodemailer": "3.85.1",
31+
"@payloadcms/next": "3.85.1",
32+
"@payloadcms/plugin-import-export": "3.85.1",
33+
"@payloadcms/plugin-seo": "3.85.1",
34+
"@payloadcms/richtext-lexical": "3.85.1",
35+
"@tabler/icons-react": "3.41.1",
36+
"class-variance-authority": "^0.7.1",
37+
"clsx": "^2.1.1",
38+
"graphql": "^16.14.2",
39+
"knip": "^6.16.1",
40+
"motion": "^12.40.0",
41+
"next": "^16.2.7",
42+
"next-sitemap": "^4.2.3",
43+
"ogl": "^1.0.11",
44+
"payload": "3.85.1",
45+
"react": "^19.2.7",
46+
"react-dom": "^19.2.7",
47+
"sass": "^1.100.0",
48+
"sharp": "^0.34.5",
49+
"tailwind-merge": "^3.6.0",
50+
"tw-animate-css": "^1.4.0",
51+
"web-haptics": "^0.0.6"
52+
},
53+
"devDependencies": {
54+
"@tailwindcss/postcss": "^4.3.0",
55+
"@types/node": "^25.9.2",
56+
"@types/react": "^19.2.17",
57+
"@types/react-dom": "^19.2.3",
58+
"postcss": "^8.5.15",
59+
"prettier": "^3.8.4",
60+
"tailwindcss": "^4.3.0",
61+
"tsx": "^4.22.4",
62+
"typescript": "^6.0.3"
63+
},
64+
"overrides": {
65+
"postcss": "$postcss",
66+
"uuid": "14.0.0",
67+
"nodemailer": "8.0.10",
68+
"lodash": "4.18.1",
69+
"file-type": "22.0.0",
70+
"undici": "8.4.1",
71+
"dompurify": "3.4.8",
72+
"yaml": "2.9.0",
73+
"@esbuild-kit/core-utils": {
74+
"esbuild": "0.28.0"
75+
}
7376
}
74-
}
7577
}

src/app/(landing)/[locale]/actions/[slug]/page.tsx

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,18 @@ export default async function ActionDetailPage({ params }: { params: LocaleSlugP
3535
<Aurora />
3636
<LandingContainer className="pt-32">
3737
<div className="mx-auto flex w-full max-w-4xl flex-col gap-8">
38-
<LinkButton
39-
href={`/${locale}/actions`}
40-
showArrow={false}
41-
className="border-0 hover:bg-white/10 pl-2.5 pr-4 py-1 rounded-xl hover:text-white"
42-
>
38+
<LinkButton href={`/${locale}/actions`} showArrow={false} className="border-0 hover:bg-white/10 pl-2.5 pr-4 py-1 rounded-xl hover:text-white after:hidden">
4339
<IconArrowLeft size={16} />
4440
{locale === "de" ? "Zurück" : "Back"}
4541
</LinkButton>
4642

4743
<div className="flex flex-col gap-8">
48-
4944
<div className="relative z-10 flex flex-col gap-8">
5045
<div className="flex flex-col gap-4 sm:flex-row sm:justify-between">
51-
5246
<div className="flex flex-col gap-6 sm:flex-row sm:items-start">
5347
{iconUrl && (
5448
<div className="relative size-20 shrink-0 overflow-hidden rounded-3xl border border-white/10 bg-white/5">
55-
<Image
56-
src={iconUrl}
57-
alt={icon?.alt ?? action.title}
58-
fill
59-
sizes="80px"
60-
className="object-contain p-2"
61-
/>
49+
<Image src={iconUrl} alt={icon?.alt ?? action.title} fill sizes="80px" className="object-contain p-2" />
6250
</div>
6351
)}
6452

@@ -67,10 +55,7 @@ export default async function ActionDetailPage({ params }: { params: LocaleSlugP
6755
{tags.length > 0 && (
6856
<div className="flex flex-wrap gap-2">
6957
{tags.map((tag) => (
70-
<span
71-
key={tag}
72-
className="rounded-full border border-white/10 bg-white/5 px-3 py-1 text-xs text-white/70"
73-
>
58+
<span key={tag} className="rounded-full border border-white/10 bg-white/5 px-3 py-1 text-xs text-white/70">
7459
{tag}
7560
</span>
7661
))}
@@ -80,37 +65,22 @@ export default async function ActionDetailPage({ params }: { params: LocaleSlugP
8065
</div>
8166

8267
{action.documentation?.label && action.documentation?.url && (
83-
<HapticButtonLink
84-
href={ action.documentation.url}
85-
variant="normal"
86-
className="text-sm!"
87-
>
88-
<IconExternalLink size={16}/>
68+
<HapticButtonLink href={action.documentation.url} variant="normal" className="text-sm!">
69+
<IconExternalLink size={16} />
8970
{action.documentation.label}
9071
</HapticButtonLink>
9172
)}
92-
9373
</div>
94-
{action.description && (
95-
<div className="max-w-3xl whitespace-pre-line text-sm leading-6 text-white/75">
96-
{action.description}
97-
</div>
98-
)}
74+
{action.description && <div className="max-w-3xl whitespace-pre-line text-sm leading-6 text-white/75">{action.description}</div>}
9975

10076
<ActionTriggerView locale={locale} triggers={triggers} functionDefs={functionDefs} />
10177

10278
{references.length > 0 && (
10379
<div className="space-y-3">
104-
<p className="text-sm tracking-wider text-white/50">
105-
{referencesLabel}
106-
</p>
80+
<p className="text-sm tracking-wider text-white/50">{referencesLabel}</p>
10781
<div className="grid gap-4 md:grid-cols-2">
10882
{references.map((reference) => (
109-
<ActionCard
110-
key={reference.id}
111-
action={reference}
112-
locale={locale}
113-
/>
83+
<ActionCard key={reference.id} action={reference} locale={locale} />
11484
))}
11585
</div>
11686
</div>
@@ -136,4 +106,3 @@ export async function generateMetadata({ params }: { params: LocaleSlugPageParam
136106
description: action.shortDescription ?? action.description ?? undefined,
137107
})
138108
}
139-

src/app/(landing)/[locale]/blog/[slug]/page.tsx

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { BlogPost } from "@/components/blog/BlogPost"
22
import { BlogSkeleton } from "@/components/blog/BlogSkeleton"
33
import { InteractiveGridPattern } from "@/components/InteractiveGridPattern"
44
import { Aurora } from "@/components/ui/Aurora"
5+
import { Card } from "@/components/ui/Card"
56
import { HapticButtonLink } from "@/components/ui/HapticButtonLink"
67
import { LandingContainer } from "@/components/ui/LandingContainer"
78
import { getPageLocaleAndSlug, type LocaleSlugPageParams } from "@/lib/appRoute"
@@ -11,7 +12,6 @@ import { createMetadata, resolveSiteUrl } from "@/lib/siteConfig"
1112
import { type Media } from "@/payload-types"
1213
import type { Metadata } from "next"
1314
import Image from "next/image"
14-
import { notFound } from "next/navigation"
1515
import { Suspense } from "react"
1616

1717
function getMediaUrl(value?: number | Media | null) {
@@ -35,33 +35,30 @@ export default async function Page({ params }: { params: LocaleSlugPageParams })
3535
<Suspense fallback={<BlogSkeleton />}>
3636
<BlogPost slug={slug} locale={locale} />
3737

38-
<div className={"glass-card-shell mt-32 w-full overflow-hidden rounded-3xl bg-[linear-gradient(180deg,rgba(255,255,255,0.05),rgba(255,255,255,0.02))] shadow-[0_24px_80px_rgba(0,0,0,0.28)]"}>
39-
<div aria-hidden="true" className="glass-card-topline" />
38+
<Card size="lg" className={"mt-32 w-full p-0 overflow-hidden bg-[linear-gradient(180deg,rgba(255,255,255,0.05),rgba(255,255,255,0.02))]"}>
4039
<div className={"relative flex w-full flex-col items-center justify-center overflow-hidden rounded-3xl px-6 py-10 sm:px-10 sm:py-12"}>
41-
42-
<InteractiveGridPattern
43-
className="opacity-60 mask-[radial-gradient(600px_circle_at_center,white,transparent)] rounded-3xl"
44-
width={40}
45-
height={40}
46-
squares={[35, 15]}
40+
<InteractiveGridPattern className="opacity-60 mask-[radial-gradient(600px_circle_at_center,white,transparent)] rounded-3xl" width={40} height={40} squares={[35, 15]} />
41+
<div
42+
className={
43+
"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_50%_20%,rgba(255,255,255,0.14),transparent_24%),radial-gradient(circle_at_50%_22%,rgba(191,90,242,0.18),transparent_34%),radial-gradient(circle_at_50%_18%,rgba(255,255,255,0.08),transparent_20%)] md:bg-[radial-gradient(circle_at_top,rgba(255,255,255,0.14),transparent_32%),radial-gradient(circle_at_20%_50%,rgba(191,90,242,0.14),transparent_38%),radial-gradient(circle_at_78%_48%,rgba(255,255,255,0.08),transparent_28%)]"
44+
}
4745
/>
48-
<div className={"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_50%_20%,rgba(255,255,255,0.14),transparent_24%),radial-gradient(circle_at_50%_22%,rgba(191,90,242,0.18),transparent_34%),radial-gradient(circle_at_50%_18%,rgba(255,255,255,0.08),transparent_20%)] md:bg-[radial-gradient(circle_at_top,rgba(255,255,255,0.14),transparent_32%),radial-gradient(circle_at_20%_50%,rgba(191,90,242,0.14),transparent_38%),radial-gradient(circle_at_78%_48%,rgba(255,255,255,0.08),transparent_28%)]"} />
4946

5047
<div className={"relative z-20 flex w-full max-w-4xl flex-col items-center gap-8 text-center md:flex-row md:items-center md:text-left"}>
51-
<div className={"relative flex size-32 shrink-0 items-center justify-center rounded-3xl border border-white/10 bg-white/5 shadow-[0_18px_46px_rgba(0,0,0,0.24)] backdrop-blur-md md:size-40"}>
48+
<div
49+
className={
50+
"relative flex size-32 shrink-0 items-center justify-center rounded-3xl border border-white/10 bg-white/5 shadow-[0_18px_46px_rgba(0,0,0,0.24)] backdrop-blur-md md:size-40"
51+
}
52+
>
5253
<div className={"relative isolate flex items-center justify-center rounded-3xl ring ring-white/10 px-4 py-4 shadow-[inset_0_1px_0_rgba(255,255,255,0.06)]"}>
5354
<div aria-hidden="true" className="pointer-events-none absolute inset-0 rounded-[1.25rem] bg-linear-to-br from-primary via-primary to-secondary" />
5455
<Image src={"/code0_logo_white.png"} width={"120"} height={"120"} alt={"Code0 Logo"} className={"z-20"} />
5556
</div>
5657
</div>
5758

5859
<div className={"z-20 flex max-w-2xl flex-col items-center text-center md:items-start md:text-left"}>
59-
<p className={"max-w-xl text-3xl font-semibold leading-tight text-white"}>
60-
{ctaBlock?.heading ?? "Contact us"}
61-
</p>
62-
<p className={"mb-4 max-w-xl text-base leading-7 text-white/70"}>
63-
{ctaBlock?.subheading ?? ""}
64-
</p>
60+
<p className={"max-w-xl text-3xl font-semibold leading-tight text-white"}>{ctaBlock?.heading ?? "Contact us"}</p>
61+
<p className={"mb-4 max-w-xl text-base leading-7 text-white/70"}>{ctaBlock?.subheading ?? ""}</p>
6562
<HapticButtonLink
6663
href={"/contact"}
6764
variant="normal"
@@ -72,7 +69,7 @@ export default async function Page({ params }: { params: LocaleSlugPageParams })
7269
</div>
7370
</div>
7471
</div>
75-
</div>
72+
</Card>
7673
</Suspense>
7774
</div>
7875
</LandingContainer>

src/app/(payload)/admin/importMap.js

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)