From a278e67d9a00d2dc89bd58193e037c5bf9dbddc6 Mon Sep 17 00:00:00 2001 From: Salman Paracha Date: Fri, 30 Jan 2026 18:14:39 -0800 Subject: [PATCH] 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 Co-authored-by: Salman Paracha --- apps/katanemo-www/.gitignore | 41 +++++++++++ apps/katanemo-www/biome.json | 37 ++++++++++ apps/katanemo-www/next.config.ts | 33 +++++++++ apps/katanemo-www/package.json | 33 +++++++++ apps/katanemo-www/postcss.config.mjs | 7 ++ apps/katanemo-www/public/KatanemoLogo.svg | 19 +++++ apps/katanemo-www/src/app/globals.css | 19 +++++ apps/katanemo-www/src/app/layout.tsx | 87 +++++++++++++++++++++++ apps/katanemo-www/src/app/page.tsx | 72 +++++++++++++++++++ apps/katanemo-www/src/lib/metadata.ts | 48 +++++++++++++ apps/katanemo-www/tsconfig.json | 20 ++++++ 11 files changed, 416 insertions(+) create mode 100644 apps/katanemo-www/.gitignore create mode 100644 apps/katanemo-www/biome.json create mode 100644 apps/katanemo-www/next.config.ts create mode 100644 apps/katanemo-www/package.json create mode 100644 apps/katanemo-www/postcss.config.mjs create mode 100644 apps/katanemo-www/public/KatanemoLogo.svg create mode 100644 apps/katanemo-www/src/app/globals.css create mode 100644 apps/katanemo-www/src/app/layout.tsx create mode 100644 apps/katanemo-www/src/app/page.tsx create mode 100644 apps/katanemo-www/src/lib/metadata.ts create mode 100644 apps/katanemo-www/tsconfig.json diff --git a/apps/katanemo-www/.gitignore b/apps/katanemo-www/.gitignore new file mode 100644 index 00000000..5ef6a520 --- /dev/null +++ b/apps/katanemo-www/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/katanemo-www/biome.json b/apps/katanemo-www/biome.json new file mode 100644 index 00000000..41b3b952 --- /dev/null +++ b/apps/katanemo-www/biome.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.0/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": true, + "includes": ["**", "!node_modules", "!.next", "!dist", "!build"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2 + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noUnknownAtRules": "off" + } + }, + "domains": { + "next": "recommended", + "react": "recommended" + } + }, + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + } + } +} diff --git a/apps/katanemo-www/next.config.ts b/apps/katanemo-www/next.config.ts new file mode 100644 index 00000000..3d092246 --- /dev/null +++ b/apps/katanemo-www/next.config.ts @@ -0,0 +1,33 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + transpilePackages: [ + "@katanemo/ui", + "@katanemo/shared-styles", + "@katanemo/tailwind-config", + "@katanemo/tsconfig", + ], + experimental: { + externalDir: true, + }, + webpack: (config, { isServer }) => { + config.resolve.modules = [ + ...(config.resolve.modules || []), + "node_modules", + "../../node_modules", + ]; + + if (!isServer) { + config.resolve.fallback = { + ...config.resolve.fallback, + fs: false, + }; + } + return config; + }, + turbopack: { + resolveAlias: {}, + }, +}; + +export default nextConfig; diff --git a/apps/katanemo-www/package.json b/apps/katanemo-www/package.json new file mode 100644 index 00000000..af7b8cb6 --- /dev/null +++ b/apps/katanemo-www/package.json @@ -0,0 +1,33 @@ +{ + "name": "@katanemo/katanemo-www", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "biome check", + "format": "biome format --write", + "typecheck": "tsc --noEmit", + "clean": "rm -rf .next" + }, + "dependencies": { + "@katanemo/shared-styles": "*", + "@katanemo/ui": "*", + "next": "^16.1.6", + "react": "19.2.0", + "react-dom": "19.2.0" + }, + "devDependencies": { + "@biomejs/biome": "2.2.0", + "@katanemo/tailwind-config": "*", + "@katanemo/tsconfig": "*", + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "tailwindcss": "^4", + "tw-animate-css": "^1.4.0", + "typescript": "^5" + } +} diff --git a/apps/katanemo-www/postcss.config.mjs b/apps/katanemo-www/postcss.config.mjs new file mode 100644 index 00000000..61e36849 --- /dev/null +++ b/apps/katanemo-www/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/apps/katanemo-www/public/KatanemoLogo.svg b/apps/katanemo-www/public/KatanemoLogo.svg new file mode 100644 index 00000000..59123685 --- /dev/null +++ b/apps/katanemo-www/public/KatanemoLogo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/katanemo-www/src/app/globals.css b/apps/katanemo-www/src/app/globals.css new file mode 100644 index 00000000..235d1dcd --- /dev/null +++ b/apps/katanemo-www/src/app/globals.css @@ -0,0 +1,19 @@ +:root { + --katanemo-bg-start: #04171a; + --katanemo-bg-end: #0a292e; + --font-sans: var(--font-ibm-plex-sans); +} + +html, +body { + background: linear-gradient( + to bottom, + var(--katanemo-bg-start), + var(--katanemo-bg-end) + ); + min-height: 100%; +} + +body { + font-family: var(--font-ibm-plex-sans, var(--font-sans)); +} diff --git a/apps/katanemo-www/src/app/layout.tsx b/apps/katanemo-www/src/app/layout.tsx new file mode 100644 index 00000000..3b3ad84e --- /dev/null +++ b/apps/katanemo-www/src/app/layout.tsx @@ -0,0 +1,87 @@ +import type { Metadata } from "next"; +import Script from "next/script"; +import localFont from "next/font/local"; +import { siteConfig } from "../lib/metadata"; +import "@katanemo/shared-styles/globals.css"; +import "./globals.css"; + +const ibmPlexSans = localFont({ + src: [ + { + path: "../../../www/public/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf", + weight: "100 700", + style: "normal", + }, + { + path: "../../../www/public/fonts/IBMPlexSans-Italic-VariableFont_wdth,wght.ttf", + weight: "100 700", + style: "italic", + }, + ], + display: "swap", + variable: "--font-ibm-plex-sans", +}); + +const baseUrl = new URL(siteConfig.url); + +export const metadata: Metadata = { + title: `${siteConfig.name} - ${siteConfig.tagline}`, + description: siteConfig.description, + keywords: siteConfig.keywords, + metadataBase: baseUrl, + authors: siteConfig.authors, + creator: siteConfig.creator, + icons: { + icon: "/KatanemoLogo.svg", + }, + openGraph: { + type: "website", + locale: "en_US", + url: siteConfig.url, + title: `${siteConfig.name} - ${siteConfig.tagline}`, + description: siteConfig.description, + siteName: siteConfig.name, + images: [ + { + url: siteConfig.ogImage, + width: 1200, + height: 630, + alt: `${siteConfig.name} - ${siteConfig.tagline}`, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: `${siteConfig.name} - ${siteConfig.tagline}`, + description: siteConfig.description, + images: [siteConfig.ogImage], + creator: "@katanemo", + }, +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {/* Google tag (gtag.js) */} + +
{children}
+ + + ); +} diff --git a/apps/katanemo-www/src/app/page.tsx b/apps/katanemo-www/src/app/page.tsx new file mode 100644 index 00000000..263da803 --- /dev/null +++ b/apps/katanemo-www/src/app/page.tsx @@ -0,0 +1,72 @@ +import Image from "next/image"; +import Link from "next/link"; + +export default function HomePage() { + return ( +
+
+
+ Katanemo Logo +
+
+

+ Forward-deployed AI infrastructure engineers. +

+

+ Bringing industry-leading research and open-source technologies to + accelerate the development of AI agents. +

+
+ + Models Research + + + + Plano - Open Source Agent Infrastructure + + +
+
+
+ Move faster and more reliably by letting Katanemo do the heavy-lifting. +
+ + Contact Us + +
+
+ © 2026 Katanemo Labs, Inc. +
+
+ +
+
+ Katanemo Logo +
+
+
+ ); +} diff --git a/apps/katanemo-www/src/lib/metadata.ts b/apps/katanemo-www/src/lib/metadata.ts new file mode 100644 index 00000000..d2d2ca51 --- /dev/null +++ b/apps/katanemo-www/src/lib/metadata.ts @@ -0,0 +1,48 @@ +const BASE_URL = process.env.NEXT_PUBLIC_APP_URL || "https://katanemo.com"; + +export const siteConfig = { + name: "Katanemo", + tagline: "Forward-deployed AI infrastructure engineers", + description: + "Forward-deployed AI infrastructure engineers delivering industry-leading research and open-source technologies for agentic AI development efforts.", + url: BASE_URL, + ogImage: `${BASE_URL}/KatanemoLogo.svg`, + links: { + docs: "https://docs.katanemo.com", + github: "https://github.com/katanemo/plano", + discord: "https://discord.gg/pGZf2gcwEc", + huggingface: "https://huggingface.co/katanemo", + }, + keywords: [ + "Katanemo AI", + "Katanemo", + "Katanemo Labs", + "forward-deployed AI engineers", + "forward deployed AI infrastructure", + "AI infrastructure engineers", + "embedded AI engineers", + "on-site AI engineers", + "model training", + "AI model research", + "LLM model training", + "machine learning model development", + "custom AI model training", + "open source agentic AI", + "agentic AI stack", + "AI agent infrastructure", + "open source agent framework", + "agentic AI development", + "AI agent platform", + "Plano agent infrastructure", + "LLM infrastructure", + "AI infrastructure platform", + "agentic AI tools", + "AI agent orchestration", + "open source AI stack", + "enterprise AI infrastructure", + "production AI systems", + "AI deployment infrastructure", + ], + authors: [{ name: "Katanemo", url: "https://github.com/katanemo/plano" }], + creator: "Katanemo", +}; diff --git a/apps/katanemo-www/tsconfig.json b/apps/katanemo-www/tsconfig.json new file mode 100644 index 00000000..7e8be6bf --- /dev/null +++ b/apps/katanemo-www/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "@katanemo/tsconfig/nextjs.json", + "compilerOptions": { + "jsx": "react-jsx", + "esModuleInterop": true, + "paths": { + "@/*": ["./src/*"], + "@katanemo/ui": ["../../packages/ui/src"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts" + ], + "exclude": ["node_modules"] +}