Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env sh

rm -rf .next
npm run build
npm run export-data
git add export/*.json
2 changes: 1 addition & 1 deletion export/footer.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[{"id":16,"company_name":{"en":"Code0 UG (haftungsbeschränkt) i.G.","de":"Code0 UG (haftungsbeschränkt) i.G."},"socialLinks":[],"groups":[{"id":"698ec580b893c93524e025f1","items":[{"id":"698ec59fb893c93524e025f3","url":"/about-us","label":{"en":"About Us","de":"About Us"}},{"id":"698edf2efee39446daeca23a","url":"/jobs","label":{"en":"Jobs","de":"Jobs"}},{"id":"6995ddab09329cbf85efcb2f","url":"/contact","label":{"en":"Contact","de":"Contact"}}],"heading":{"en":"Company","de":"Company"}},{"id":"698ec5b1b893c93524e025f7","items":[{"id":"698ec5b5b893c93524e025f9","url":"/features","label":{"en":"Features","de":"Features"}}],"heading":{"en":"Product","de":"Product"}},{"id":"698ec5bdb893c93524e025fb","items":[{"id":"698ec5c3b893c93524e025fd","url":"/privacy","label":{"en":"Privacy","de":"Privacy"}},{"id":"698ec5d7b893c93524e02601","url":"/legal-notice","label":{"en":"Legal Notice","de":"Legal Notice"}}],"heading":{"en":"Legal","de":"Legal"}}],"updatedAt":"2026-02-14T05:41:41.865Z","createdAt":"2026-02-13T06:34:07.778Z"}]
[{"id":16,"company_name":{"en":"Code0 UG (haftungsbeschränkt) i.G.","de":"Code0 UG (haftungsbeschränkt) i.G."},"socialLinks":[],"groups":[{"id":"698ec580b893c93524e025f1","items":[{"id":"698ec59fb893c93524e025f3","url":"/about-us","label":{"en":"About Us","de":"About Us"}},{"id":"698edf2efee39446daeca23a","url":"/jobs","label":{"en":"Jobs","de":"Jobs"}},{"id":"6995ddab09329cbf85efcb2f","url":"/contact","label":{"en":"Contact","de":"Contact"}}],"heading":{"en":"Company","de":"Company"}},{"id":"698ec5b1b893c93524e025f7","items":[{"id":"698ec5b5b893c93524e025f9","url":"/features","label":{"en":"Features","de":"Features"}},{"id":"69ce71c6fa51a3543d6d81eb","url":"/community-edition","label":{"en":"Community Edition","de":"Community Edition"}},{"id":"69ce71c8fa51a3543d6d81ed","url":"/enterprise-edition","label":{"en":"Enterprise Edition","de":"Enterprise Edition"}},{"id":"69cf44afc8ab1e2d6a7c1382","url":"/subscription","label":{"en":"Subscription","de":"Abonnement"}}],"heading":{"en":"Product","de":"Product"}},{"id":"698ec5bdb893c93524e025fb","items":[{"id":"698ec5c3b893c93524e025fd","url":"/privacy","label":{"en":"Privacy","de":"Privacy"}},{"id":"698ec5d7b893c93524e02601","url":"/legal-notice","label":{"en":"Legal Notice","de":"Legal Notice"}}],"heading":{"en":"Legal","de":"Legal"}}],"updatedAt":"2026-02-14T05:41:41.865Z","createdAt":"2026-02-13T06:34:07.778Z"}]
2 changes: 1 addition & 1 deletion export/navbarItems.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[{"id":105,"title":{"en":"Contact","de":"Kontakt"},"href":"/contact","order":6,"subMenu":[],"updatedAt":"2026-04-02T11:10:34.920Z","createdAt":"2026-02-18T15:42:23.612Z"},{"id":106,"title":{"en":"Jobs","de":"Jobs"},"href":"/jobs","order":4,"subMenu":[],"updatedAt":"2026-04-02T11:10:35.301Z","createdAt":"2026-02-13T06:59:51.849Z"},{"id":107,"title":{"en":"Docs","de":"Docs"},"href":"https://docs.code0.tech","order":2,"subMenu":[],"updatedAt":"2026-04-02T11:10:35.921Z","createdAt":"2026-02-13T06:56:56.633Z"},{"id":108,"title":{"en":"Blog","de":"Blog"},"href":"/blog","order":3,"subMenu":[],"updatedAt":"2026-04-02T11:10:36.311Z","createdAt":"2026-02-13T06:56:16.204Z"},{"id":109,"title":{"en":"About Us","de":"Über uns"},"href":"/about-us","order":5,"subMenu":[],"updatedAt":"2026-04-02T11:10:36.904Z","createdAt":"2026-02-13T06:31:52.833Z"},{"id":110,"title":{"en":"Use Cases","de":"Use Cases"},"href":"","order":1,"subMenu":[{"id":"69901333ef36d1a48e09221a","key":"logistic-automation","href":"/blog/smart-logistic-use-case","icon":"cube","color":"pink","title":{"en":"Smart logistic","de":"Smart logistic"},"description":{"en":"Maximize your shipping efficiency.","de":"Maximize your shipping efficiency."}},{"id":"69b2da175ab22f727de99a13","key":"chatbot-building","href":"/blog/smart-chatbots-use-case","icon":"cube","color":"aqua","title":{"en":"Smart chatbots","de":"Smart chatbots"},"description":{"en":"Turn your Discord server into a powerful automated hub.","de":"Turn your Discord server into a powerful automated hub."}},{"id":"69b2da3f5ab22f727de99a15","key":"ai-automation-and-integration","href":"/blog/smart-ai-agents-use-case","icon":"cube","color":"blue","title":{"en":"Smart AI agents","de":"Smart AI agents"},"description":{"en":"Build sovereign, model-agnostic AI agents with CodeZero.","de":"Build sovereign, model-agnostic AI agents with CodeZero."}}],"updatedAt":"2026-04-02T11:10:37.590Z","createdAt":"2026-02-13T06:31:37.386Z"}]
[{"id":111,"title":{"en":"Product","de":"Produkt"},"href":"/product","order":0,"subMenu":[{"id":"69ce7131fa51a3543d6d81e7","key":"community","href":"/community-edition","icon":"cube","title":{"en":"Community Edition","de":"Community Edition"},"description":{"en":"Community Edition BEschreibung bla bla lorem ipsum.","de":"Community Edition Beschreibung bla bla lorem ipsum."}},{"id":"69ce7171fa51a3543d6d81e9","key":"enterprise","href":"/enterprise-edition","icon":"gitBranch","title":{"en":"Enterprise Edition","de":"Enterprise Edition"},"description":{"en":"Enterprise Edition BEschreibung bla bla lorem ipsum.","de":"Community Edition BEschreibung bla bla lorem ipsum."}}],"updatedAt":"2026-04-02T13:40:00.131Z","createdAt":"2026-04-02T13:39:25.485Z"},{"id":105,"title":{"en":"Contact","de":"Kontakt"},"href":"/contact","order":6,"subMenu":[],"updatedAt":"2026-04-02T11:10:34.920Z","createdAt":"2026-02-18T15:42:23.612Z"},{"id":106,"title":{"en":"Jobs","de":"Jobs"},"href":"/jobs","order":4,"subMenu":[],"updatedAt":"2026-04-02T11:10:35.301Z","createdAt":"2026-02-13T06:59:51.849Z"},{"id":107,"title":{"en":"Docs","de":"Docs"},"href":"https://docs.code0.tech","order":2,"subMenu":[],"updatedAt":"2026-04-02T11:10:35.921Z","createdAt":"2026-02-13T06:56:56.633Z"},{"id":108,"title":{"en":"Blog","de":"Blog"},"href":"/blog","order":3,"subMenu":[],"updatedAt":"2026-04-02T11:10:36.311Z","createdAt":"2026-02-13T06:56:16.204Z"},{"id":109,"title":{"en":"About Us","de":"Über uns"},"href":"/about-us","order":5,"subMenu":[],"updatedAt":"2026-04-02T11:10:36.904Z","createdAt":"2026-02-13T06:31:52.833Z"},{"id":110,"title":{"en":"Use Cases","de":"Use Cases"},"href":"","order":1,"subMenu":[{"id":"69901333ef36d1a48e09221a","key":"logistic-automation","href":"/blog/smart-logistic-use-case","icon":"cube","title":{"en":"Smart logistic","de":"Smart logistic"},"description":{"en":"Maximize your shipping efficiency.","de":"Maximize your shipping efficiency."}},{"id":"69b2da175ab22f727de99a13","key":"chatbot-building","href":"/blog/smart-chatbots-use-case","icon":"cube","title":{"en":"Smart chatbots","de":"Smart chatbots"},"description":{"en":"Turn your Discord server into a powerful automated hub.","de":"Turn your Discord server into a powerful automated hub."}},{"id":"69b2da3f5ab22f727de99a15","key":"ai-automation-and-integration","href":"/blog/smart-ai-agents-use-case","icon":"cube","title":{"en":"Smart AI agents","de":"Smart AI agents"},"description":{"en":"Build sovereign, model-agnostic AI agents with CodeZero.","de":"Build sovereign, model-agnostic AI agents with CodeZero."}}],"updatedAt":"2026-04-02T11:10:37.590Z","createdAt":"2026-02-13T06:31:37.386Z"}]
2 changes: 1 addition & 1 deletion export/pages.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions export/subscriptionConfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
36 changes: 0 additions & 36 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/app/(landing)/[locale]/blog/[...slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ export default async function Page({ params }: { params: Promise<{ locale: strin
</p>
<HapticButtonLink
href={"/contact"}
locale={locale}
variant="normal"
className={"h-11 rounded-xl px-8! bg-white/88! text-primary! shadow-[0_12px_28px_rgba(255,255,255,0.12)] hover:bg-white!"}
>
Expand Down
13 changes: 13 additions & 0 deletions src/app/(landing)/[locale]/checkout/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { Aurora } from "@/components/ui/Aurora";
import { LandingContainer } from "@/components/ui/LandingContainer";

export default function CheckoutPage() {
return (
<>
<Aurora />
<LandingContainer>
<div/>
</LandingContainer>
</>
)
}
51 changes: 51 additions & 0 deletions src/app/(landing)/[locale]/community-edition/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { CtaSection } from "@/components/sections/CtaSection"
import { EditionFeatureSection } from "@/components/sections/EditionFeatureSection"
import { EditionHeroSection } from "@/components/sections/EditionHeroSection"
import { EditionInstallSection } from "@/components/sections/EditionInstallSection"
import { EditionUseCaseSection } from "@/components/sections/EditionUseCaseSection"
import { LandingContainer } from "@/components/ui/LandingContainer"
import { getLandingPage } from "@/lib/cms"
import { isSupportedLocale } from "@/lib/i18n"
import { getLandingPageMetadata } from "@/lib/pageMetadata"
import type { Metadata } from "next"
import { notFound } from "next/navigation"

export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
const { locale } = await params
return getLandingPageMetadata("community-edition", locale)
}

export default async function CommunityEditionPage({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params
if (!isSupportedLocale(locale)) notFound()

const page = await getLandingPage("community-edition", locale)
const heroBlock = page?.layout?.find((item) => item.blockType === "editionHero") ?? null
const featuresBlock = page?.layout?.find((item) => item.blockType === "editionFeatures") ?? null
const installBlock = page?.layout?.find((item) => item.blockType === "editionInstall") ?? null
const useCaseBlock = page?.layout?.find((item) => item.blockType === "editionUseCases") ?? null
const ctaBlock = page?.layout?.find((item) => item.blockType === "cta") ?? null

return (
<LandingContainer>
<EditionHeroSection
content={heroBlock}
locale={locale}
grainientColors={{
color1: "#10213a",
color2: "#f872e2",
color3: "#f8f172",
backgroundColor: "#0b1324",
}}
/>
<div className="h-32" aria-hidden="true" />
<EditionFeatureSection content={featuresBlock} />
<div className="h-32" aria-hidden="true" />
<EditionInstallSection content={installBlock} />
<div className="h-32" aria-hidden="true" />
<EditionUseCaseSection content={useCaseBlock} />
<div className="h-32" aria-hidden="true" />
<CtaSection content={ctaBlock} />
</LandingContainer>
)
}
48 changes: 48 additions & 0 deletions src/app/(landing)/[locale]/enterprise-edition/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { CtaSection } from "@/components/sections/CtaSection"
import { EditionFeatureSection } from "@/components/sections/EditionFeatureSection"
import { EditionHeroSection } from "@/components/sections/EditionHeroSection"
import { EditionUseCaseSection } from "@/components/sections/EditionUseCaseSection"
import { LandingContainer } from "@/components/ui/LandingContainer"
import { getLandingPage } from "@/lib/cms"
import type { CtaLayoutBlock } from "@/lib/cms"
import { isSupportedLocale } from "@/lib/i18n"
import { getLandingPageMetadata } from "@/lib/pageMetadata"
import type { Metadata } from "next"
import { notFound } from "next/navigation"

export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
const { locale } = await params
return getLandingPageMetadata("enterprise-edition", locale)
}

export default async function EnterpriseEditionPage({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params
if (!isSupportedLocale(locale)) notFound()

const page = await getLandingPage("enterprise-edition", locale)
const heroBlock = page?.layout?.find((item) => item.blockType === "editionHero") ?? null
const featuresBlock = page?.layout?.find((item) => item.blockType === "editionFeatures") ?? null
const useCaseBlock = page?.layout?.find((item) => item.blockType === "editionUseCases") ?? null
const ctaBlock = (page?.layout?.find((item) => item.blockType === "cta") ?? null) as CtaLayoutBlock | null

return (
<LandingContainer>
<EditionHeroSection
content={heroBlock}
locale={locale}
grainientColors={{
color1: "#13102d",
color2: "#7472f8",
color3: "#72c9f8",
backgroundColor: "#140c22",
}}
/>
<div className="h-32" aria-hidden="true" />
<EditionFeatureSection content={featuresBlock} />
<div className="h-32" aria-hidden="true" />
<EditionUseCaseSection content={useCaseBlock} />
<div className="h-32" aria-hidden="true" />
<CtaSection content={ctaBlock} floatingCta locale={locale} />
</LandingContainer>
)
}
28 changes: 28 additions & 0 deletions src/app/(landing)/[locale]/subscription/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { SubscriptionConfigurator } from "@/components/SubscriptionConfigurator"
import { Aurora } from "@/components/ui/Aurora"
import { LandingContainer } from "@/components/ui/LandingContainer"
import { getSubscriptionConfig } from "@/lib/cms"
import { isSupportedLocale } from "@/lib/i18n"
import { getLandingPageMetadata } from "@/lib/pageMetadata"
import type { Metadata } from "next"
import { notFound } from "next/navigation"

export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
const { locale } = await params
return getLandingPageMetadata("subscription", locale)
}

export default async function SubscriptionPage({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params
if (!isSupportedLocale(locale)) notFound()
const subscriptionConfig = await getSubscriptionConfig(locale)

return (
<>
<Aurora/>
<LandingContainer className="py-[10vh]">
<SubscriptionConfigurator locale={locale} content={subscriptionConfig} />
</LandingContainer>
</>
)
}
10 changes: 10 additions & 0 deletions src/app/(landing)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ export const metadata: Metadata = createMetadata()
export default async function RootLayout({ children }: { children: ReactNode }) {
return (
<html lang="en">
<head>
{/* Preload critical hero image */}
<link
rel="preload"
as="image"
href="/code0_software.png"
imageSrcSet="/_next/image?url=%2Fcode0_software.png&w=384&q=75 384w, /_next/image?url=%2Fcode0_software.png&w=640&q=75 640w, /_next/image?url=%2Fcode0_software.png&w=750&q=75 750w, /_next/image?url=%2Fcode0_software.png&w=828&q=75 828w, /_next/image?url=%2Fcode0_software.png&w=1080&q=75 1080w, /_next/image?url=%2Fcode0_software.png&w=1200&q=75 1200w, /_next/image?url=%2Fcode0_software.png&w=1920&q=75 1920w, /_next/image?url=%2Fcode0_software.png&w=2048&q=75 2048w, /_next/image?url=%2Fcode0_software.png&w=3840&q=75 3840w"
imageSizes="(min-width: 1024px) 60vw, 100vw"
/>
</head>
<body className={`${inter.className} tracking-[-0.5px] leading-normal bg-primary`}>
<MotionProvider>
<div className={"bg-primary"}>
Expand Down
70 changes: 70 additions & 0 deletions src/blocks/EditionFeaturesBlock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import type { Block } from "payload"

export const EditionFeaturesBlock: Block = {
slug: "editionFeatures",
labels: {
singular: "Edition Feature",
plural: "Edition Feature Blocks",
},
fields: [
{
name: "features",
label: "Features",
type: "array",
required: true,
fields: [
{
name: "label",
type: "text",
required: true,
localized: true,
},
{
name: "title",
type: "text",
required: true,
localized: true,
},
{
name: "description",
type: "textarea",
required: true,
localized: true,
},
{
name: "image",
label: "Image",
type: "upload",
relationTo: "media",
required: false,
},
{
name: "bulletPoints",
label: "Bullet Points",
type: "text",
required: true,
hasMany: true,
localized: true,
},
{
name: "link",
label: "Link",
type: "group",
fields: [
{
name: "label",
type: "text",
required: false,
localized: true,
},
{
name: "url",
type: "text",
required: false,
},
],
},
],
},
],
}
Loading