Skip to content

Commit a278e67

Browse files
salmanapSpherrricalSalman Paracha
authored
Site clean (#716)
* init next.js app * add metadata for keyword selection * minor heading changes * updated title and keywords * updating link to reach planoai.dev --------- Co-authored-by: Musa <malikmusa1323@gmail.com> Co-authored-by: Salman Paracha <salmanparacha@MacBook-Pro-342.local>
1 parent d8b4c80 commit a278e67

11 files changed

Lines changed: 416 additions & 0 deletions

File tree

apps/katanemo-www/.gitignore

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.*
7+
.yarn/*
8+
!.yarn/patches
9+
!.yarn/plugins
10+
!.yarn/releases
11+
!.yarn/versions
12+
13+
# testing
14+
/coverage
15+
16+
# next.js
17+
/.next/
18+
/out/
19+
20+
# production
21+
/build
22+
23+
# misc
24+
.DS_Store
25+
*.pem
26+
27+
# debug
28+
npm-debug.log*
29+
yarn-debug.log*
30+
yarn-error.log*
31+
.pnpm-debug.log*
32+
33+
# env files (can opt-in for committing if needed)
34+
.env*
35+
36+
# vercel
37+
.vercel
38+
39+
# typescript
40+
*.tsbuildinfo
41+
next-env.d.ts

apps/katanemo-www/biome.json

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"$schema": "https://biomejs.dev/schemas/2.2.0/schema.json",
3+
"vcs": {
4+
"enabled": true,
5+
"clientKind": "git",
6+
"useIgnoreFile": true
7+
},
8+
"files": {
9+
"ignoreUnknown": true,
10+
"includes": ["**", "!node_modules", "!.next", "!dist", "!build"]
11+
},
12+
"formatter": {
13+
"enabled": true,
14+
"indentStyle": "space",
15+
"indentWidth": 2
16+
},
17+
"linter": {
18+
"enabled": true,
19+
"rules": {
20+
"recommended": true,
21+
"suspicious": {
22+
"noUnknownAtRules": "off"
23+
}
24+
},
25+
"domains": {
26+
"next": "recommended",
27+
"react": "recommended"
28+
}
29+
},
30+
"assist": {
31+
"actions": {
32+
"source": {
33+
"organizeImports": "on"
34+
}
35+
}
36+
}
37+
}

apps/katanemo-www/next.config.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import type { NextConfig } from "next";
2+
3+
const nextConfig: NextConfig = {
4+
transpilePackages: [
5+
"@katanemo/ui",
6+
"@katanemo/shared-styles",
7+
"@katanemo/tailwind-config",
8+
"@katanemo/tsconfig",
9+
],
10+
experimental: {
11+
externalDir: true,
12+
},
13+
webpack: (config, { isServer }) => {
14+
config.resolve.modules = [
15+
...(config.resolve.modules || []),
16+
"node_modules",
17+
"../../node_modules",
18+
];
19+
20+
if (!isServer) {
21+
config.resolve.fallback = {
22+
...config.resolve.fallback,
23+
fs: false,
24+
};
25+
}
26+
return config;
27+
},
28+
turbopack: {
29+
resolveAlias: {},
30+
},
31+
};
32+
33+
export default nextConfig;

apps/katanemo-www/package.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"name": "@katanemo/katanemo-www",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"dev": "next dev",
7+
"build": "next build",
8+
"start": "next start",
9+
"lint": "biome check",
10+
"format": "biome format --write",
11+
"typecheck": "tsc --noEmit",
12+
"clean": "rm -rf .next"
13+
},
14+
"dependencies": {
15+
"@katanemo/shared-styles": "*",
16+
"@katanemo/ui": "*",
17+
"next": "^16.1.6",
18+
"react": "19.2.0",
19+
"react-dom": "19.2.0"
20+
},
21+
"devDependencies": {
22+
"@biomejs/biome": "2.2.0",
23+
"@katanemo/tailwind-config": "*",
24+
"@katanemo/tsconfig": "*",
25+
"@tailwindcss/postcss": "^4",
26+
"@types/node": "^20",
27+
"@types/react": "^19",
28+
"@types/react-dom": "^19",
29+
"tailwindcss": "^4",
30+
"tw-animate-css": "^1.4.0",
31+
"typescript": "^5"
32+
}
33+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const config = {
2+
plugins: {
3+
"@tailwindcss/postcss": {},
4+
},
5+
};
6+
7+
export default config;

apps/katanemo-www/public/KatanemoLogo.svg

Lines changed: 19 additions & 0 deletions
Loading
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
:root {
2+
--katanemo-bg-start: #04171a;
3+
--katanemo-bg-end: #0a292e;
4+
--font-sans: var(--font-ibm-plex-sans);
5+
}
6+
7+
html,
8+
body {
9+
background: linear-gradient(
10+
to bottom,
11+
var(--katanemo-bg-start),
12+
var(--katanemo-bg-end)
13+
);
14+
min-height: 100%;
15+
}
16+
17+
body {
18+
font-family: var(--font-ibm-plex-sans, var(--font-sans));
19+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import type { Metadata } from "next";
2+
import Script from "next/script";
3+
import localFont from "next/font/local";
4+
import { siteConfig } from "../lib/metadata";
5+
import "@katanemo/shared-styles/globals.css";
6+
import "./globals.css";
7+
8+
const ibmPlexSans = localFont({
9+
src: [
10+
{
11+
path: "../../../www/public/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf",
12+
weight: "100 700",
13+
style: "normal",
14+
},
15+
{
16+
path: "../../../www/public/fonts/IBMPlexSans-Italic-VariableFont_wdth,wght.ttf",
17+
weight: "100 700",
18+
style: "italic",
19+
},
20+
],
21+
display: "swap",
22+
variable: "--font-ibm-plex-sans",
23+
});
24+
25+
const baseUrl = new URL(siteConfig.url);
26+
27+
export const metadata: Metadata = {
28+
title: `${siteConfig.name} - ${siteConfig.tagline}`,
29+
description: siteConfig.description,
30+
keywords: siteConfig.keywords,
31+
metadataBase: baseUrl,
32+
authors: siteConfig.authors,
33+
creator: siteConfig.creator,
34+
icons: {
35+
icon: "/KatanemoLogo.svg",
36+
},
37+
openGraph: {
38+
type: "website",
39+
locale: "en_US",
40+
url: siteConfig.url,
41+
title: `${siteConfig.name} - ${siteConfig.tagline}`,
42+
description: siteConfig.description,
43+
siteName: siteConfig.name,
44+
images: [
45+
{
46+
url: siteConfig.ogImage,
47+
width: 1200,
48+
height: 630,
49+
alt: `${siteConfig.name} - ${siteConfig.tagline}`,
50+
},
51+
],
52+
},
53+
twitter: {
54+
card: "summary_large_image",
55+
title: `${siteConfig.name} - ${siteConfig.tagline}`,
56+
description: siteConfig.description,
57+
images: [siteConfig.ogImage],
58+
creator: "@katanemo",
59+
},
60+
};
61+
62+
export default function RootLayout({
63+
children,
64+
}: Readonly<{
65+
children: React.ReactNode;
66+
}>) {
67+
return (
68+
<html lang="en">
69+
<body className={`${ibmPlexSans.variable} antialiased text-white`}>
70+
{/* Google tag (gtag.js) */}
71+
<Script
72+
src="https://www.googletagmanager.com/gtag/js?id=G-RLD5BDNW5N"
73+
strategy="afterInteractive"
74+
/>
75+
<Script strategy="afterInteractive">
76+
{`
77+
window.dataLayer = window.dataLayer || [];
78+
function gtag(){dataLayer.push(arguments);}
79+
gtag('js', new Date());
80+
gtag('config', 'G-RLD5BDNW5N');
81+
`}
82+
</Script>
83+
<div className="min-h-screen">{children}</div>
84+
</body>
85+
</html>
86+
);
87+
}

apps/katanemo-www/src/app/page.tsx

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import Image from "next/image";
2+
import Link from "next/link";
3+
4+
export default function HomePage() {
5+
return (
6+
<main className="relative flex min-h-screen items-center justify-center overflow-hidden px-6 pt-12 pb-16 font-sans sm:pt-20 lg:items-start lg:justify-start lg:pt-24">
7+
<div className="relative mx-auto w-full max-w-6xl flex flex-col items-center justify-center text-left lg:items-start lg:justify-start">
8+
<div className="pointer-events-none mb-6 w-full self-start lg:hidden">
9+
<Image
10+
src="/KatanemoLogo.svg"
11+
alt="Katanemo Logo"
12+
width={64}
13+
height={64}
14+
priority
15+
className="h-auto w-10 sm:w-20"
16+
/>
17+
</div>
18+
<div className="relative z-10 max-w-xl sm:max-w-2xl lg:max-w-2xl xl:max-w-8xl lg:pr-[26vw] xl:pr-[2vw] sm:right-0 md:right-0 lg:right-0 xl:right-20 2xl:right-50 sm:mt-36 mt-0">
19+
<h1 className="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-sans font-medium leading-tight tracking-tight text-white">
20+
Forward-deployed AI infrastructure engineers.
21+
</h1>
22+
<p className="mt-4 font-light tracking-[-0.4px] max-w-2xl text-base sm:text-lg md:text-xl lg:text-2xl text-white/70">
23+
Bringing industry-leading research and open-source technologies to
24+
accelerate the development of AI agents.
25+
</p>
26+
<div className="mt-18 flex flex-col gap-3 text-lg sm:text-xl lg:text-3xl font-light tracking-wide sm:tracking-[-0.03em] leading-snug">
27+
<Link
28+
href="https://huggingface.co/katanemo"
29+
className="flex items-center gap-2 text-[#31C887] hover:text-[#45e394] transition-colors"
30+
>
31+
<span>Models Research</span>
32+
<span aria-hidden className="text-emerald-300"></span>
33+
</Link>
34+
<Link
35+
href="https://planoai.dev"
36+
className="flex items-center gap-2 text-[#31C887] hover:text-[#45e394] transition-colors"
37+
>
38+
<span>Plano - Open Source Agent Infrastructure</span>
39+
<span aria-hidden className="text-emerald-300"></span>
40+
</Link>
41+
</div>
42+
<div className="mt-24">
43+
<div className="sm:max-w-7xl max-w-72 mb-4 text-sm sm:text-base lg:text-lg text-white/70 tracking-[-0.3px] sm:tracking-[0.8px]! font-light">
44+
Move faster and more reliably by letting Katanemo do the heavy-lifting.
45+
</div>
46+
<a
47+
href="mailto:interest@katanemo.com"
48+
className="text-sm sm:text-sm text-white/50 hover:text-white transition-colors cursor-pointer"
49+
>
50+
Contact Us
51+
</a>
52+
<div className="mt-4 h-px w-52 bg-white/10" />
53+
<div className="mt-3 text-sm text-white/50">
54+
© 2026 Katanemo Labs, Inc.
55+
</div>
56+
</div>
57+
58+
</div>
59+
<div className="pointer-events-none absolute top-50 right-[-20vw] sm:right-[-10vw] md:right-[-5vw] lg:right-[-20vw] xl:right-[-7vw] 2xl:right-[-17vw] hidden lg:block">
60+
<Image
61+
src="/KatanemoLogo.svg"
62+
alt="Katanemo Logo"
63+
width={900}
64+
height={1000}
65+
priority
66+
className="h-[95vh] w-auto max-w-none opacity-90"
67+
/>
68+
</div>
69+
</div>
70+
</main>
71+
);
72+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
const BASE_URL = process.env.NEXT_PUBLIC_APP_URL || "https://katanemo.com";
2+
3+
export const siteConfig = {
4+
name: "Katanemo",
5+
tagline: "Forward-deployed AI infrastructure engineers",
6+
description:
7+
"Forward-deployed AI infrastructure engineers delivering industry-leading research and open-source technologies for agentic AI development efforts.",
8+
url: BASE_URL,
9+
ogImage: `${BASE_URL}/KatanemoLogo.svg`,
10+
links: {
11+
docs: "https://docs.katanemo.com",
12+
github: "https://github.com/katanemo/plano",
13+
discord: "https://discord.gg/pGZf2gcwEc",
14+
huggingface: "https://huggingface.co/katanemo",
15+
},
16+
keywords: [
17+
"Katanemo AI",
18+
"Katanemo",
19+
"Katanemo Labs",
20+
"forward-deployed AI engineers",
21+
"forward deployed AI infrastructure",
22+
"AI infrastructure engineers",
23+
"embedded AI engineers",
24+
"on-site AI engineers",
25+
"model training",
26+
"AI model research",
27+
"LLM model training",
28+
"machine learning model development",
29+
"custom AI model training",
30+
"open source agentic AI",
31+
"agentic AI stack",
32+
"AI agent infrastructure",
33+
"open source agent framework",
34+
"agentic AI development",
35+
"AI agent platform",
36+
"Plano agent infrastructure",
37+
"LLM infrastructure",
38+
"AI infrastructure platform",
39+
"agentic AI tools",
40+
"AI agent orchestration",
41+
"open source AI stack",
42+
"enterprise AI infrastructure",
43+
"production AI systems",
44+
"AI deployment infrastructure",
45+
],
46+
authors: [{ name: "Katanemo", url: "https://github.com/katanemo/plano" }],
47+
creator: "Katanemo",
48+
};

0 commit comments

Comments
 (0)