From dcdb178468bd5c0db55e157d1513aea94dd0d30d Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Tue, 9 Jun 2026 14:03:20 +0700 Subject: [PATCH] Add OMP (Oh My Pi) icon and landing page --- .../app/src/components/icons/omp-icon.tsx | 14 +++++++++++++ packages/app/src/components/provider-icons.ts | 3 ++- .../website/src/components/landing-page.tsx | 19 ++++++++++++++++- packages/website/src/data/agent-pages.ts | 10 +++++++++ packages/website/src/routeTree.gen.ts | 21 +++++++++++++++++++ packages/website/src/routes/omp.tsx | 4 ++++ 6 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 packages/app/src/components/icons/omp-icon.tsx create mode 100644 packages/website/src/routes/omp.tsx diff --git a/packages/app/src/components/icons/omp-icon.tsx b/packages/app/src/components/icons/omp-icon.tsx new file mode 100644 index 000000000..880defe77 --- /dev/null +++ b/packages/app/src/components/icons/omp-icon.tsx @@ -0,0 +1,14 @@ +import Svg, { Path } from "react-native-svg"; + +interface OmpIconProps { + size?: number; + color?: string; +} + +export function OmpIcon({ size = 16, color = "currentColor" }: OmpIconProps) { + return ( + + + + ); +} diff --git a/packages/app/src/components/provider-icons.ts b/packages/app/src/components/provider-icons.ts index 941c56d7d..d552537e5 100644 --- a/packages/app/src/components/provider-icons.ts +++ b/packages/app/src/components/provider-icons.ts @@ -5,6 +5,7 @@ import { ClaudeIcon } from "@/components/icons/claude-icon"; import { CodexIcon } from "@/components/icons/codex-icon"; import { CopilotIcon } from "@/components/icons/copilot-icon"; import { OpenCodeIcon } from "@/components/icons/opencode-icon"; +import { OmpIcon } from "@/components/icons/omp-icon"; import { PiIcon } from "@/components/icons/pi-icon"; import { ACP_PROVIDER_CATALOG } from "@/data/acp-provider-catalog"; import { @@ -24,7 +25,7 @@ const BUILTIN_PROVIDER_ICONS: Record; const CODEX_BADGE_ICON = ; const OPENCODE_BADGE_ICON = ; const COPILOT_BADGE_ICON = ; +const OMP_BADGE_ICON = ; const PI_BADGE_ICON = ; -const FEATURED_AGENT_COUNT = 5; +const FEATURED_AGENT_COUNT = 6; const ADDITIONAL_AGENT_COUNT = AGENT_PAGES.length - FEATURED_AGENT_COUNT; const SOCIAL_PROOF_TWEETS = [ @@ -358,6 +359,7 @@ function MultiProviderSection() { { name: "Codex", icon: }, { name: "OpenCode", icon: }, { name: "Copilot", icon: }, + { name: "OMP (Oh My Pi)", icon: }, { name: "Pi", icon: }, ]; @@ -1251,6 +1253,7 @@ function GetStarted() { + ) { ); } +function OmpIcon(props: React.SVGProps) { + return ( + + ); +} + function PiIcon(props: React.SVGProps) { return ( rootRouteImport, } as any); +const OmpRoute = OmpRouteImport.update({ + id: "/omp", + path: "/omp", + getParentRoute: () => rootRouteImport, +} as any); const NovaRoute = NovaRouteImport.update({ id: "/nova", path: "/nova", @@ -355,6 +361,7 @@ export interface FileRoutesByFullPath { "/minion-code": typeof MinionCodeRoute; "/mistral-vibe": typeof MistralVibeRoute; "/nova": typeof NovaRoute; + "/omp": typeof OmpRoute; "/opencode": typeof OpencodeRoute; "/pi": typeof PiRoute; "/poolside": typeof PoolsideRoute; @@ -406,6 +413,7 @@ export interface FileRoutesByTo { "/minion-code": typeof MinionCodeRoute; "/mistral-vibe": typeof MistralVibeRoute; "/nova": typeof NovaRoute; + "/omp": typeof OmpRoute; "/opencode": typeof OpencodeRoute; "/pi": typeof PiRoute; "/poolside": typeof PoolsideRoute; @@ -460,6 +468,7 @@ export interface FileRoutesById { "/minion-code": typeof MinionCodeRoute; "/mistral-vibe": typeof MistralVibeRoute; "/nova": typeof NovaRoute; + "/omp": typeof OmpRoute; "/opencode": typeof OpencodeRoute; "/pi": typeof PiRoute; "/poolside": typeof PoolsideRoute; @@ -515,6 +524,7 @@ export interface FileRouteTypes { | "/minion-code" | "/mistral-vibe" | "/nova" + | "/omp" | "/opencode" | "/pi" | "/poolside" @@ -566,6 +576,7 @@ export interface FileRouteTypes { | "/minion-code" | "/mistral-vibe" | "/nova" + | "/omp" | "/opencode" | "/pi" | "/poolside" @@ -619,6 +630,7 @@ export interface FileRouteTypes { | "/minion-code" | "/mistral-vibe" | "/nova" + | "/omp" | "/opencode" | "/pi" | "/poolside" @@ -673,6 +685,7 @@ export interface RootRouteChildren { MinionCodeRoute: typeof MinionCodeRoute; MistralVibeRoute: typeof MistralVibeRoute; NovaRoute: typeof NovaRoute; + OmpRoute: typeof OmpRoute; OpencodeRoute: typeof OpencodeRoute; PiRoute: typeof PiRoute; PoolsideRoute: typeof PoolsideRoute; @@ -757,6 +770,13 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof OpencodeRouteImport; parentRoute: typeof rootRouteImport; }; + "/omp": { + id: "/omp"; + path: "/omp"; + fullPath: "/omp"; + preLoaderRoute: typeof OmpRouteImport; + parentRoute: typeof rootRouteImport; + }; "/nova": { id: "/nova"; path: "/nova"; @@ -1109,6 +1129,7 @@ const rootRouteChildren: RootRouteChildren = { MinionCodeRoute: MinionCodeRoute, MistralVibeRoute: MistralVibeRoute, NovaRoute: NovaRoute, + OmpRoute: OmpRoute, OpencodeRoute: OpencodeRoute, PiRoute: PiRoute, PoolsideRoute: PoolsideRoute, diff --git a/packages/website/src/routes/omp.tsx b/packages/website/src/routes/omp.tsx new file mode 100644 index 000000000..9d755c173 --- /dev/null +++ b/packages/website/src/routes/omp.tsx @@ -0,0 +1,4 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { agentRouteOptions } from "~/components/agent-route"; + +export const Route = createFileRoute("/omp")(agentRouteOptions("omp"));